Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Moved kermit from binary blob media/os8/subsys/k12.tu56 as option k12 to kermit-12 build from source under control of kermit-12.pspec as option kermit-12. TODO: Find someone who can test out this kermit. It's a bit different from what we've had in the past. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | os8pkg |
Files: | files | file ages | folders |
SHA1: |
60a72125bd71d789335a4d6b762d9d72 |
User & Date: | poetnerd 2020-10-29 00:31:50.411 |
Context
2020-10-29
| ||
00:50 | Document more of the os8pkg syntax. check-in: 5f5c6f66c7 user: poetnerd tags: os8pkg | |
00:31 | Moved kermit from binary blob media/os8/subsys/k12.tu56 as option k12 to kermit-12 build from source under control of kermit-12.pspec as option kermit-12. TODO: Find someone who can test out this kermit. It's a bit different from what we've had in the past. check-in: 60a72125bd user: poetnerd tags: os8pkg | |
2020-10-28
| ||
16:00 | Added bin/os8pkg to the list of scripts installed by "make install" check-in: 61ff141003 user: tangent tags: os8pkg | |
Changes
Changes to auto.def.
︙ | ︙ | |||
62 63 64 65 66 67 68 | crt 1 "CRT-style rubout processing" dcp 1 "the DCP disassembler" e8 1 "Emacs-like Editor" focal69 0 "FOCAL,1969" fortran-ii 1 "FORTRAN II" fortran-iv 1 "FORTRAN IV" init 1 "the OS/8 INIT message" | | | 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | crt 1 "CRT-style rubout processing" dcp 1 "the DCP disassembler" e8 1 "Emacs-like Editor" focal69 0 "FOCAL,1969" fortran-ii 1 "FORTRAN II" fortran-iv 1 "FORTRAN IV" init 1 "the OS/8 INIT message" kermit-12 1 "12-bit Kermit" macrel 1 "the MACREL assembler" music 0 "*.MU files" uwfocal 1 "U/W FOCAL (only)" vtedit 0 "the TECO VTEDIT setup" } set alloptions {} |
︙ | ︙ |
Changes to media/os8/subsys/README.md.
︙ | ︙ | |||
13 14 15 16 17 18 19 | OS/8. Some of the data on these tapes could potentially be used with other PDP-8 operating systems, but at minimum, it would require translating the data from OS/8 tape format. | DECtape Image File Name | Content Description | ---------------------------------------------------------------------------- | < | 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | OS/8. Some of the data on these tapes could potentially be used with other PDP-8 operating systems, but at minimum, it would require translating the data from OS/8 tape format. | DECtape Image File Name | Content Description | ---------------------------------------------------------------------------- | `music.tu56` | [RFI-based][rfi] music playback programs ## Controlling the Build Process Most of these files are merged into the OS/8 binary disk image by default, but can be excluded by giving a `--disable-os8-NAME` flag to |
︙ | ︙ |
Deleted media/os8/subsys/k12.tu56.
cannot compute difference between binary files
Added scripts/misc/kermit-12-rk05.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # Script to build Kermit-12 from source to create # kermit-12.tu56 install image. # We build with the OS8_TOOLTIME packs: v3d-patched.rk05 mount rk0 $os8mo/v3d-patched.rk05 required scratch mount rk1 $os8mo/kermit-12.rk05 new boot rk0 os8 ZERO RKA1: os8 ZERO RKB1: # Copy source files onto the tape image. cpto $src/src/kermit-12/k12mit.pal RKA1:K12MIT.PA cpto $src/src/kermit-12/k12clr.pal RKA1:K12CLR.PA cpto $src/src/kermit-12/k12deb.pal RKA1:DEBOO.PA cpto $src/src/kermit-12/k12dec.pal RKA1:DECODE.PA cpto $src/src/kermit-12/k12enb.pal RKA1:ENBOO.PA cpto $src/src/kermit-12/k12enc.pal RKA1:ENCODE.PA cpto $src/src/kermit-12/k12ipg.pal RKA1:IPLGEN.PA cpto $src/src/kermit-12/k12ipl.pal RKA1:IPL.PA cpto $src/src/kermit-12/k12prm.pal RKA1:PARAM.PA cpto $src/src/kermit-12/k12pch.pal RKA1:K12PCH.PA pal8 RKA1:K12MIT.BN<RKA1:PARAM.PA,RKA1:K12MIT.PA (EFMW) pal8 RKA1:K12CLR.BN<RKA1:K12CLR.PA pal8 RKA1:IPLGEN.BN<RKA1:IPLGEN.PA os8 LOAD RKA1:K12CLR.BN,RKA1:K12MIT.BN os8 SAVE RKA1:K12MIT.SV=1 pal8 RKA1:ENBOO.BN<RKA1:ENBOO.PA /E/F os8 SAVE RKA1:ENBOO.SV=2001 pal8 RKA1:DEBOO.BN<RKA1:DEBOO.PA /E/F os8 SAVE RKA1:DEBOO.SV=0 pal8 RKA1:ENCODE.BN<RKA1:ENCODE.PA /E/F os8 SAVE RKA1:ENCODE.SV=2001 pal8 RKA1:DECODE.BN<RKA1:DECODE.PA os8 SAVE RKA1:DECODE.SV=0 |
Changes to scripts/os8/ock/dist-rk05.os8.
︙ | ︙ | |||
146 147 148 149 150 151 152 | begin enabled music print Music score files and source code mount dt1 $os8mi/subsys/music.tu56 ro required os8 COPY RKB0:<DTA1:*.* umount dt1 end enabled music | < < < < < < < | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | begin enabled music print Music score files and source code mount dt1 $os8mi/subsys/music.tu56 ro required os8 COPY RKB0:<DTA1:*.* umount dt1 end enabled music # FORTRAN IV begin default fortran-iv # rk1 holds the FORTRAN IV object image mount rk1 $os8mo/ock-fiv-obj.rk05 os8 COPY RKA0:<RKB1:*.* umount rk1 end default fortran-iv |
︙ | ︙ |
Changes to scripts/os8/v3d/dist-rk05.os8.
︙ | ︙ | |||
79 80 81 82 83 84 85 | begin enabled music umount dt1 mount dt1 $os8mi/subsys/music.tu56 ro required # resume os8 COPY RKB0:<DTA1:*.* end enabled music | < < < < < < < < | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | begin enabled music umount dt1 mount dt1 $os8mi/subsys/music.tu56 ro required # resume os8 COPY RKB0:<DTA1:*.* end enabled music # FORTRAN IV begin default fortran-iv umount dt1 mount dt1 $os8mi/subsys/al-4549d-ba-fr4-v3d-1.1978.tu56 ro required # resume os8 COPY RKA0:<DTA1:*.* end default fortran-iv |
︙ | ︙ |
Added scripts/os8pkg/kermit-12.pspec.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # Kermit-12 Package File format: rk05 inputs: src/kermit-12/README.md src/kermit-12/k12clr.pal src/kermit-12/k12crf.boo src/kermit-12/k12crf.enc src/kermit-12/k12deb.pal src/kermit-12/k12dec.pal src/kermit-12/k12enb.pal src/kermit-12/k12enc.doc src/kermit-12/k12enc.pal src/kermit-12/k12fl0.ipl src/kermit-12/k12fl1.ipl src/kermit-12/k12glb.boo src/kermit-12/k12glb.enc src/kermit-12/k12ip0.odt src/kermit-12/k12ip1.odt src/kermit-12/k12ipg.pal src/kermit-12/k12ipl.doc src/kermit-12/k12ipl.pal src/kermit-12/k12mit.ann src/kermit-12/k12mit.boo src/kermit-12/k12mit.bwr src/kermit-12/k12mit.doc src/kermit-12/k12mit.dsk src/kermit-12/k12mit.enc src/kermit-12/k12mit.lst src/kermit-12/k12mit.not src/kermit-12/k12mit.pal src/kermit-12/k12mit.upd src/kermit-12/k12pch.pal src/kermit-12/k12pl8.boo src/kermit-12/k12pl8.enc src/kermit-12/k12prm.pal outputs: SYS:<RKA1:K12MIT.SV SYS:<RKA1:ENBOO.SV SYS:<RKA1:DEBOO.SV SYS:<RKA1:ENCODE.SV SYS:<RKA1:ENCODE.SV DSK:<RKA1:K12CLR.BN DSK:<RKA1:IPLGEN.BN DSK:<RKA1:PARAM.PA DSK:<RKA1:IPL.PA DSK:<RKA1:K12PCH.PA DSK:<RKA1:K12MIT.PA |
Added src/kermit-12/README.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | # KERMIT-12: Kermit Software for the Digital Equipment Corporation PDP-8 and PDP-12 Written by Jerry Sands, Randy Hippe, Martyn Hemmings, Sepp Stadelmann, Richard Schlerf, and Charles Lasner. The codeline here uses [Columbia Kermit-12 Archive Distribution k12.tar.gz][k12-dist] as upstream. Another source is [ibiblio.org k12][ibiblio]. The Columbia Archive has two differences: text files k12mit.not, and k12mit.dsk are more up-to-date. [kermitproject.org][org-project] says: Kermit is a robust transport-independent file-transfer protocol and a large collection of software programs that implement it on a [wide variety of platforms][platforms]. In addition to file transfer, many of these programs also make network, dialed, and/or serial-port connections and also offer features such as terminal emulation, character-set conversion, and scripting for automation of any communication or file-management task. The Kermit Project originated at Columbia University in New York City in 1981 and remained there for 30 years. Since 2011 it is independent. [CLICK HERE][project] for more about the Kermit Project. The [Kermit-12 Site at Columbia][columbia-k12] was frozen in 2011, but still has useful information (even though many links there no longer work.) Excerpts from that page: Kermit-12 was written for DEC 12-bit processors including PDP-8, the PDP-12 laboratory computer, and the DECmate I, II, and III, WT-78, VT-78, and VT-278 word processors. It runs under OS/8, OS/78, OS/278, and OS/12. File types found in the Kermit-12 distribution are: | File type | Description | --------- | ------------------------------------------------- | .ann | Announcements (plain ASCII text). | .boo | ASCII-encoded binary encoding to be decoded by k12deb.sv | .bwr | "Beware" file (hints and tips). | .doc | Plain-text ASCII documentation. | .dsk | Description of files (plain text). | .enc | ASCII-encoded 12-bit binary encoding to be decoded by k12dec.sv | .ipl | Initial program ("bootstrap") loader. | .lst | Load map. | .not | Notes. | .odt | Octal Debugging Technique (bootstrapping). | .pal | PAL-8 assembly language source code. | .upd | Update notes. ## Operating Instructions (Extracted from k12mit.pal) KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES. **BRIEF USAGE DESCRIPTION.** KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE. AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE: 1. CONNECT (TO REMOTE SYSTEM AS TERMINAL). 2. SEND FILESPEC (TO REMOTE RECEIVER OR SERVER). 3. RECEIVE FILESPEC (FROM REMOTE SENDER). 4. GET FILESPEC (FROM REMOTE SERVER). 5. FINISH (SERVING). 6. SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED **** 7. EXIT (TO OPERATING SYSTEM). 8. HELP (DISPLAYS HELP MESSAGE). FILESPEC MAY BE ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION, WHERE THE FILENAME AND EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2 ALPHANUMERICS RESPECTIVELY, AS NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME FORMAT). THE DEVICE: FIELD IS OPTIONAL; ALL COMMANDS USING THE DEVICE: FIELD FOR LOCAL DEVICE SPECIFICATION WILL USE THIS DEVICE AS THE SOURCE OR DESTINATION AS NECESSARY FOR THE LOCAL FILES. IF THE DEVICE: FIELD IS OMITTED, THE DEFAULT DEVICE DSK: WILL BE USED. THE ACTUAL DEVICE USED MAY BE SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND: .ASSIGN DEV DSK WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE. KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT: THE ACTUAL DEFAULT PROMPT TEXT IS PARTIALLY TAKEN FROM THE ACTUAL MACHINE KERMIT-12 IS CURRENTLY EXECUTING ON. FOR EXAMPLE, IF KERMIT-12 HAS DETERMINED THE CPU TYPE AS PDP-8/E, THE PROMPT WILL BE: KERMIT-8/E> THIS ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH MESSAGES ORIGINATING FROM THE RESPECTIVE SYSTEMS. FUTURE VERSIONS WILL SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES. THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE ESCAPE CHARACTER. **COMMAND RESTRICTIONS** THE SEND COMMAND ALLOWS DEVICE:FILENAME.EXTENSION (6.2) WITH WILD-CARD SUBSTITUTION. A * MAY BE GIVEN FOR AN ENTIRE FIELD (EITHER FILENAME OR EXTENSION OR BOTH) ONLY. A ? WILL MATCH ANY SINGLE CHARACTER WHICH MUST EXIST IN THE ACTUAL FILENAME OR EXTENSION, UNLESS RIGHT-MOST IN THE FIELD. ALL MATCHING FILES WILL BE SENT. NO OUTBOUND FILENAME (AS-NAME) FACILITY EXISTS AT THIS TIME. THE RECEIVE COMMAND ALLOWS OPTIONAL DEVICE: ONLY. *THE FILENAME AND EXTENSION ARE NOT ALLOWED*. NAMES OF RECEIVED FILES WILL BE MODIFIED IF NECESSARY TO CONFORM TO THE 6.2 FORMAT. *IMPLEMENTATION RESTRICTION* : CERTAIN REMOTE FILENAMES CONTAINING NON-ALPHANUMERIC CHARACTERS MAY CAUSE KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL. THE GET COMMAND ALLOWS OPTIONAL DEVICE: TO DETERMINE DESTINATION OF THE INCOMING FILES. THE OUTBOUND FILESPEC MUST CONFORM TO LOCAL CONVENTIONS (FILENAME AND EXTENSION ARE NOT LIMITED TO 6.2 FORMAT; THE DEVICE: FIELD WILL NOT BE SENT TO THE REMOTE KERMIT UNLESS IT IS ILLEGAL WITHIN OS/8 SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS. IN THIS CASE, THE DEFAULT DEVICE DSK: APPLIES, AND THE ENTIRE "DEVICE" FIELD IS SENT ALONG WITH ANY FILENAME AND EXTENSION). CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE WITH THIS IMPLEMENTATION, AS IMBEDDED SPACES OR NON-ALPHANUMERIC CHARACTERS ARE NOT ALLOWED, EVEN THOUGH THEY MAY BE REQUIRED ON THE REMOTE SYSTEM. WILD-CARD CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE. <^X> OR <^Z> CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT IS NORMALLY A SLOW PROCESS, SINCE THE CHECKING IS DONE BY A SOFTWARE TIMEOUT SCHEME. AT THE PRESENT TIME, THERE IS NO DISTINCTION BETWEEN THESE THO CHARACTERS, SO IT IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF FILES INVOLVED IN THE TRANSFER IS ABORTED. **DECMATE II/III/III-PLUS CONSIDERATIONS** FUNCTION KEYS SEND <ESC> SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE. ALL SOFT FUNCTION KEYS ARE THEREFORE INEFFECTIVE (EXCEPT FOR HOLD SCREEN WHICH ALWAYS WORKS). CONNECT MODE RUNS IN 8-BIT MODE. THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE. ANY VALID DECMATE II/III/III-PLUS CHARACTER SET IS ALLOWED WHILE IN CONNECT MODE (MCS TCS LINE, ETC.). ALL <ESC> SEQUENCES ARE PASSED TO THE SLUSHWARE/FIRMWARE UNMODIFIED. KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM CONNECT MODE. [platforms]: http://www.kermitproject.org/archive.html [project]: http://www.kermitproject.org/kermit.html [columbia-k12]: http://www.columbia.edu/kermit/pdp8.html [org-project]: http://www.kermitproject.org/ [k12-dist]: http://www.columbia.edu/kermit/ftp/archives/k12.tar.gz [ibiblio]: http://www.ibiblio.org/pub/academic/computer-science/history/pdp-8/kermit/k12/ |
Added src/kermit-12/k12clr.pal.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / MEMORY CLEAR / THIS FILE IS USED TO PRE-CLEAR MEMORY WHEN LOADING KERMIT-12. THE RESULTING / "CLEANER" CORE-IMAGE FILE WILL BE SMALLER WHEN ENCODED DUE TO REPEAT / COMPRESSION OF THE CLEARED AREAS OF MEMORY, AS OPPOSED TO RANDOM RELICS LEFT / THERE BY OS/8. / LAST EDIT: 30-AUG-1990 09:00 CJL FIELD 0 /GOING TO FIELD ONE *0 /START AT THE BEGINNING ZBLOCK 7600 /CLEAR FIELD ZERO FIELD 1 /GOING TO FIELD ONE *0 /START AT THE BEGINNING ZBLOCK 7600 /CLEAR FIELD ONE $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12crf.boo.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | CREF.SV oX?lP44408030422>2Lg;cXj80PR>24H4QPE2cH85APE<PT<5@\e?RPZ=@`E?@0;=1`E418[1c81 ;cX000hg6`HB=c893`H3<a\6>R0?<P\66`H?1S81;SL000\a21DH5A`E41DZ:W4a00<07`0?800[ 7P042`0:00PQ1Sl6<chT1b4800lW02F0P820P820P9X0~~~~~~~3]YX<0@2P~6OonO~3RNKb3dML XYL0~<M_[o7P00~6B0000803o`3`~3P94;0P00~=O`T8180G20lfO[T0a6o46?bLm_ooSO\0O@Ml AW\PDPokn_md5_F:S@20O`1\B5SoPC2>74`200Ro7A2Pd0oo?g00oRo0P2838@:`203l1?20LaoP oCmeH400ic>0C;D?P0n5R?J9nTlI2a69Q`ooo[\0~;P87\RC0fNa\VUgXV<7Ti6i9:N?>efnVS jNUdO?bITH2RAX7R1X;R1X3R^X22A03PROg3PBS?o8T\oH5lZ@2`nbPo\oZgR@c3POW7R@c3?`aS POS;0<4>9oMSmRP?`TZn22OVm@2`RGO3M_@2e]ISPLg;0:0>RYJj0h<6PdH^18?R1X?RjNUbnj0_ X8?VW8:P321RNJ0_jWbijmR^87QRkf[i>?l?dLm4c^Y84h@oQH28MGBIonZHo`RC4g=Y`B8?ScnT PgFYPa>RZbP_L_jb:83joJP_P3nT27Gi5:1:LBPVL:JJ5:`XKfhY4fdRZ8?jK06o02P25BQRX6_b iNIVinQVJQ8V5D0^:10_`1FVJNDVP?cR;O]R5aER@1OS4<cj;LIJ8AOS8AOT;A94aVZR4_aR;BeS jNTVjJP_nRdSJ7XY;A94enVV[02`~74@8826<C4f8Xn?Yj4i8JX2o]jZ]djY_`@O1UgamcWPKX :2l@22H84cIc`I0V2?oNLjV`A`l8foZFLjWK8Pl8g_[Q4h;oX2nM2:;X7V:Xa?XCoR:X0OkYIfTS ]@X^IR8ERF`E5CJ1oLTE7[86f>noL:TUIkTQ_@[l_iZnIJUToIWYX2okj[XC6R:Pb_[Xnf\CoR8X b?[j:2l8Hd8X:o]Z:2oin;:Pj_[g7[:XQ?XCHRV40:1k6bKf72HMhF\0~24olRZ?_kQ02PKcTR >Nm[7m<47S06cCKf3@<1`^LfDDGo0:066l0_P:2bHOl2H?kboAdTTAbS71adWDB^f=QRAQGV5DH^ 5MPR7:1n7A]T083[~3XMLffMMSf=MTemLff24^edP^:=Wdf2lVla:4@8W\2h4lH20>2R0nX<;j 4[A:XLi:fJ0_bRnR4:Wjf:YZ;aP_0BoV;b0_dbnTcTJ^;Z5TX@2`~3O1C_O7coO7coO7coT@R` 10@010@010@002P?lOnRH5obHEhRjP2`;dH^A0\VG@XVJQ8Vlan`l>7o0?l98R0^8nP_Z2:T8TH^ 5aMRJQDV5B0^;Q8VRAG35b1n5ADV81OR5a9TTh6\P6[R4PYSR@_7PA;4XH2[OPJF^_j2Z:[j4b4^ _kYX_jP_G1>bKJP_G;6j00P34a=R^P2`02h2IQDVRAG3b<oj::P_ce^R5ADg84CR4V1R5ADE06KR b=cj4]5:PL3;PGk9:P1PIS0V;j1^8R4^4V]R<30V;oe9lhU\<2Pon4BR5@9_5AEdFQDWPA;4imn[ 7<`SH7?b9_m;oP6N8V1R>3P6JcTV=RV6FEPW<OeR:ALV5c<f:B0^4U1^11;TV2fV:O`R=2UREoHV mSAc>OLV>DX^EQ86<B4^<aDVRCW35VIR>CTV5\P_c3VSH342<HU\>F0`PD3>maP_gV2^5I0_gXV\ 5CTW<C54PA;2mRab;JP?eV^RmoLV4R0^8RP_nc:f>JI:P2WT:D0^9i0_m3:RA?[PECPVnOJC0B;V =XV<X3WWPOS;nHjJ~3m^la`?EcHUXRKP1TIb6@G<:hG<bh]a=R]20_\jP_0K;VRAG35KMRT`9_ 5LPoXBRRZ:7j]KN2W@9_5E\b5H5l5;DX\ZP_G:2n5ADV]j`V0QCb8AGWPEc;0>l?E03`5`9_5F0` 8AGR5QMR5QEePKG;02h2IQDVRBk3PL3?`\9;02T6EbTR5QIS8BoRj=Sj:Li:f\b;02T2APC^\=X[ 0=X6GWXYf^9:h02`ib4n4d0^inLdinLd48SoZ>OdicFdoojI52QVoH2`P704gh0UX2KV28Sj@414 MH:F8R4^<fIR<99ZE3nD27GiKa\V:4=Rm31TRC33PDS?jGVY6iQ:JVhY<4X^ERl6oj^FRC33=P9_ =\PoA6<R6cISH1\28A_VX3KR=SISlj1^=SHVZl0V0SKclj0_ao>VIUhR<CISX<ojLBPV^cJSPOk9 <GXYX6kY6mi:<hi:=JP_L_fkm;]:@o@VE3nD27Gi@fhY^h2^IS0R<3=TUmZZo?^InP2`mP3`9\P_ mOE;1<`E^P1E;<`C0?l28KSVk;HV]iDVP02`o[@6L8VK7U?0oJ0_U7N[U@9?\JjZ]4H^1_cP]KDg ]4X^2PS^o;H3][MbUKIT^;=:^N0XP8V;][DV][A2]XUk~4U@X0P0P0n`;>eV;5RFagPCb::\T1 0PlmnZV9Ml>1R\`Z0i18053GnJO>kBJ0^X\1RHagn32XmOYgMS1gagX0j`KgnI?inG=@cn:@lo[5 09200>0mmjW]kBKPO[THOVTBP6K`=OFcB0D0oOooP032X2n:k:SoNBWnNRW\c8S2Z2omNRUjNYWl nb6PSo[knS8XV_[in2V::\T8m`>93<N1m\>93<Lo32Ne32MgPCc2\DZ:D\T6~3RPaB19180534 `jC1PJj1R\aB191Z0620N>\0~2OQjFORBF~7L0W<l[:Pj?Xo:2mZ4RK\4XC_Nj8BmF9j4YCKJZ8B k6PBkdY002hoc6^P4^HPhNX0D@9jD99jk9\0n0Wg[D3?kDCP04R0^0AoVP2`WP<0X0je]fCo]RJ0 P;T0U`BeUdZgZ2nERJbfPCbXR?^jc8R9UjZYYJZ;UbJ7oS1:2^kK2Rh:QnBZQj?nf`J7Qd?m:0n9 DZ;l:2n8nk:84dJ80;2?0?00~3R@bfnS0PM_9J2^jh]VBfgCJf]dJ1^\\20@40^090b^8@^?HH ]oAj2^h:bn;KPFbi0920093^gJ;:gBKKMb14fn9g80jeRf:Gg6:7c6^g`4oOOZTT060V8LceP:kc 3k;`V_1VOo00SomAD1;mm1;mQP4g8S:<i208SA:]W0<8B2=EZ03PC@?doB26eQ2;B2>]W0<A11:: R@;Bo@26eQ28]A98i303m3:d3EHBf00N033o7bKC78@L_D[C78@9HST9oS1R69:Pd?[m2BH12N4O 7bH9HST9HSW^o21?7RKkdY_kG9^e01214N892F?^kV;jZ2o@dj_YZ2oTjJCTnJ]@ABTA22Kh0;3B AP4C3CD0m`W_<V8Xm__^9kT;cC^nWVIPhO4_X02fH0D0Q`=61^h6M^20jk@0W0JMSVZMW4JLob90 S?[noBVLWF;mNYVLNRT`R4\0~34@88o6W\a::XZ_[4XDYSnbLC6R8XXOY_Z2nk2:;j`2ng4j95 4i9>X2nQDJ95nI\NDl3hX2nNN;\0~2mhnOb07ni_MYP<SoF^HRiT1^iPP^P5S_D_HRmF=bi^0_ aOBblo=clVIblO1bklEk~37QmV8>M[AW:;8<]UPLXEQmaEP=J4PCMloEkf0fWfR6YB:]H?nX0n ?Z]0P80dE_nBoRUbh:7jEWZB32P?WofY3OdY3_dY3b4^5jP_XH>R:0nB8AORo5^B:82K6_]22_YR 2oUR8giR2P]g8j]:3:A[WFTY:;;kJ80V4f4^P>Lf6=?j6QMRJh03JX2Cn:@VGf<iGjAc755Y5jA4 0>L4b@RSGh1bmj@V0;8;MG:I720^9^9ZB2VBh?Kg9]i:boHWO`2`ik8VOV4^J>Lf6;;kJ6XiJ?Db aA>T720`Dn1?0N53b8lX<6^KPH[<:PF@4hTlojPoP7NSX9OjPH[<DPZ@400e0=d:THT\Mh5loXVL 384ljVYR4XU\jH4loNUdoA94WobYnoZ@nOUcX?SgmbNB8BOVROo3PH[<:P6@0@9o^?HWmOBB:_=S PF82l`Qc4]EX6JP_l_4R20QS8`QS90QS4PQS2MEXl02`28Tl2H5l4]I:eGji301PAPC^4=ok2Y3_ 8>oWgh6o0>h28YeZ7D<5bj>jL>H?`;[e^DmI6G8En<d@aDQU08nO0?l9PHW\oQPFoH4lo8VL`?kS nbP?Uh6\JJP?ULZRn\ibF81nROk3POW0::CjDZP?baVT6?Q7P8W\oX4l`?Ok@<SRm\UbmHUlm0Pn 4<7jA?CWPH[<l`R@cUPWb_XWGo8WP5Bnm85lX?7Wl>nK\K6QUV>RkZAjR@2`kH6L9`H^1=kPjMPV PN_30=SVf^\W>>\30>3bk:0_jMRRjbMddH6\cf2i0<8`a>]XfT:e\l0OYE;fYidHT<0@U0Ragj>? Y:W`e@3P~4>0RX~3I`S60300O`Sl~3PPSl~3Q`PZ~3Q`Sl~3RPPZ~3RPSh0100R`PZ~3R`Sh0100 Z`PZ~3<PW>0100>PWl~3G0U80300N`Un~3R@Wl~3R@U<0200R@U80300S@U40400\@VP0200\@TN 0300d@Un~3d@Wl~3e`WB~3h0UD~3h0TN0300h@Wl~3n@TN0300<`XZ~3<`[h0100F`ZP0200QP[d 0200R@[d0200X`[B~3X`[l~3[0XN0300\0Yn~3\`[l~3m@[h0100m@[d0200n0[l~3nPYn~3o@YD ~3o@[l~30@_l~310_B~31P]D~31`_l~320_l~320_h010020_d02009@]80300:@^40200:@^P 0200:`\Z~3;0\Z~3;0_h0100;P\Z~3<0_:0200<P\Z~3<P_h0100=@^P0200>0\Z~3>0_h0100 B@^X~3B`_l~3CP_h0100E0\N0300F0]n~3F`_l~3F`_>0100o`ooooo6gc>H5ol0~5;3L38[lQ ?2H10;l1H7T2c[lAO`@20;l1SBl2Q;lQSS40d[l1[HL08[lQ_Bl26[m1dj020;l1h:P0094;h5X3 6[m12`PCm;lQNP0@0;l1P00@0;l1R7h@0;l1nJ0B0;l1NDTSn;lAQZdPo00<XB\Q0;l1XHDSd[l1 nHPR9[lAnEXSC;lQ:J@bo00<C@@d0:X2oooooooo17gPoB<Va]lcV1Oo~6[HL08klQ[JD3Pkl1 _8P29[lAg=D0B0<ah;D2CklQj[D2Dj\[1Mh@Z;l11OdACKlQ1OdCo@0\1@@D;28<NP0@0;l1P:d@ o;l1P50Bf;l1P6HB0klaP4TD0klaFkDRCklQNDTSn;lAXB\Q0;l1XHDSd[l100LbO[l1C@@d0:X2 o8daB;laA0100;l1APM2RKl1oooooooo08L2AHQYRDDVP8ZkWXe[0909RP2`28ekROm2:dIXo_dW RAW2Z:7jo?\Wo?XWooTWYobRn?abmoabnH5lcOJ;01;VX2;RAS3VRC33mJP_aa:RAR3^5OAR<0XV m0\V2P\g5Ki:4P4^8X5\o?>b<18T[o:Yl@2`ERORV<gk8TH^l>lW;:YRk\ek084>R^g90^D;0>`; gn\Wf]:`AP0@eP1002l5AX1@96<b1744^_a?0mh:0clO<d?oMf?o_hhD703321<fol6@9XWj4ohY P?nY\4L?28KjoAjBZ83jROc3PL3?WO^SVaiR1P;_n_Vi8OP9moZKX2;R8A;V5OIR5ADVRAG3mJP_ ]AFS@?Cb5A9dah6\nP2`]lHf]hU<a_<`aZ1^l\Hba\ISPKO;0?425ADV5AEdZP2P~d0`0O3`00 gXX4`0:08B:o\a6ThO40ib<0~~~~~S |
Added src/kermit-12/k12crf.enc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | (REMARK Image File Created by PDP-8: 30-Aug-1990) (REMARK File Date: 23-Jan-1984) (FILE CREF.SV) (REMARK File decodes to CREF.SV Version B0. Taken from) (REMARK DECUS DM-101 OS/278 for DECmate II.) (REMARK Should work on any OS/8 family system.) (REMARK A recent assembler is required for assembly of) (REMARK the KERMIT-12 source programs; Version B0 is the) (REMARK latest version. This is the companion CREF for PAL8.) <VVM8620484007040090371P76BT3K8G2109OG88H4KC01E1M25AHG0PC14OLA2P3T8K16> <L8C0FDG04Q53GGGM4G0E4P05S1Q603GS4DI0O1NICG0UC306DGR0ENI00P61C0RU1G0C4> <P05O1N600GM4482K8LA71118AJ58BH000060FV00H0M001SG001EG0400GG0367SHJ8FG> <0F0GI01OFG002B200G240100802D00000X004S1DM9L80G0000X0003IVVVU00003S95P> <IGVH3GK84NX0008UTNVK0F00000X00030I000003G3VVX0003105P20100000X0008IVS> <0G0202VO8MDKNSO0FOJU4O67PPVRFVUSD003NQTUB8O10UKNVNVTFEH8M12G8Q200FTBC> <GI1VU20KHR0S00K006VG3K50VK3VU0VI03VU5G18001I445G027VO021G3RJ7O7VQHQGC> <0O07PTO0L601VS0V1B8GI4VV88P22O8JU3RVUVUX0008T0682E4M60JRC6P9EPT362BP8> <6T95DS5UEMR7QBUIJKPFIFSL4981P32G7G650N0CA08N8K0SH001I4JVN41UA1FPI4NVN> <41NA800FTV52TJFUM8IC6CG5VPP29GOOVJ1J41NU001R0M4SVN1TNIHF1E9BG8C9TVA00> <CH4RN0THF8RB3QR41NJ801QGBHAKM00R86A1U8RG450V0CA1NT4N95UVQ1QG6GEKS10J0> <O8G2F7T0NQKNPBLUR1H04U7UV5L073VV9KACUJ78T8OJV148B209EMBKJVSEL7VJ11GJI> <SOC3SHAHT1VL0SNBA1I2CLBUA5N4BVF52K05VFQHA047VO8ITA19AG2E5H8IS5AC8A8LG> <JFIRH169MVL2K3MR7G200251GL4A7Q09LMSLN6DPREG9L628GLSG12HS8AO1GL4QBEBQ0> <2VHHD5UR1E8AU80ONU45COKMQORH165V22GBK5L0ILHH6KO92VHHD6B9EIRKIT7T85UHI> <Q9K9F91D84LDERKRLG00X000544B0GC462CGJUA5FH5T22CGQV85ERFL9EIVAVS0425IV> <RS3JD7HEHSK221G8623175PGO7P6U25DT5PGM3Q7U25DNAB9EC6RU8NGHBF8S4GJ5VVQ1> <AEI11N847NQHB222CNUVA702RKPCS13LD92S9J62N4965B1BI0PVMOL47N0DVCANUBGM9> <CME0GQNMFSLFTBT5IPCIFT5QFQ1FTQT8GJ46NQ1B56T2VR44PFTSKAP0NQUA20G9HV52P> <B4QNIHFSIV3T0LQLVE8FFL2K444SM5A2000JRC6PFCOE63MV10000089IVVT8NUT88002> <DSHPCEDUU0FKQC0UCC7SQOR01K837GJEFT8V8K00D811NV0BG0L00O9FVTG2VONT87D92> <CE73H0SL7F48RC2R3I6C591BP322KMOE77A0OEK3FG0N0000003K5MNDM9TERC4QSUNDL> <PDHOGIQVI8UA2DIBC65U7J84N41I4J1F410O720C5E43T0LGI15AQ4K6ME5MFQ1B525VO> <GLABDHAL25VOOS0B2U8NV42MJ8BTCTP365P51N880000003JSU57NPTUFFJRSUV7NPE8G> <1004X0105007IHBOIVVR04NP629FBT8004BV4C9261CITC2H6KO9BUC0VVS7U2009VSH2> <S8127VKAL11248N4COBI2SJAC591BOG25PGIP29HASBU40GLC5F208BM2T0IL4U83Q02D> <9GI62M8IS5SG50IL8DO15V60Q5Q5VNQHAL22FH1DFSBKAVVL2QS44P6RUKBBILH001GGO> <9I2ETQ000008N2CPGLP29HBV4APSH8VA5CU9DJ2LOLS8148O92C08LA5F009JFP2MS84L> <D3I0RO341IVJ2K002CPHGCBVA08HE45GI4QP30OO45UFTDSU8ICOF52NO4H31BS172L0L> <4MJHBI0K2AN7NNP1OF6FC0JJ89LVV7VE05H24O03GOS2DDHPGDJ2I9CNB1HH5V92IOBJ2> <THJ4AF20O9EA3G484L9GOMI54NSCD12I9BMUPVM6D13IRRI77IA0LJ148OU44HJC5E8IC> <SM2OJ64EB3I8BFP2MC6E8608OM67496E861I0U80NNU65DTPG22NSGLNM8I8AN751H8CE> <82897UOHC0BFQHBB2DCNNDTP15OG24BP8NUR34GSQKRK08A92JP024VSGLT135P20V8IL> <CE4VIFRE05H2GDM8JQG77741NU4VJA7000007TGUUV03UKJ24MJ6SG09CS11MN4C5DE8P> <HLN44PB9SG2MFT8S0BB5I4J2LGL5DR97S132NU8L892HUKAK65L5DR9RS132KIRE5E828> <A8MKLIVA5LPQG22LGL5DRAPS122JH1E5E83DE003VFUL000OBV08OL0O7228AM2OGNE5I> <HBI0RMK004BH6COASH4PEP0FS0J1BO800CA95E8KM2OOMS892VVKAR119LJKDLF6000H9> <SHN08AOBR800DMH5T5T4RAN2NO000FJU44GJSG1UEJJJST77U47OHUK4SUV78DCVV7V62> <HH8NV880204E0MVB07A0OJF12K88G2415QMG8H2S8B369J662KIIL23VS49EKJFC6R2G9> <1MUH1GP29J1I0V92N9IUA1NAC2DABE4C74K1B65UFVDAU8ICO66RO26DNSG922CDGR6DG> <608DU45GRT813COR36PNJT813COR2LDM0U0HJCBPVK2M7DSP6C9F664PMV85CU9OM52LR> <6DM837V266BQT84MSGDQRP1JL3H3BUKBEAVT9T5BM91MUIAK8FVGH5QI8EBELEV809J26> <1HG8CT9FBD9VIFRNUG01VR000H6VI2FBFQH0HECBEIG04M3PG005VV22QS2THLM5DR9BE> <00007UDD4N1E4S3O2J5VFQ1AABET4LU0LB3AN2MJI6S1GFOEQNMKLKSIN0LO40VGTMFDH> <BEQAKMP5OLCPBJ3G8G2S95DJBAIR2MHTMN280000002KL00480002VDME5LJCBI4JEV41> <P2KIK00V0AHTJUM8IDRSG74AIAG06L4002MNFU9CSRMOG2TQG0E8IDRGV3T8LT9NE1R7E> <UM7003EN7RJV5VP7UF50B7VI2NJJH801Q0002HTJTPEQRMRS2BUC64NSO96G3VGAD8B6L> <4F03VT1VO80B1FK2KAHR1FV5SIVQBQHR4COB1FL0NTXIUG35V0VNUGAHSVR5UNIHAD2V6> <FOP2KIK043UV49E3682FRCH5OC4FRGOAQN1GRNP0AC5AOSHAAI01G0000CHAAI012KG00> <AOH63LGF83I0SHAAI0136K00EG2RO000015V63QBUC90000000000004N1F62UBT0LQ13> <VSK2D9GIHR215BNIFDGI5TCNKG9ARCJAC4KEOG9ATSI0S033VF6EK1GIS85E2002A6BQ4> <K4NLFM002FO9TOAQJ7KTL70G0080IS0FS4Q1C1PS00EK1LL9DPFUQRBG2C00029EIQQIS> <LNVA59BI4JMR41VA5OH2T8PIK9L5TAJAIIHDKN71OFTP5E18MRS2N0KI3QL8S71VJDMI3> <JGS7TUA58I992VJP8N21FMI462ES8007OU00000000068IER0VBP04TN5LO56N15M7DJD> <QIR6MV41NEG0440G00LOSG1CLS86N3OO9DV7LO5E18MBDMU836SG02C0005ESBEIP9MT5> <MO7FP22RC3NS83BAA5MISMSD1TSOIRVO2MVIVJ2800C4R11LTF81FPI1VVG16NMC1VV03> <SF2K9507UIUG7T31HJE8H2HG742218Q2MJJGG86I05A2K0S0QD5T0FQ630QOKB6I0AQEE> <124G412H8I390VKC61LGOGAQJ907460PF8MQ61K0I1M1HS002VTGVHKQ1OGEANM6J871G> <J5H3147UIOH1HUGAQ0NTC2F0244I3TGV62CM4C4PC8NE1V14UOF9VEUIJUTLO6QG03K14> <4B0IC4MTONE5UNQHB8BQCN9VA5E8JKQSIVP4K4KA88M12VO000D45332D8D004VERNI6B> <P8NTLUT4JJ1EUDDFJ9TTG1S41F180BCLG000S7SHN0DO30EQS09QO00QE6JMKE97B9OAE> <2VVQ0L31FT7UMJGKTJVCNKAE9F91GN200000000GHC24VPBM2OJT8LAIC9AGICDVR44P1> <LSKAK4JFVA5BM842VBU0LDP1752I2CIEV85A298P8MVPO7G56BSFK2SUMU000009UVSFV> <I702RJ9UVS0VI15KBJ6SRI05PN0HQ0FB0II5TJVA9HISRV0NH9F8VPJUDVI4PJV2BO7TU> <U500000OF63TH0NPS4DDP641EB30ASKM3LRI409LJO3GRVVLIUU0R6IM42D81AVLHVLQ0> <47O5B702815B2VTVU4AFU1AGPAOJQ037IHAFPVKGDJV90T7UI1VH145VQHAGIGE9843V2> <28BPVGIRIA5O0GD2VDGA5UJ0MBSM4CJUE2JGMGHQLDGCN919R5KV52TI4Q38089UC4S0D> <PVHHB9M38GN0QPO15L3G0NOD91LV5HNBST4C74L2GBKKG009PTCIC47BSK05TRA800BMA> <BLISH1POG64QN2II12JVG7UP16LNHCMVRBFS005PRB49VEC4R8DPVHHEP3D2BA6Q1FBB2> <K2COS08257VG404V15I48V4OBDF41P2KIK02J2F497VVQHA03EVT0L5U83I59A80A642G> <000ARKKHP2BNFI0PVR4963682RL2D9GIP29UJI0NVL799VA15AFPVIFR1UJVIFSVK1VOJ> <TP2FOGM4V497VU83I595801E0FG4AS7UQFL5T32KFPGG4J2FSPGGO98QKGPVA1F4BOM10> <O8C8PGGOI311GI6230J3ARU0006268IS4SG50ILLLTB5V61G00SHN09S8BRVGAV4720VN> <RRVS1001ESOHAJK0TAGTSNAHGE3V6VG2RKMSP9S8PASGVG36MOLA8I07OU009VVK1P28V> <SOC3VN41JV68JR03VO7RUA59FI0GD7T8L59CKVT2PPQOT068IFVCG47PUA5A819FL2MB8> <6A1GVSEG3497VM83V0BUVI05I3VCB4NUN497T70HS8AO7I4FT683I59UC085JJLGB57V8> <IVFSLO1PA7UJ41T83V37OBTULH3CD9C9HNTQL4N28017MSG4H7S1N083F2T5MOP09UNO0> <6R0MQFQO3GFLV00N05R7Q1BKIR1VB89TD3I0RPUB0600C4R28TEUQAGGR7V0FKLII39S9> <Q680O2SK224DVUHVKG59TL8000000000GE0AG00002377HG00008FS7S00001210VG000> <048E0L00000H1OFO000024A0AG00008H8FO0000125G58000048M7S00000HAO2K00002> <9I3JG00009787S000015E39000004NM1V00000J28FO00002C94J000009H4Q80000166> <K8G00004R2AG00000JC9HS00002EH0VG00009Q47S000017BGQ800004U01A00000JO1H> <S00002F11V000009V4OU000018PG5800005367S00000KMPA000002K65T00000AH4NK0> <0001AHGQ800005A63U00000LB1HS00002LG0VG0000AMC7S00001BQHV000005FABQ000> <00LU0FO00002NQ0VG0000AVK2K00001BUGVG00005G23U00000M10D400002O60L00000> <B0S7S00001C40VG00005GG7S00000M21F800002P56I00000B54K400001CKIK000005I> <M0L00000MB02K00002PC3U00000B5O1A00001CO2P800005J40L00000MCGVG00002PL5> <800000B701A00001CS1V000005KI2K00000MIOFO00002QE3U00000BAGOU00001DC0FO> <00005LM3U00000MMOSS00003VVVVVVUF33RVSOU5O0000000000B1JE8H1NS1S29G006V> <GC0JP3JGRU1VI0G003FO8Q8NIGGDV13G32391NS5D11P246VGNKHF86GRU39IK0003FOE> <02K002SH1O1LKGD1NS8B621F86VHF800000RU60000003FOOG1V000DV3U9A0001NSJP6> <I8VG6VIGO5D1V600AGH5C003FPA2E2GQ8DV5U98G4J1NSNP6MH4O6VJ54L41V600D6K0G> <005ANVVVVVVVVVS107QBUM4CU67NVPHSBG0000000002MGGSH33FOAQEIGGCDV1F18G4J> <1NS6S1L9KG41GS0LL4JORU3L2MKIJNAOGA3F0L0DV218VQ96HNS857V9FRG010L040B62> <45T000003FOO02MGVGDV301503C1NSC04PHG66VHG12960ORU9DIMKIF3FP7ID4HV0DV5> <88IM001NSL1718D46VJ00G70VGRUD6K0G005AHVO66J90DV8H000001NT2641O8I6VVVV> <VVVVVVU002GTI5J218IP2RG2SAD7LOQ009I2SA003GHE6KH4NVCAS4CBV7VN4946FQHAG> <IVHVR5V3VKBVNV6L75V3VGBU7USNSFUE8336RURG0C4NA08HE8PHGP29J0BQVL2M744N4> <DOG62KNK4C30KBQ61COAE2Q1BAV22BG1C8M83FU2UCHG84LAV7PBU400SLH2FUCBPKH2S> <HHF0VNM5GLAFRLSQ00EG74AJR805FIG02VC5NRUNFD0Q8A6002DC000019FAHG80CI2CC> <048SABLVU00EMU20VJVSPV8FRNUOORUI7C3GO0623177VGO7P6L29177VAG2FV1C7KFS4> <AGQFT47NQHA0CH4VSP0FS1AEJVDKR47N0DS1BVAFP08CVH7RRVBL048N22O962KNM45B1> <BI4J2KNLVA5BACAV80NKE5A15B3SG6VQ001RER34MV497HGF6R3EK0VI5HJCCF3CG6TN0> <01F28AM2LOL85DAK0000000X001100O1U07O02MU011C0A0244DV3CVQ87GI00V7X0040> <ZAC5M3VVVVVVV> (END CREF.SV) (REMARK End of File) |
Added src/kermit-12/k12deb.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 | / OS/8 BOO DECODING PROGRAM / LAST EDIT: 22-OCT-1991 12:00:00 CJL / MAY BE ASSEMBLED WITH '/F' SWITCH SET. / PROGRAM TO DECODE OS/8 FILES FROM "PRINTABLE" ASCII (".BOO") FORMAT TO / BINARY-IMAGE FORMAT. INTERMEDIATE "ASCII" CONVERSION SHOULD BE HARMLESS AS / LONG AS ALL PRINTING DATA CHARACTERS ARE NOT MODIFIED. / DISTRIBUTED BY CUCCA AS "K12DEB.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. / WRITTEN BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / USAGE: / THIS PROGRAM OPERATES ON "PRINTABLE" ASCII FILES WHICH HAVE BEEN CREATED BY / ENCODING THE CONTENTS OF ARBITRARY (BINARY) FILES. THE ENCODING FORMAT ALLOWS / FOR CERTAIN "WHITE SPACE" MODIFICATIONS SUCH AS LINE WIDTH REFORMATTING AS / LONG AS ALL PRINTING CHARACTERS ARE UNMODIFIED. EXTRANEOUS <CR>/<LF> PAIRS / AND ALL OTHER CONTROL CHARACTERS (<FF>, <VT>, ETC.) ARE IGNORED. / WHEN CREATING THE DESCENDANT DECODED FILE, THE USER MAY SPECIFY EITHER THE / IMBEDDED FILENAME OR AN ALTERNATE FILENAME ON EITHER THE DEFAULT (DSK:) DEVICE / OR A SPECIFIED DEVICE: / .RUN DEV DEBOO INVOKE PROGRAM. / *INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DSK: (DEFAULT). / *DEV:OUTPUT.EX<INPUT INPUT IS DECODED INTO OUTPUT.EX ON DEVICE DEV:. / *DEV:<INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DEVICE DEV:. / *OUTPUT.EX<INPUT$ INPUT IS DECODED INTO OUTPUT.EX ON DSK: (DEFAULT). / THE <ESC> CHARACTER WAS USED TO TERMINATE THE LINE / (THIS IS SIGNIFIED BY $). THIS CAUSES PROGRAM EXIT. / . PROGRAM EXITS NORMALLY. / INPUT FILE ASSUMES .BO EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN <ESC> / CHARACTER. / .BOO FORMAT IMPLEMENTATION DESCRIPTION. / THIS PROGRAM SUPPORTS STANDARD .BOO FORMAT ENCODED FILES AND OPTIONALLY THE / USE OF LENGTH CORRECTION BYTES AT THE FILE'S END TO ENSURE PROPER LENGTH. IF / NO LENGTH CORRECTION FIELDS ARE FOUND, IT IS ASSUMED THEY AREN'T NEEDED; IT / IS THE RESPONIBILITY OF THE ENCODER TO INSERT THESE FIELDS IF NECESSARY. OS/8 / FILES PROPERLY ENCODED BY THE COMPANION ENBOO-ING PROGRAM (ENBOO AKA K12ENB) / WILL CONTAIN SUCH BYTES AS NECESSARY, AND WILL BE PROPERLY DECODED INTO THEIR / ORIGINAL FORM WITHOUT LOSS. ALL OTHER FILES WILL BE <NUL>-PADDED AS NECESSARY / TO ROUND-UP THE FILE SIZE TO A NUMBER OF COMPLETE OS/8 RECORDS; THEIR / ORIGINAL LENGTH WILL BE LOST. / **** WARNING **** USE OF ENBOO-ING PROGRAMS NOT COMPATIBLE WITH THE OPTIONAL / LENGTH CORRECTION SCHEME CAN PRODUCE FILES DRASTICALLY DIFFERENT FROM THE / ORIGINAL; AN ENTIRE OS/8 RECORD CONTAINING <NUL> CHARACTERS COULD BE APPENDED / TO THE END OF THE FILES. BEYOND THE WASTE OF DISK SPACE, THESE DEFECTIVE / FILES COULD ACTUALLY BE DANGEROUS TO USE UNDER OS/8. / ORDINARILY THESE FILES SHOULDN'T EXIST, BUT COULD BE CREATED BY METHODS SUCH / AS DECODING ON OTHER SYSTEMS FOLLOWED BY USE OF ENCODERS INCOMPATIBLE WITH THE / LENGTH CORRECTION SCHEME. THIS TENDS TO MAKE THE FILE SIZE WRONG BY ONE OR / TWO BYTES, WHICH WHEN DECODED HERE WILL CAUSE THE CREATION OF AN ENTIRE / ERRONEOUS RECORD. IT IS RECOMMENDED THAT FILES STORED ON OTHER SYSTEMS FOR / EVENTUALLY DELIVERY TO OS/8 SYSTEMS BE MAINTAINED IN .BOO FORMAT TO PREVENT / THIS FORM OF FILE CORRUPTION. / ERROR MESSAGES. / ANY MESSAGE PRINTED IS A FATAL ERROR MESSAGE. ALL MESSAGES ARE THE STANDARD / OS/8 "USER" ERROR MESSAGES OF THE FORM: USER ERROR X AT AAAAA WHERE X IS THE / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. / THE FOLLOWING USER ERRORS ARE DEFINED: / ERROR NUMBER PROBABLE CAUSE / 0 TOO MANY OUTPUT FILES. / 1 NO INPUT FILE OR TOO MANY INPUT FILES. / 2 IMBEDDED OUTPUT FILENAME FORMAT ERROR. / 3 I/O ERROR WHILE LOCATING IMBEDDED OUTPUT FILENAME. / 4 ERROR WHILE FETCHING FILE HANDLER. / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE DECODING FILE DATA OR BAD DATA. / 9 OUTPUT ERROR WHILE DECODING FILE DATA. / ASSEMBLY INSTRUCTIONS. / IT IS ASSUMED THE SOURCE FILE K12DEB.PAL HAS BEEN MOVED AND RENAMED TO / DSK:DEBOO.PA. / .PAL DEBOO<DEBOO/E/F ASSEMBLE SOURCE PROGRAM / .LOAD DEBOO LOAD THE BINARY FILE / .SAVE DEV DEBOO=0 SAVE THE CORE-IMAGE FILE / DEFINITIONS. CLOSE= 4 /CLOSE OUTPUT FILE DECODE= 5 /CALL COMMAND DECODER ENTER= 3 /ENTER TENTATIVE FILE FETCH= 1 /FETCH HANDLER IHNDBUF=7200 /INPUT HANDLER BUFFER INBUFFE=6200 /INPUT BUFFER INFILE= 7617 /INPUT FILE INFORMATION HERE INQUIRE=12 /INQUIRE ABOUT HANDLER NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 OHNDBUF=6600 /OUTPUT HANDLER BUFFER OUTBUFF=5600 /OUTPUT BUFFER OUTFILE=7600 /OUTPUT FILE INFORMATION HERE PRGFLD= 00 /PROGRAM FIELD RESET= 13 /RESET SYSTEM TABLES SBOOT= 7600 /MONITOR EXIT TBLFLD= 10 /COMMAND DECODER TABLE FIELD TERMWRD=7642 /TERMINATOR WORD USERROR=7 /USER SIGNALLED ERROR USR= 7700 /USR ENTRY POINT USRFLD= 10 /USR FIELD WRITE= 4000 /I/O WRITE BIT *0 /START AT THE BEGINNING *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, .-. /AUTO-INDEX NUMBER 2 *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /INPUT BUFFER POINTER BYTES, ZBLOCK 3 /DATA BYTES CHRCNT, .-. /CHARACTER COUNTER CMPCNT, .-. /COMPRESSION COUNTER DANGCNT,.-. /DANGER COUNT DATCNT, .-. /DATA COUNTER IDNUMBE,.-. /INPUT DEVICE NUMBER INPUT, .-. /INPUT HANDLER POINTER INRECOR,.-. /INPUT RECORD FNAME, ZBLOCK 4 /OUTPUT FILENAME GETBERR,.-. /ERROR ROUTINE POINTER FOR GETBYTE ROUTINE LATEST, .-. /LATEST OUTPUT BYTE ODNUMBE,.-. /OUTPUT DEVICE NUMBER ONAME, ZBLOCK 10 /OUTPUT NAME FIELD OUTPUT, .-. /OUTPUT HANDLER POINTER OUTRECO,.-. /OUTPUT RECORD PUTEMP, .-. /INPUT TEMPORARY PUTPTR, .-. /OUTPUT POINTER TEMPTR, .-. /TERMPORARY OUTPUT POINTER THIRD, .-. /THIRD BYTE TEMPORARY PAGE /START AT THE USUAL PLACE BEGIN, NOP /HERE IN CASE WE'RE CHAINED TO CLA /CLEAN UP START, CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE DECODE /WANT COMMAND DECODER "B^100+"O-300 /.BO IS DEFAULT EXTENSION CDF TBLFLD /GOTO TABLE FIELD TAD I (TERMWRD) /GET TERMINATOR WORD SPA CLA /SKIP IF <CR> TERMINATED THE LINE DCA EXITZAP /ELSE CAUSE EXIT LATER TAD I (OUTFILE) /GET FIRST OUTPUT FILE DEVICE WORD SNA /SKIP IF FIRST OUTPUT FILE PRESENT JMP TSTMORE /JUMP IF NOT THERE AND [17] /JUST DEVICE BITS ODNULL, DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD SNA /SKIP IF THERE TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF BOTH NOT PRESENT JMP OUTERR /ELSE COMPLAIN TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SNA /SKIP IF PRESENT JMP INERR /JUMP IF NOT AND [17] /JUST DEVICE BITS DCA IDNUMBER /SAVE INPUT DEVICE NUMBER TAD I (INFILE+2) /GET SECOND INPUT FILE DEVICE WORD SZA CLA /SKIP IF ONLY ONE INPUT FILE JMP INERR /ELSE COMPLAIN TAD I (INFILE+1) /GET FIRST INPUT FILE STARTING RECORD DCA INRECORD /SET IT UP CDF PRGFLD /BACK TO OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE RESET /RESET SYSTEM TABLES TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT DCA IHPTR /STORE IN-LINE TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD IHPTR /GET RETURNED ADDRESS DCA INPUT /STORE AS INPUT HANDLER ADDRESS JMS I (GEOFILE) /GET OUTPUT FILE INFORMATION TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT DCA OHPTR /STORE IN-LINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD OHPTR /GET RETURNED ADDRESS DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS TAD (FNAME) /POINT TO DCA ENTAR1 /STORED FILENAME DCA ENTAR2 /CLEAR SECOND ARGUMENT TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE ENTER /ENTER TENTATIVE FILENAME ENTAR1, .-. /WILL POINT TO FILENAME ENTAR2, .-. /WILL BE ZERO JMP ENTERR /ENTER ERROR TAD ENTAR1 /GET RETURNED FIRST RECORD DCA OUTRECORD /STORE IT TAD ENTAR2 /GET RETURNED EMPTY LENGTH IAC /ADD 2-1 FOR OS/278 CRAZINESS DCA DANGCNT /STORE AS DANGER COUNT JMS I (DECODIT) /GO DO THE ACTUAL DECODING JMP PROCERR /ERROR WHILE DECODING TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE CLOSE /CLOSE OUTPUT FILE FNAME /POINTER TO FILENAME OUTCNT, .-. /WILL BE ACTUAL COUNT JMP CLSERR /CLOSE ERROR EXITZAP,JMP START /**** <ESC> TERMINATION **** 0000 JMP I (SBOOT) /EXIT TO MONITOR / OUTPUT FILE ERROR WHILE PROCESSING. OERROR, TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE PROCESSING INPUT FILE. PROCERR,NL0002 /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. CLSERR, NL0001 /SET INCREMENT SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. SIZERR, CLA /CLEAN UP TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ENTER ERROR. ENTERR, NL0002 /SET INCREMENT SKP /DON'T USE NEXT / HANDLER FETCH ERROR. FERROR, NL0001 /SET INCREMENT / I/O ERROR WHILE PROCESSING IMBEDDED FILENAME. NIOERR, IAC /SET INCREMENT / FORMAT ERROR WHILE PROCESSING IMBEDDED FILENAME. CHARERR,IAC /SET INCREMENT / INPUT FILESPEC ERROR. INERR, IAC /SET INCREMENT / OUTPUT FILESPEC ERROR. OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER CDF PRGFLD /ENSURE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE USERROR /USER ERROR ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER / COMES HERE TO TEST FOR NULL LINE. TSTMORE,TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD SNA /SKIP IF PRESENT TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF NO OUTPUT FILES JMP OUTERR /ELSE COMPLAIN OF SECOND/THIRD (WITHOUT FIRST) OUTPUT TAD I (INFILE) /GET FIRST OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF NO INPUT FILES JMP ODNULL /JUMP IF INPUT WITHOUT OUTPUT CDF PRGFLD /BACK TO OUR FIELD JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST PAGE DECODIT,.-. /DECODING ROUTINE TAD (DECERR) /SETUP THE DCA GETBERROR /GETBYTE ERROR ROUTINE DCA DATCNT /CLEAR DATA COUNT NL7777 /SETUP FOR INITIALIZING JMS I (PUTBYTE) /INITIALIZE OUTPUT FILE LOOP, JMS GETCHR /GET A CHARACTER JMP ENDIT /WEREN'T ANY MORE TAD (-176) /COMPARE TO TILDE SZA CLA /SKIP IF IT MATCHES JMP DATPROCESS /JUMP IF NOT JMS GETCHR /GET A CHARACTER DECERR, JMP I DECODIT /WASN'T ANY TAD (-"0!200) /REMOVE PRINTING OFFSET SNA /SKIP IF SIGNIFICENT COMPRESSION JMP DATCORRECT /JUMP IF NOT CIA /INVERT FOR COUNTING DCA CMPCNT /SAVE COMPRESSION COUNT JMS DATOUT /OUTPUT DATA FIELD (IF ANY) AND CLEAR DATA COUNT COMPLP, JMS I (PUTBYTE) /OUTPUT A <NUL> BYTE ISZ CMPCNT /DONE YET? JMP COMPLP /NO, KEEP GOING JMP LOOP /YES, GO BACK FOR MORE FILE ITEMS / ZERO-LENGTH COMPRESSION (CORRECTION) FIELD FOUND. DATCORR,NL7777 /BACKUP TAD DATCNT /NOW HAVE CORRECTED DATA COUNT SPA /SKIP IF COUNT WASN'T ZERO JMP LOOP /IGNORE BECAUSE THERE IS NO DATA SNA /SKIP IF ENOUGH TO CORRECT JMP I DECODIT /TAKE ERROR RETURN IF NOT DCA DATCNT /STORE CORRECTED COUNT JMP LOOP /GO BACK FOR MORE FILE ITEMS / UN-COMPRESSED DATA FOUND. DATPROC,JMS DATOUT /OUTPUT PREVIOUS DATA FIELD (IF ANY), CLEAR DATA COUNT TAD PUTEMP /GET LATEST BACK TAD (-"0!200) /REMOVE DIGIT OFFSET CLL RTL /MOVE UP DCA BYTES /STORE IT JMS GETCHR /GET NEXT CHARACTER JMP I DECODIT /WASN'T ANY AND (17) /JUST LOW-ORDER BITS CLL RTL;RTL /MOVE UP DCA BYTES+1 /STORE IT TAD PUTEMP /GET IT AGAIN RTR;RTR /MOVE DOWN IAC /REMOVE DIGIT BIAS AND (3) /JUST GOOD BITS TAD BYTES /GET OLD BITS DCA BYTES /STORE COMPOSITE JMS GETCHR /GET NEXT CHARACTER JMP I DECODIT /WASN'T ANY TAD (-"0!200) /REMOVE DIGIT OFFSET RTR /MOVE DOWN AND (17) /ISOLATE GOOD BITS TAD BYTES+1 /GET OLD BITS DCA BYTES+1 /STORE COMPOSITE TAD PUTEMP /GET IT AGAIN AND (3) /ISOLATE GOOD BITS CLL RTL;RTL;RTL /MOVE UP DCA BYTES+2 /STORE IT JMS GETCHR /GET NEXT CHARACTER JMP I DECODIT /WASN'T ANY TAD (-"0!200) /REMOVE DIGIT OFFSET TAD BYTES+2 /GET OLD BITS DCA BYTES+2 /STORE COMPOSITE TAD (3) /SETUP THE DCA DATCNT /DATA COUNT JMP LOOP /GO GET NEXT FILE ITEM / COMES HERE AT END-OF-FILE. ENDIT, JMS DATOUT /OUTPUT ANY LEFTOVER DATA SKP /DON'T OUTPUT YET CLOSLUP,JMS I (PUTBYTE) /OUTPUT A <NUL> BYTE TAD PUTPTR /GET THE OUTPUT BUFFER POINTER TAD (-OUTBUFFER) /COMPARE TO RESET VALUE SZA CLA /SKIP IF IT MATCHES JMP CLOSLUP /ELSE KEEP GOING ISZ DECODIT /BUMP TO GOOD RETURN JMP I DECODIT /RETURN TO CALLER DATOUT, .-. /DATA OUTPUT ROUTINE TAD DATCNT /GET CURRENT DATA COUNT CMA /SETUP FOR COUNTING DCA DATCNT /STORE IT TAD (BYTES-1) /POINT TO DCA XR1 /DATA AREA JMP DATEST /CHECK BEFORE OUTPUTTING DATLUP, TAD I XR1 /GET A BYTE JMS I (PUTBYTE) /OUTPUT IT DATEST, ISZ DATCNT /DONE YET? JMP DATLUP /NO, KEEP GOING JMP I DATOUT /YES, RETURN TO CALLER GETCHR, .-. /GET A CHARACTER ROUTINE GETCAGN,CLA /GET A CHARACTER JMS I [GETBYTE] /GET A CHARACTER FROM FILE JMP I GETCHR /WASN'T ANY, TAKE IMMEDIATE RETURN TAD [-" !200] /COMPARE TO <SPACE> SPA SNA CLA /SKIP IF NOT CONTROL CHARACTER OR <SPACE> JMP GETCAGN /GO GET ANOTHER ONE TAD PUTEMP /GET GOOD CHARACTER ISZ GETCHR /BUMP RETURN ADDRESS JMP I GETCHR /RETURN TO CALLER PAGE PUTBYTE,.-. /OUTPUT A BYTE ROUTINE SPA /ARE WE INITIALIZING? JMP PUTINITIALIZE /YES AND (377) /JUST IN CASE DCA LATEST /SAVE LATEST CHARACTER TAD LATEST /GET LATEST CHARACTER JMP I PUTNEXT /GO WHERE YOU SHOULD GO PUTNEXT,.-. /EXIT ROUTINE JMP I PUTBYTE /RETURN TO MAIN CALLER PUTINIT,CLA /CLEAN UP TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH PUTNEWR,TAD POUTBUFFER/(OUTBUFFER) /SETUP THE DCA PUTPTR /BUFFER POINTER PUTLOOP,JMS PUTNEXT /GET A CHARACTER DCA I PUTPTR /STORE IT TAD PUTPTR /GET POINTER VALUE DCA TEMPTR /SAVE FOR LATER ISZ PUTPTR /BUMP TO NEXT JMS PUTNEXT /GET A CHARACTER DCA I PUTPTR /STORE IT JMS PUTNEXT /GET A CHARACTER RTL;RTL /MOVE UP AND [7400] /ISOLATE HIGH NYBBLE TAD I TEMPTR /ADD ON FIRST BYTE DCA I TEMPTR /STORE COMPOSITE TAD LATEST /GET LATEST CHARACTER RTR;RTR;RAR /MOVE UP AND AND [7400] /ISOLATE LOW NYBBLE TAD I PUTPTR /ADD ON SECOND BYTE DCA I PUTPTR /STORE COMPOSITE ISZ PUTPTR /BUMP TO NEXT TAD PUTPTR /GET LATEST POINTER VALUE TAD (-2^200-OUTBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING ISZ DANGCNT /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I (SIZERR) /JUMP IF SO JMS I OUTPUT /CALL I/O HANDLER 2^100+WRITE /WRITE SOME PAGES FROM OUTPUT BUFFER POUTBUF,OUTBUFFER /BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER JMP I (OERROR) /OUTPUT ERROR! ISZ I (OUTCNT) /BUMP ACTUAL LENGTH ISZ PUTRECORD /BUMP TO NEXT RECORD JMP PUTNEWRECORD /KEEP GOING / OS/8 FILE UNPACK ROUTINE. GETBYTE,.-. /GET A BYTE ROUTINE SNA CLA /INITIALIZING? JMP I PUTC /NO, GO GET NEXT BYTE TAD INRECORD /GET STARTING RECORD OF INPUT FILE DCA GETRECORD /STORE IN-LINE GETNEWR,JMS I INPUT /CALL I/O HANDLER 2^100 /READ TWO PAGES INTO BUFFER PINBUFF,INBUFFER /BUFFER ADDRESS GETRECO,.-. /WILL BE LATEST RECORD NUMBER JMP I GETBERROR /INPUT ERROR! TAD PINBUFFER/(INBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER GETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE TAD THIRD /GET THIRD BYTE JMS PUTC /SEND IT BACK TAD BUFPTR /GET THE POINTER TAD (-2^200-INBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP GETLOOP /KEEP GOING ISZ GETRECORD /BUMP TO NEXT RECORD JMP GETNEWRECORD /GO DO ANOTHER ONE PUTONE, .-. /SEND BACK A BYTE ROUTINE TAD I BUFPTR /GET LATEST WORD AND [7400] /JUST THIRD-BYTE NYBBLE CLL RAL /MOVE UP TAD THIRD /GET OLD NYBBLE (IF ANY) RTL;RTL /MOVE UP NYBBLE BITS DCA THIRD /SAVE FOR NEXT TIME TAD I BUFPTR /GET LATEST WORD AGAIN JMS PUTC /SEND BACK CURRENT BYTE ISZ BUFPTR /BUMP TO NEXT WORD JMP I PUTONE /RETURN PUTC, .-. /SEND BACK LATEST BYTE ROUTINE AND (177) /KEEP ONLY GOOD BITS DCA PUTEMP /SAVE IT TAD PUTEMP /GET IT BACK TAD (-"Z!300) /COMPARE TO <^Z> SNA CLA /SKIP IF NOT ASCII <EOF> JMP I GETBYTE /RETURN IF ASCII MODE <EOF> TAD PUTEMP /RESTORE THE CHARACTER ISZ GETBYTE /BUMP PAST <EOF> RETURN JMP I GETBYTE /RETURN TO MAIN CALLER PAGE GEOFILE,.-. /GET OUTPUT FILE ROUTINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER SZA CLA /SKIP IF NOT ESTABLISHED YET JMP GOTOD /JUMP IF DETERMINED ALREADY TAD ("D^100+"S-300) /GET BEGINNING OF "DSK" DCA DEVNAME /STORE IN-LINE TAD ("K^100) /GET REST OF "DSK" DCA DEVNAME+1 /STORE IN-LINE DCA RETVAL /CLEAR HANDLER ENTRY WORD CDF PRGFLD /INDICATE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE INQUIRE /INQUIRE ABOUT HANDLER DEVNAME,ZBLOCK 2 /WILL BE DEVICE DSK RETVAL, .-. /BECOMES HANDLER ENTRY POINT WORD HLT /DSK: NOT IN SYSTEM IS IMPOSSIBLE! TAD DEVNAME+1 /GET DEVICE NUMBER FOR DSK: AND [17] /JUST DEVICE BITS DCA ODNUMBER /STORE OUTPUT DEVICE GOTOD, JMS SCANAME /SCAN OFF FILE NAME CDF TBLFLD /BACK TO TABLE FIELD TAD I (OUTFILE+1) /GET OUTPUT FILE FIRST NAME WORD SNA /SKIP IF PRESENT JMP GFLNAME /JUMP IF NOT DCA FNAME /MOVE TO OUR AREA TAD I (OUTFILE+2) /GET SECOND NAME WORD DCA FNAME+1 /MOVE IT TAD I (OUTFILE+3) /GET THIRD NAME WORD DCA FNAME+2 /MOVE IT TAD I (OUTFILE+4) /GET EXTENSION WORD DCA FNAME+3 /MOVE IT CDF PRGFLD /BACK TO OUR FIELD JMP I GEOFILE /RETURN / WE MUST TAKE THE FILENAME FROM THE IMBEDDED FILENAME SUPPLIED. GFLNAME,CDF PRGFLD /BACK TO OUR FIELD TAD ONAME /GET THE FIRST CHARACTER SNA CLA /SKIP IF SOMETHING THERE JMP I (CHARERROR) /COMPLAIN IF NONE THERE TAD (ONAME-1) /SETUP POINTER DCA XR1 /TO NAME CHARACTERS TAD (FNAME-1) /SETUP POINTER DCA XR2 /TO PACKED NAME AREA TAD (-4) /SETUP THE DCA CHRCNT /MOVE COUNT CHRLOOP,TAD I XR1 /GET FIRST CHARACTER CLL RTL;RTL;RTL /MOVE UP TAD I XR1 /ADD ON SECOND CHARACTER DCA I XR2 /STORE THE PAIR ISZ CHRCNT /DONE YET? JMP CHRLOOP /NO, KEEP GOING JMP I GEOFILE /YES, RETURN SCANAME,.-. /SCAN OFF FILENAME ROUTINE TAD (NIOERROR) /SETUP THE DCA GETBERROR /I/O ERROR HANDLER / ZERO OUT THE FILENAME AREA. TAD (-10) /SETUP THE DCA CHRCNT /CLEAR COUNTER TAD (ONAME-1) /SETUP THE DCA XR1 /POINTER JMS CLRNAME /CLEAR THE NAME BUFFER / SETUP FOR SCANNING THE NAME PORTION. TAD (-6) /SETUP THE DCA CHRCNT /SCAN COUNT TAD (ONAME-1) /SETUP THE DCA XR1 /POINTER NL7777 /MAKE IT INITIALIZE FNCAGN, JMS I (GETAN) /GET A CHARACTER JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD DCA I XR1 /STASH THE CHARACTER ISZ CHRCNT /DONE ALL YET? JMP FNCAGN /NO, KEEP GOING / THROW AWAY EXTRA NAME CHARACTERS. TOSSNAM,JMS I (GETAN) /GET A CHARACTER JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD CLA /THROW AWAY THE CHARACTER JMP TOSSNAME /KEEP GOING / COMES HERE AFTER "." FOUND. GOTSEPA,JMS CLRNAME /CLEAR OUT THE REMAINING NAME FIELD NL7776 /SETUP THE DCA CHRCNT /SCAN COUNT EXCAGN, JMS I (GETAN) /GET A CHARACTER JMP I (CHARERROR) /GOT "."; COMPLAIN DCA I XR1 /STASH THE CHARACTER ISZ CHRCNT /DONE ENOUGH YET? JMP EXCAGN /NO, KEEP GOING / TOSS ANY EXTRA EXTENSION CHARACTERS. TOSSEXT,JMS I (GETAN) /GET A CHARACTER JMP I (CHARERROR) /GOT "."; COMPLAIN CLA /THROW AWAY THE CHARACTER JMP TOSSEXTENSION /KEEP GOING / COMES HERE WHEN TRAILING <CR> IS FOUND. GOTCR, JMS CLRNAME /CLEAR ANY REMAINING EXTENSION CHARACTERS JMP I SCANAME /RETURN CLRNAME,.-. /NAME FIELD CLEARING ROUTINE TAD CHRCNT /GET CHARACTER COUNTER SNA CLA /SKIP IF ANY TO CLEAR JMP I CLRNAME /ELSE JUST RETURN DCA I XR1 /CLEAR A NAME WORD ISZ CHRCNT /COUNT IT JMP .-2 /KEEP GOING JMP I CLRNAME /RETURN PAGE GETCHAR,.-. /GET A CHARACTER ROUTINE JMS I [GETBYTE] /GET A CHARACTER JMP I (CHARERROR) /COMPLAIN IF <EOF> REACHED TAD (-"M!300) /COMPARE TO <CR> SNA /SKIP IF OTHER JMP I (GOTCR) /JUMP IF IT MATCHES TAD (-140+"M-300) /COMPARE TO LOWER-CASE LIMIT SPA /SKIP IF LOWER-CASE TAD (40) /RESTORE ORIGINAL IF UPPER-CASE AND (77) /JUST SIX-BIT DCA PUTEMP /SAVE IN CASE WE NEED IT TAD PUTEMP /GET IT BACK JMP I GETCHAR /RETURN GETAN, .-. /GET ALPHANUMERIC ROUTINE GETNAGN,JMS GETCHAR /GET A CHARACTER TAD [-" !200] /COMPARE TO <SPACE> SNA CLA /SKIP IF OTHER JMP GETNAGN /JUMP IF IT MATCHES TAD PUTEMP /GET THE CHARACTER BACK TAD (-".!200) /COMPARE TO "." SNA /SKIP IF OTHER JMP I GETAN /TAKE FIRST RETURN IF IT MATCHES TAD (-":+".) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD (":-"0) /ADD ON RANGE SZL CLA /SKIP IF NOT NUMERIC JMP GETANOK /JUMP IF NUMERIC TAD PUTEMP /GET THE CHARACTER BACK TAD (-"[!300) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD ("[-"A) /ADD ON RANGE SNL CLA /SKIP IF ALPHABETIC JMP I (CHARERROR) /ELSE COMPLAIN GETANOK,TAD PUTEMP /GET GOOD ALPHANUMERIC CHARACTER ISZ GETAN /BUMP TO SKIP RETURN JMP I GETAN /RETURN PAGE $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12dec.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 | / OS/8 DECODING PROGRAM / LAST EDIT: 08-JUL-1992 22:00:00 CJL / PROGRAM TO DECODE OS/8 FILES FROM "PRINTABLE" ASCII FORMAT TO BINARY-IMAGE / FORMAT. INTERMEDIATE "ASCII" CONVERSION SHOULD BE HARMLESS AS LONG AS ALL / PRINTING DATA CHARACTERS ARE NOT MODIFIED. / DISTRIBUTED BY CUCCA AS "K12DEC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. / WRITTEN BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / USAGE: / THIS PROGRAM OPERATES ON "PRINTABLE" ASCII FILES WHICH HAVE BEEN CREATED BY / ENCODING THE CONTENTS OF ARBITRARY (BINARY) FILES. THE ENCODING FORMAT ALLOWS / FOR SOME INNOCUOUS CONTENT MODIFICATION SUCH AS EXTRANEOUS WHITE SPACE AND / EXTRA <CR>/<LF> PAIRS, BUT RIGOROUSLY VALIDATES CERTAIN ASPECTS OF THE FORMAT, / SUCH AS A TRAILING CHECKSUM. / CERTAIN IMBEDDED COMMANDS ARE USED SUCH AS (REMARK .........) WHICH ALLOWS FOR / COMMENTARY LINES WITHIN THE FILE FOR IDENTIFICATION PURPOSES. THE (FILE ) AND / (END ) COMMANDS CONTAIN THE SUGGESTED FILENAME FOR THE DESCENDANT DECODED / FILE. / WHEN CREATING THE DESCENDANT DECODED FILE, THE USER MAY SPECIFY EITHER THE / IMBEDDED FILENAME OR AN ALTERNATE FILENAME ON EITHER THE DEFAULT (DSK:) DEVICE / OR A SPECIFIED DEVICE: / .RUN DEV DECODE INVOKE PROGRAM. / *INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DSK: (DEFAULT). / *DEV:OUTPUT.EX<INPUT INPUT IS DECODED INTO OUTPUT.EX ON DEVICE DEV:. / *DEV:<INPUT INPUT IS DECODED INTO IMBEDDED NAME ON DEVICE DEV:. / *DEV:<INPUT=NNNN/I **** SPECIAL IMAGE TRANSFER MODE **** INPUT IS DECODED / INTO RECORD 0000-[NNNN-1] ON DEVICE DEV:. THE =NNNN / VALUE SHOULD BE CAREFULLY CHOSEN LARGE ENOUGH TO WRITE / ALL DATA RECORDS, BUT NEED NOT BE STATED EXACTLY. / (THE ENCODE PROGRAM REQUIRES PRECISE STATEMENT OF THE / LENGTH IN IMAGE TRANSFER ENCODING MODE. **** NOTE / **** THIS METHOD VIOLATES ALL OS/8 DEVICE STRUCTURE / AND IS MEANT FOR TRANSFER OF COMPLETE DEVICE IMAGES / ONLY; USE WITH CARE! / *DEV:<INPUT=NNNN/I/1 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE FIRST HALF OF THE DATA IS / USED. NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY / BECAUSE IT IS USED TO CALCULATE THE APPROX. 1/2 VALUE / ACTUALLY USED IN THIS HALF OF THE OVERALL TRANSFER. / THIS MODE SHOULD BE USED WITH FILES CREATED FOR THE / EXPRESS PURPOSE OF TRANSMISSION BY HALVES ONLY; USE / WITH CARE! / *DEV:<INPUT=NNNN/I/2 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE SECOND HALF OF THE DATA IS / USED. NOTE THAT THE =NNNN VALUE MUST BE GIVEN EXACTLY / BECAUSE IT IS USED TO CALCULATE THE STARTING RECORD OF / THE APPROX. 1/2 VALUE ACTUALLY USED IN THIS HALF OF / THE OVERALL TRANSFER. THIS MODE SHOULD BE USED WITH / FILES CREATED FOR THE EXPRESS PURPOSE OF TRANSMISSION / BY HALVES ONLY; USE WITH CARE! NOTE THAT THERE MUST / BE TWO FILES CREATED, ONE USING /I/1 AND THE OTHER / USING /I/2 TO COMPLETELY TRANSFER A DEVICE IMAGE / UNLESS /I IS USED ALONE! / *OUTPUT.EX<INPUT$ INPUT IS DECODED INTO OUTPUT.EX ON DSK: (DEFAULT). / THE <ESC> CHARACTER WAS USED TO TERMINATE THE LINE / (THIS IS SIGNIFIED BY $). THIS CAUSES PROGRAM EXIT. / . PROGRAM EXITS NORMALLY. / INPUT FILE ASSUMES .EN EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. / IMAGE TRANSFER MODE DOESN'T USE OUTPUT FILENAMES, AS THE TRANSFER DESTROYS THE / OS/8 FILE STRUCTURE (POSSIBLY PRESENT) ON THE DEVICE. / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN <ESC> / CHARACTER. / THIS PROGRAM SUPPORTS A PROPER SUBSET OF THE ASCII ENCODING SCHEME DISCUSSED / BY CHARLES LASNER AND FRANK DA CRUZ. THE SCHEME USED IS FIVE-BIT ENCODING / WITH COMPRESSION, (AS OPPOSED TO SIX-BIT WITHOUT COMPRESSION AS USED IN PRIOR / VERSIONS). / RESTRICTIONS: / A) SUPPORTS ONLY ONE DECODABLE FILE PER ENCODED FILE. / B) IGNORES ALL (END ) COMMANDS. / C) <CR> <LF> < ALWAYS INDICATES ENCODED DATA LINES; NO CHECK IS MADE FOR / WHETHER THE > IS ON THE SAME LINE AS THE <. / D) PDP-8 GENERATED CHECKSUM DATA MUST BE THE FINAL DATA IN THE FILE IN / THE PROPER FORMAT: ZCCCCCCCCCCCC WHERE CCCCCCCCCCCC IS THE / TWELVE-CHARACTER PDP-8 CHECKSUM DATA. / IF THE ENCODED FILE IS PASSED THROUGH ANY INTERMEDIARY PROCESS THAT MODIFIES / THE CONTENTS IN A WAY THAT INTERFERES WITH ANY OF THE ABOVE, THIS DECODING / PROGRAM WILL FAIL. IT IS THE USER'S RESPONSIBILITY TO EDIT OUT UNWANTED / CHANGES TO THE ENCODED FILE. ALL OTHER ASPECTS OF THE PROTOCOL ARE OBEYED, / SUCH AS IMBEDDED <FF>, EXTRA <CR> <LF>, OR TRAILING SPACES HAVE NO EFFECT ON / THE RELIABILITY OF THE DECODING PROCESS, ETC. / ERROR MESSAGES. / ANY MESSAGE PRINTED IS A FATAL ERROR MESSAGE. ALL MESSAGES ARE THE STANDARD / OS/8 "USER" ERROR MESSAGES OF THE FORM: USER ERROR X AT AAAAA WHERE X IS THE / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. / THE FOLLOWING USER ERRORS ARE DEFINED: / ERROR NUMBER PROBABLE CAUSE / 0 TOO MANY OUTPUT FILES. / 1 NO INPUT FILE OR TOO MANY INPUT FILES. / 2 IMBEDDED OUTPUT FILENAME FORMAT ERROR. / 3 I/O ERROR WHILE LOCATING IMBEDDED OUTPUT FILENAME. / 4 ERROR WHILE FETCHING FILE HANDLER. / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE DECODING FILE DATA OR BAD DATA. / ASSEMBLY INSTRUCTIONS. / IT IS ASSUMED THE SOURCE FILE K12DEC.PAL HAS BEEN MOVED AND RENAMED TO / DSK:DECODE.PA. / .PAL DECODE<DECODE ASSEMBLE SOURCE PROGRAM / .LOAD DECODE LOAD THE BINARY FILE / .SAVE DEV DECODE=0 SAVE THE CORE-IMAGE FILE / DEFINITIONS. CLOSE= 4 /CLOSE OUTPUT FILE DECODE= 5 /CALL COMMAND DECODER ENTER= 3 /ENTER TENTATIVE FILE EQUWRD= 7646 /EQUALS PARAMETER HERE IN TABLE FIELD FETCH= 1 /FETCH HANDLER IHNDBUF=7200 /INPUT HANDLER BUFFER INBUFFE=6200 /INPUT BUFFER INFILE= 7617 /INPUT FILE INFORMATION HERE INQUIRE=12 /INQUIRE ABOUT HANDLER NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 OHNDBUF=6600 /OUTPUT HANDLER BUFFER OUTBUFF=5600 /OUTPUT BUFFER OUTFILE=7600 /OUTPUT FILE INFORMATION HERE PRGFLD= 00 /PROGRAM FIELD RESET= 13 /RESET SYSTEM TABLES SBOOT= 7600 /MONITOR EXIT SWAL= 7643 /A-/L SWITCHES HERE IN TABLE FIELD SWY9= 7645 /Y-/9 SWITCHES HERE IN TABLE FIELD TBLFLD= 10 /COMMAND DECODER TABLE FIELD TERMWRD=7642 /TERMINATOR WORD USERROR=7 /USER SIGNALLED ERROR USR= 7700 /USR ENTRY POINT USRFLD= 10 /USR FIELD WIDTH= 107-2 /69 DATA CHARACTERS PER LINE (TOTAL 71) WRITE= 4000 /I/O WRITE BIT *0 /START AT THE BEGINNING *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, .-. /AUTO-INDEX NUMBER 2 *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /OUTPUT BUFFER POINTER CCNT, .-. /CHECKSUM COUNTER CHKSUM, ZBLOCK 5 /CHECKSUM TEMPORARY CHRCNT, .-. /CHARACTER COUNTER CSUMTMP,.-. /CHECKSUM TEMPORARY DANGCNT,.-. /DANGER COUNT DATCNT, .-. /DATA COUNTER DSTATE, .-. /DATA STATE VARIABLE IDNUMBE,.-. /INPUT DEVICE NUMBER IMSW, .-. /IMAGE-MODE SWITCH INITFLA,.-. /INITIALIZE INPUT FLAG INPUT, .-. /INPUT HANDLER POINTER INRECOR,.-. /INPUT RECORD FCHKSUM,ZBLOCK 5 /FILE CHECKSUM FNAME, ZBLOCK 4 /OUTPUT FILENAME GWTMP1, .-. /GETWORD TEMPORARY GWTMP2, .-. /GETWORD TEMPORARY GWVALUE,.-. /LATEST WORD VALUE ODNUMBE,.-. /OUTPUT DEVICE NUMBER OUTPUT, .-. /OUTPUT HANDLER POINTER OUTRECO,.-. /OUTPUT RECORD PUTEMP, .-. /OUTPUT TEMPORARY PUTPTR, .-. /OUTPUT POINTER THIRD, .-. /THIRD BYTE TEMPORARY / STATE TABLE. P, SCANIT /0000 LOOKING FOR "(" OR "<" FNDCOMMAND /0001 FOUND "(" AND NOW LOOKING FOR ")" FNDCEND /0002 FOUND ")" AND NOW LOOKING FOR <CR> FNDCR /0003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET STORDATA /4000 FOUND "<" AND PROCESSING 69 DATA BYTES ENDATA /4001 FOUND 69 DATA BYTES AND NOW LOOKING FOR ">" ENDCR /4002 FOUND ">" AND NOW LOOKING FOR <CR> FNDCR/ENDLF /4003 FOUND <CR> AND NOW LOOKING FOR <LF> TO RESET PAGE /START AT THE USUAL PLACE BEGIN, NOP /HERE IN CASE WE'RE CHAINED TO CLA /CLEAN UP START, CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE DECODE /WANT COMMAND DECODER "E^100+"N-300 /.EN IS DEFAULT EXTENSION CDF TBLFLD /GOTO TABLE FIELD TAD I (TERMWRD) /GET TERMINATOR WORD SPA CLA /SKIP IF <CR> TERMINATED THE LINE DCA EXITZAP /ELSE CAUSE EXIT LATER DCA IMSW /CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH TAD I (OUTFILE) /GET FIRST OUTPUT FILE DEVICE WORD SNA /SKIP IF FIRST OUTPUT FILE PRESENT JMP TSTMORE /JUMP IF NOT THERE AND [17] /JUST DEVICE BITS ODNULL, DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD SNA /SKIP IF THERE TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF BOTH NOT PRESENT JMP I (OUTERR) /ELSE COMPLAIN TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SNA /SKIP IF PRESENT JMP I (INERR) /JUMP IF NOT AND [17] /JUST DEVICE BITS DCA IDNUMBER /SAVE INPUT DEVICE NUMBER TAD I (INFILE+2) /GET SECOND INPUT FILE DEVICE WORD SZA CLA /SKIP IF ONLY ONE INPUT FILE JMP I (INERR) /ELSE COMPLAIN TAD I (INFILE+1) /GET FIRST INPUT FILE STARTING RECORD DCA INRECORD /SET IT UP CDF PRGFLD /BACK TO OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE RESET /RESET SYSTEM TABLES TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT DCA IHPTR /STORE IN-LINE TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP I (FERROR) /FETCH ERROR TAD IHPTR /GET RETURNED ADDRESS DCA INPUT /STORE AS INPUT HANDLER ADDRESS JMS I (GEOFILE) /GET OUTPUT FILE INFORMATION TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT DCA OHPTR /STORE IN-LINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP I (FERROR) /FETCH ERROR TAD OHPTR /GET RETURNED ADDRESS DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS TAD IMSW /GET IMAGE-MODE SWITCH SNA CLA /SKIP IF SET JMP NOIMAGE /JUMP IF NOT / IF /2 IS SET, THE DATA STARTS HALF-WAY INTO THE IMAGE. OTHER IMAGE MODES / START AT RECORD 0000. CDF TBLFLD /GOTO TABLE FIELD TAD I [SWY9] /GET /Y-/9 SWITCHES AND (200) /JUST /2 SWITCH SNA CLA /SKIP IF SET JMP IMAGE1 /JUMP IF /1 OR NEITHER /1, /2 SET TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 IMAGE1, DCA OUTRECORD /STORE STARTING OUTPUT RECORD CDF PRGFLD /BACK TO OUR FIELD SKP /DON'T ENTER FILE NAME NOIMAGE,JMS I (FENTER) /ENTER THE TENTATIVE FILE NAME DCA DSTATE /SET INITIAL DATA STATE JMS I (CLRCHKSUM) /CLEAR OUT CHECKSUM JMS I (DECODIT) /GO DO THE ACTUAL DECODING JMP I (PROCERR) /ERROR WHILE DECODING TAD IMSW /GET IMAGE-MODE SWITCH SZA CLA /SKIP IF CLEAR JMP EXITZAP /JUMP IF SET TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE CLOSE /CLOSE OUTPUT FILE FNAME /POINTER TO FILENAME OUTCNT, .-. /WILL BE ACTUAL COUNT JMP I (CLSERR) /CLOSE ERROR EXITZAP,JMP START /**** <ESC> TERMINATION **** 0000 JMP I (SBOOT) /EXIT TO MONITOR / COMES HERE TO TEST FOR NULL LINE. TSTMORE,TAD I (OUTFILE+5) /GET SECOND OUTPUT FILE DEVICE WORD SNA /SKIP IF PRESENT TAD I (OUTFILE+12) /ELSE GET THIRD OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF NO OUTPUT FILES JMP I (OUTERR) /ELSE COMPLAIN OF SECOND/THIRD (WITHOUT FIRST) OUTPUT TAD I (INFILE) /GET FIRST OUTPUT FILE DEVICE WORD SZA CLA /SKIP IF NO INPUT FILES JMP ODNULL /JUMP IF INPUT WITHOUT OUTPUT CDF PRGFLD /BACK TO OUR FIELD JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST PAGE / ERROR WHILE PROCESSING INPUT FILE. PROCERR,NL0002 /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. CLSERR, NL0001 /SET INCREMENT SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. SIZERR, CLA /CLEAN UP TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ENTER ERROR. ENTERR, NL0002 /SET INCREMENT SKP /DON'T USE NEXT / HANDLER FETCH ERROR. FERROR, NL0001 /SET INCREMENT / I/O ERROR WHILE PROCESSING (FILE ) COMMAND. NIOERR, IAC /SET INCREMENT / FORMAT ERROR WHILE PROCESSING (FILE ) COMMAND. CHARERR,IAC /SET INCREMENT / INPUT FILESPEC ERROR. INERR, IAC /SET INCREMENT / OUTPUT FILESPEC ERROR. OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER CDF PRGFLD /ENSURE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE USERROR /USER ERROR ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER DECODIT,.-. /DECODING ROUTINE TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH NL7777 /SETUP THE DCA INITFLAG /INITIALIZE FLAG TAD (GWLOOP) /INITIALIZE THE DCA I (GWNEXT) /DECODE PACK ROUTINE PUTNEWR,TAD POUTBUFFER/(OUTBUFFER) /SETUP THE DCA PUTPTR /OUTPUT BUFFER POINTER PUTLOOP,JMS I (GETWORD) /GET A WORD DCA I PUTPTR /STORE IT ISZ PUTPTR /BUMP TO NEXT TAD PUTPTR /GET THE POINTER TAD (-2^200-OUTBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING ISZ DANGCNT /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I (SIZERROR) /NOT ENOUGH SPACE AVAILABLE JMS I OUTPUT /CALL OUTPUT HANDLER 2^100+WRITE /WRITE LATEST RECORD POUTBUF,OUTBUFFER /OUTPUT BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER DECERR, JMP I DECODIT /I/O ERROR ISZ PUTRECORD /BUMP TO NEXT RECORD NOP /JUST IN CASE ISZ I (OUTCNT) /BUMP ACTUAL LENGTH JMP PUTNEWRECORD /GO DO ANOTHER ONE / GOOD RETURN HERE. DECBMP, ISZ DECODIT /BUMP TO GOOD RETURN JMP I DECODIT /RETURN / OS/8 FILE UNPACK ROUTINE. GETBYTE,.-. /GET A BYTE ROUTINE SNA CLA /INITIALIZING? JMP I PUTC /NO, GO GET NEXT BYTE TAD INRECORD /GET STARTING RECORD OF INPUT FILE DCA GETRECORD /STORE IN-LINE GETNEWR,JMS I INPUT /CALL I/O HANDLER 2^100 /READ TWO PAGES INTO BUFFER INBUFFER /BUFFER ADDRESS GETRECO,.-. /WILL BE LATEST RECORD NUMBER JMP I GETBYTE /INPUT ERROR! TAD (INBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER GETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE TAD THIRD /GET THIRD BYTE JMS PUTC /SEND IT BACK TAD BUFPTR /GET THE POINTER TAD (-2^200-INBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP GETLOOP /KEEP GOING ISZ GETRECORD /BUMP TO NEXT RECORD JMP GETNEWRECORD /GO DO ANOTHER ONE PUTONE, .-. /SEND BACK A BYTE ROUTINE TAD I BUFPTR /GET LATEST WORD AND (7400) /JUST THIRD-BYTE NYBBLE CLL RAL /MOVE UP TAD THIRD /GET OLD NYBBLE (IF ANY) RTL;RTL /MOVE UP NYBBLE BITS DCA THIRD /SAVE FOR NEXT TIME TAD I BUFPTR /GET LATEST WORD AGAIN JMS PUTC /SEND BACK CURRENT BYTE ISZ BUFPTR /BUMP TO NEXT WORD JMP I PUTONE /RETURN PUTC, .-. /SEND BACK LATEST BYTE ROUTINE AND (177) /KEEP ONLY GOOD BITS TAD (-"Z!300) /COMPARE TO <^Z> SNA /SKIP IF NOT ASCII <EOF> JMP GETEOF /JUMP IF ASCII MODE <EOF> TAD ("Z&37) /RESTORE THE CHARACTER ISZ GETBYTE /BUMP PAST <EOF> RETURN GETEOF, ISZ GETBYTE /BUMP PAST I/O ERROR RETURN JMP I GETBYTE /RETURN TO MAIN CALLER PAGE / GET A DECODED WORD ROUTINE. GETWORD,.-. /GET A WORD ROUTINE JMP I GWNEXT /GO WHERE YOU SHOULD GO GWNEXT, .-. /EXIT ROUTINE SNL /SKIP IF CHECKSUM PREVENTED JMS I (DOCHECK) /ELSE DO CHECKSUM JMP I GETWORD /RETURN TO MAIN CALLER / COMES HERE TO PROCESSED COMPRESSED DATA. GWX, JMS I (GETCHR) /GET NEXT CHARACTER JMS I (GWORD0) /GET 12-BIT WORD JMS I (DOCHECK) /INCLUDE IN CHECKSUM DCA GWVALUE /SAVE AS COMPRESSED VALUE TAD GWTMP2 /GET LATEST CHARACTER AND [7] /ISOLATE BITS[9-11] CLL RTR;RTR /BITS[9-11] => AC[0-2] DCA GWTMP1 /SAVE FOR NOW JMS GBIHEXBINARY /GET A CHARACTER CLL RTL;RTL /BITS[7-11] => AC[3-7] TAD GWTMP1 /ADD ON BITS[0-2] JMS I (DOCHECK) /INCLUDE IN CHECKSUM CLL RTR;RTR /BITS[0-7] => AC[4-11] SNA /SKIP IF NOT 256 TAD [400] /000 => 256 CIA /INVERT FOR COUNTING DCA GWTMP1 /SAVE AS REPEAT COUNTER GWXLUP, TAD GWVALUE /GET THE VALUE STL /PREVENT CHECKSUMMING IT JMS GWNEXT /RETURN IT TO THEM ISZ GWTMP1 /DONE ENOUGH? JMP GWXLUP /NO, KEEP GOING / COMES HERE TO INITIATE ANOTHER DATA GROUP. GWLOOP, JMS I (GETCHR) /GET LATEST FILE CHARACTER TAD (-"Z!200) /COMPARE TO EOF INDICATOR SNA /SKIP IF OTHER JMP GWZ /JUMP IF IT MATCHES TAD (-"X+"Z) /COMPARE TO COMPRESSION INDICATOR SNA CLA /SKIP IF OTHER JMP GWX /JUMP IF IT MATCHES TAD PUTEMP /GET THE CHARACTER BACK JMS I (GWORD0) /GET A 12-BIT WORD JMS GWNEXT /RETURN IT JMS I (GWORD1) /GET NEXT 12-BIT WORD JMS GWNEXT /RETURN IT JMS I (GWORD2) /GET NEXT 12-BIT WORD JMS GWNEXT /RETURN IT JMS I (GWORD3) /GET NEXT 12-BIT WORD JMS GWNEXT /RETURN IT JMS I (GWORD4) /GET NEXT 12-BIT WORD JMS GWNEXT /RETURN IT JMP GWLOOP /KEEP GOING / COMES HERE WHEN EOF INDICATOR FOUND. GWZ, TAD (FCHKSUM-1) /SETUP THE DCA XR1 /CHECKSUM POINTER JMS I (GETCHR) /GET NEXT CHARACTER JMS I (GWORD0) /GET A 12-BIT WORD DCA I XR1 /STORE IT JMS I (GWORD1) /GET NEXT WORD DCA I XR1 /STORE IT JMS I (GWORD2) /GET NEXT WORD DCA I XR1 /STORE IT JMS I (GWORD3) /GET NEXT WORD DCA I XR1 /STORE IT JMS I (GWORD4) /GET NEXT WORD DCA I XR1 /STORE IT TAD (CHKSUM-1) /POINT TO DCA XR1 /CALCULATED CHECKSUM TAD (FCHKSUM-1) /POINT TO DCA XR2 /FILE CHECKSUM TAD [-5] /SETUP THE DCA CCNT /COMPARE COUNT CLL /CLEAR LINK FOR TEST GWCMPLP,RAL /GET CARRY TAD I XR1 /GET A CALCULATED WORD TAD I XR2 /COMPARE TO FILE WORD SZA CLA /SKIP IF OK JMP I (DECERR) /ELSE COMPLAIN ISZ CCNT /DONE ALL? JMP GWCMPLP /NO, KEEP GOING / THE CHECKSUM IS OK, CHECK IF FILE ENDED IN A PLAUSIBLE PLACE. TAD PUTPTR /GET OUTPUT POINTER TAD (-OUTBUFFER-4) /COMPARE TO LIMIT SMA SZA CLA /SKIP IF GOOD VALUE JMP I (DECERROR) /JUMP IF NOT / THE FILE ENDED OK, THERE WERE POSSIBLY A FEW CHARACTERS LEFTOVER BECAUSE OF / ALIGNMENT CONSIDERATIONS. THEY SHOULD BE IGNORED SINCE OS/8 FILES ARE / MULTIPLES OF WHOLE RECORDS. JMP I (DECBMP) /RETURN WITH ALL OK GBIHEXB,.-. /GET BINARY VALUE OF BIHEXADECIMAL CHARACTER CLA /CLEAN UP TAD GBIHEXBINARY /GET OUR CALLER DCA BIHEXBINARY /MAKE IT THEIRS JMS I (GETCHR) /GET A CHARACTER SKP /DON'T EXECUTE HEADER! BIHEXBI,.-. /CONVERT BIHEXADECIMAL TO BINARY TAD (-"A!200) /COMPARE TO ALPHABETIC LIMIT SMA /SKIP IF LESS TAD ("9+1-"A) /ELSE ADD ON ALPHABETIC OFFSET TAD (-"0+"A) /MAKE IT BINARY, NOT ASCII DCA GWTMP2 /SAVE IT TAD GWTMP2 /GET IT BACK JMP I BIHEXBINARY /RETURN PAGE / GET WORD[0] ROUTINE. AC MUST ALREADY CONTAIN THE FIRST BI-HEXADECIMAL / CHARACTER. GWORD0, .-. /GET 12-BIT WORD[0] JMS I (BIHEXBINARY) /CONVERT PASSED VALUE TO BINARY CLL RTR;RTR;RTR /BITS[7-11] => AC[0-4] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RTL /BITS[7-11] => AC[5-9] TAD GWTMP1 /ADD ON BITS[0-4] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY RTR;RAR /BITS[7-8] => AC[10-11] AND [3] /ISOLATE BITS[10-11] TAD GWTMP1 /ADD ON BITS[0-9] CLL /CLEAR LINK JMP I GWORD0 /RETURN / GET WORD[1] ROUTINE. GWORD0 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. GWORD1, .-. /GET 12-BIT WORD[1] TAD GWTMP2 /GET PREVIOUS CHARACTER AND [7] /ISOLATE BITS[9-11] CLL RTR;RTR /BITS[9-11] => AC[0-2] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RTL;RTL /BITS[7-11] => AC[3-7] TAD GWTMP1 /ADD ON BITS[0-2] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RAR /BITS[7-10] => AC[8-11] TAD GWTMP1 /ADD ON BITS[0-7] CLL /CLEAR LINK JMP I GWORD1 /RETURN / GET WORD[2] ROUTINE. GWORD1 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. GWORD2, .-. /GET 12-BIT WORD[2] TAD GWTMP2 /GET PREVIOUS CHARACTER RAR;CLA RAR /BIT[11] => AC[0] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RTL;RTL;RTL /BITS[7-11] => AC[1-5] TAD GWTMP1 /ADD ON BIT[0] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RAL /BITS[7-11] => AC[6-10] TAD GWTMP1 /ADD ON BITS[0-5] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY AND (20) /ISOLATE BIT[7] CLL RTR;RTR /BIT[7] => AC[11] TAD GWTMP1 /ADD ON BITS[0-10] CLL /CLEAR LINK JMP I GWORD2 /RETURN / GET WORD[3] ROUTINE. GWORD2 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. GWORD3, .-. /GET 12-BIT WORD[3] TAD GWTMP2 /GET PREVIOUS CHARACTER CLL RTR;RTR;RAR /BITS[8-11] => AC[0-3] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RTL;RAL /BITS[7-11] => AC[4-8] TAD GWTMP1 /ADD ON BITS[0-3] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY RTR /BITS[7-9] => AC[9-11] AND [7] /ISOLATE BITS[9-11] TAD GWTMP1 /ADD ON BITS[0-8] CLL /CLEAR LINK JMP I GWORD3 /RETURN / GET WORD[4] ROUTINE. GWORD3 MUST HAVE BEEN CALLED LAST, SO GWTMP2 CONTAINS / THE PREVIOUS CHARACTER. GWORD4, .-. /GET 12-BIT WORD[4] TAD GWTMP2 /GET PREVIOUS CHARACTER AND [3] /ISOLATE BITS[10-11] CLL RTR;RAR /BITS[10-11] => AC[0-1] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY CLL RTL;RTL;RAL /BITS[7-11] => AC[2-6] TAD GWTMP1 /ADD ON BITS[0-1] DCA GWTMP1 /SAVE FOR NOW JMS I (GBIHEXBINARY) /GET NEXT CHARACTER IN BINARY TAD GWTMP1 /ADD ON BITS[0-6] TO BITS[7-11] CLL /CLEAR LINK JMP I GWORD4 /RETURN DOCHECK,.-. /CHECKSUM ROUTINE DCA CSUMTMP /SAVE PASSED VALUE TAD (CHKSUM-1) /SETUP THE DCA XR1 /INPUT POINTER TAD (CHKSUM-1) /SETUP THE DCA XR2 /OUTPUT POINTER TAD [-5] /SETUP THE DCA CCNT /SUM COUNT TAD CSUMTMP /GET THE VALUE CLL RAR /ADJUST FOR OPENING ITERATION CSUMLUP,RAL /GET CARRY TAD I XR1 /ADD ON A WORD DCA I XR2 /STORE BACK ISZ CCNT /DONE ALL YET? JMP CSUMLUP /NO, KEEP GOING TAD CSUMTMP /GET LATEST VALUE JMP I DOCHECK /RETURN PAGE GETCHR, .-. /GET A VALID CHARACTER ROUTINE GETMORE,TAD INITFLAG /GET INITIALIZE FLAG JMS I [GETBYTE] /GET A CHARACTER JMP I (DECERR) /I/O ERROR JMP I (DECERR) /<EOF> DCA PUTEMP /SAVE THE CHARACTER DCA INITFLAG /CLEAR INITIALIZE FLAG TAD DSTATE /GET DATA STATE SPA /SKIP IF NOT ONE OF THE DATA-ORIENTED STATES TAD (4004) /ADD ON DATA-ORIENTED STATES OFFSET TAD (JMP I P) /SETUP JUMP INSTRUCTION DCA .+1 /STORE IN-LINE .-. /AND EXECUTE IT / LOOKING FOR OPENING CHARACTER. SCANIT, TAD PUTEMP /GET THE CHARACTER TAD (-"<!200) /COMPARE TO OPENING DATA CHARACTER SNA /SKIP IF NO MATCH JMP FNDATA /JUMP IF IT MATCHES TAD (-"(+"<) /COMPARE TO OPENING COMMAND CHARACTER SNA CLA /SKIP IF NO MATCH ISZ DSTATE /INDICATE LOOKING FOR END OF COMMAND JMP GETMORE /KEEP GOING / FOUND OPENING COMMAND CHARACTER. FNDCOMM,TAD PUTEMP /GET THE CHARACTER TAD (-")!200) /COMPARE TO CLOSING COMMAND CHARACTER SNA CLA /SKIP IF NO MATCH ISZ DSTATE /INDICATE LOOKING FOR <CR> JMP GETMORE /KEEP GOING / FOUND CLOSING COMMAND CHARACTER. FNDCEND,TAD PUTEMP /GET THE CHARACTER TAD (-"M!300) /COMPARE TO <CR> SNA CLA /SKIP IF NO MATCH ISZ DSTATE /INDICATE LOOKING FOR <LF> JMP GETMORE /KEEP GOING / FOUND <CR> AFTER COMMAND. FNDCR, TAD PUTEMP /GET THE CHARACTER TAD (-"J!300) /COMPARE TO <LF> SNA CLA /SKIP IF NO MATCH DCA DSTATE /RESET TO SCANNING STATE JMP GETMORE /KEEP GOING / FOUND OPENING DATA CHARACTER. FNDATA, TAD (-WIDTH) /SETUP THE DCA DATCNT /DATA COUNTER NL4000 /SETUP THE DCA DSTATE /NEW STATE JMP GETMORE /KEEP GOING / PROCESSING ONE OF 69 DATA CHARACTERS. STORDAT,TAD PUTEMP /GET THE CHARACTER TAD [-140] /SUBTRACT UPPER-CASE LIMIT SPA /SKIP IF LOWER-CASE TAD [40] /RESTORE UPPER-CASE TAD (100) /RESTORE THE CHARACTER DCA PUTEMP /SAVE IT BACK TAD PUTEMP /GET IT AGAIN TAD (-"Z!200-1) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD ("Z-"A+1) /ADD ON RANGE SZL CLA /SKIP IF NOT ALPHABETIC JMP ALPHAOK /JUMP IF ALPHABETIC TAD PUTEMP /GET THE CHARACTER TAD (-"9!200-1) /ADD ON UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD ("9-"0+1) /ADD ON RANGE SNL CLA /SKIP IF OK JMP GETMORE /IGNORE IF NOT ALPHAOK,TAD PUTEMP /GET THE CHARACTER ISZ DATCNT /DONE 69 CHARACTERS? SKP /SKIP IF NOT ISZ DSTATE /ADVANCE TO NEXT STATE JMP I GETCHR /RETURN / PROCESSED 69 DATA CHARACTERS; NOW LOOKING FOR ENDING DATA CHARACTER. ENDATA, TAD PUTEMP /GET THE CHARACTER TAD (-">!200) /COMPARE TO ENDING DATA VALUE SNA CLA /SKIP IF NO MATCH ISZ DSTATE /ELSE ADVANCE TO NEXT STATE JMP GETMORE /KEEP GOING / FOUND ENDING DATA CHARACTER; NOW LOOKING FOR <CR>. ENDCR, TAD PUTEMP /GET THE CHARACTER TAD (-"M!300) /COMPARE TO <CR> SNA CLA /SKIP IF NO MATCH ISZ DSTATE /ELSE ADVANCE TO NEXT STATE JMP GETMORE /KEEP GOING / FOUND ENDING DATA CHARACTER AND <CR>; NOW LOOKING FOR <LF>. /ENDLF, TAD PUTEMP /GET THE CHARACTER / TAD (-"J!300) /COMPARE TO <LF> / SNA CLA /SKIP IF NO MATCH / DCA DSTATE /RESET TO SCANNING STATE / JMP GETMORE /KEEP GOING CLRCHKS,.-. /CLEAR CALCULATED CHECKSUM ROUTINE DCA CHKSUM+0 /CLEAR LOW-ORDER DCA CHKSUM+1 /CLEAR NEXT DCA CHKSUM+2 /CLEAR NEXT DCA CHKSUM+3 /CLEAR NEXT DCA CHKSUM+4 /CLEAR HIGH-ORDER JMP I CLRCHKSUM /RETURN PAGE GEOFILE,.-. /GET OUTPUT FILE ROUTINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER SZA CLA /SKIP IF NOT ESTABLISHED YET JMP GOTOD /JUMP IF DETERMINED ALREADY TAD ("D^100+"S-300) /GET BEGINNING OF "DSK" DCA DEVNAME /STORE IN-LINE TAD ("K^100) /GET REST OF "DSK" DCA DEVNAME+1 /STORE IN-LINE DCA RETVAL /CLEAR HANDLER ENTRY WORD CDF PRGFLD /INDICATE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE INQUIRE /INQUIRE ABOUT HANDLER DEVNAME,ZBLOCK 2 /WILL BE DEVICE DSK RETVAL, .-. /BECOMES HANDLER ENTRY POINT WORD HLT /DSK: NOT IN SYSTEM IS IMPOSSIBLE! TAD DEVNAME+1 /GET DEVICE NUMBER FOR DSK: AND [17] /JUST DEVICE BITS DCA ODNUMBER /STORE OUTPUT DEVICE GOTOD, CDF TBLFLD /BACK TO TABLE FIELD TAD I (OUTFILE+1) /GET OUTPUT FILE FIRST NAME WORD SNA /SKIP IF PRESENT JMP GFLNAME /JUMP IF NOT DCA FNAME /MOVE TO OUR AREA TAD I (OUTFILE+2) /GET SECOND NAME WORD DCA FNAME+1 /MOVE IT TAD I (OUTFILE+3) /GET THIRD NAME WORD DCA FNAME+2 /MOVE IT TAD I (OUTFILE+4) /GET EXTENSION WORD DCA FNAME+3 /MOVE IT GEOFXIT,CDF PRGFLD /BACK TO OUR FIELD JMP I GEOFILE /RETURN / WE MUST TAKE THE FILENAME FROM THE IMBEDDED (FILE ) COMMAND. THE ONLY / EXCEPTION IS IF WE ARE DOING AN IMAGE TRANSFER. GFLNAME,TAD I (SWAL) /GET /A-/L SWITCHES AND (10) /JUST /I BIT SZA CLA /SKIP IF NOT SET TAD I [EQUWRD] /GET EQUALS PARAMETER SNA /SKIP IF SET TO SOMETHING JMP DOFLNAME /JUMP IF PARAMETERS NOT SET CMA /INVERT IT DCA DANGCNT /STORE AS DANGER COUNT ISZ IMSW /SET IMAGE-MODE SWITCH TAD I [SWY9] /GET /Y-/9 SWITCHES AND (600) /JUST /1, /2 SWITCHES SNA /SKIP IF EITHER SET JMP GEOFXIT /JUMP IF NEITHER SET AND [400] /JUST /1 SWITCH SNA CLA /SKIP IF /1 SET JMP IM2 /JUMP IF /2 SET TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 JMP IMCOMMON /CONTINUE THERE IM2, TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 CIA /SUBTRACT PART 1 VALUE TAD I [EQUWRD] /FROM EQUALS PARAMETER IMCOMMO,CMA /INVERT IT DCA DANGCNT /STORE AS DANGER COUNT JMP GEOFXIT /EXIT THERE DOFLNAM,CDF PRGFLD /BACK TO OUR FIELD NL7777 /SETUP THE DCA INITFLAG /INPUT FILE INITIALIZATION JMS I (SCNFILE) /SCAN OFF "(FILE" / HAVING FOUND THE (FILE ) COMMAND, WE MUST FIND THE FILENAME. / ZERO OUT THE FILENAME AREA. TAD (-10) /SETUP THE DCA CHRCNT /CLEAR COUNTER TAD (ONAME-1) /SETUP THE DCA XR1 /POINTER JMS I (CLRNAME) /CLEAR THE NAME BUFFER / SETUP FOR SCANNING THE NAME PORTION. TAD (-6) /SETUP THE DCA CHRCNT /SCAN COUNT TAD (ONAME-1) /SETUP THE DCA XR1 /POINTER FNCAGN, JMS I (GETAN) /GET A CHARACTER JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD DCA I XR1 /STASH THE CHARACTER ISZ CHRCNT /DONE ALL YET? JMP FNCAGN /NO, KEEP GOING / THROW AWAY EXTRA NAME CHARACTERS. TOSSNAM,JMS I (GETAN) /GET A CHARACTER JMP GOTSEPARATOR /GOT "."; GOTO NEXT FIELD JMP TOSSNAME /KEEP GOING / COMES HERE AFTER "." FOUND. GOTSEPA,JMS I (CLRNAME) /CLEAR OUT THE REMAINING NAME FIELD NL7776 /SETUP THE DCA CHRCNT /SCAN COUNT EXCAGN, JMS I (GETAN) /GET A CHARACTER JMP I [CHARERROR] /GOT "."; COMPLAIN DCA I XR1 /STASH THE CHARACTER ISZ CHRCNT /DONE ENOUGH YET? JMP EXCAGN /NO, KEEP GOING / TOSS ANY EXTRA EXTENSION CHARACTERS. TOSSEXT,JMS I (GETAN) /GET A CHARACTER JMP I [CHARERROR] /GOT "."; COMPLAIN JMP TOSSEXTENSION /KEEP GOING / COMES HERE WHEN TRAILING ")" IS FOUND. GOTRPAR,JMS I (CLRNAME) /CLEAR ANY REMAINING EXTENSION CHARACTERS TAD I (ONAME) /GET THE FIRST CHARACTER SNA CLA /SKIP IF SOMETHING THERE JMP I [CHARERROR] /COMPLAIN IF NONE THERE TAD (ONAME-1) /SETUP POINTER DCA XR1 /TO NAME CHARACTERS TAD (FNAME-1) /SETUP POINTER DCA XR2 /TO PACKED NAME AREA TAD (-4) /SETUP THE DCA CHRCNT /MOVE COUNT CHRLOOP,TAD I XR1 /GET FIRST CHARACTER CLL RTL;RTL;RTL /MOVE UP TAD I XR1 /ADD ON SECOND CHARACTER DCA I XR2 /STORE THE PAIR ISZ CHRCNT /DONE YET? JMP CHRLOOP /NO, KEEP GOING JMP I GEOFILE /YES, RETURN PAGE SCNFILE,.-. /SCAN "(FILE" ROUTINE MATAGN, JMS GETNSPC /GET A CHARACTER TAD (-"(!200) /COMPARE TO "(" SZA CLA /SKIP IF IT MATCHES JMP MATAGN /JUMP IF NOT JMS GETNSPC /GET NEXT CHARACTER TAD (-"F!300) /COMPARE TO "F" SZA CLA /SKIP IF IT MATCHES JMP MATAGN /JUMP IF NOT JMS GETNSPC /GET NEXT CHARACTER TAD (-"I!300) /COMPARE TO "I" SZA CLA /SKIP IF IT MATCHES JMP MATAGN /JUMP IF NOT JMS GETNSPC /GET NEXT CHARACTER TAD (-"L!300) /COMPARE TO "L" SZA CLA /SKIP IF IT MATCHES JMP MATAGN /JUMP IF NOT JMS GETNSPC /GET NEXT CHARACTER TAD (-"E!300) /COMPARE TO "E" SZA CLA /SKIP IF IT MATCHES JMP MATAGN /JUMP IF NOT JMP I SCNFILE /RETURN CLRNAME,.-. /NAME FIELD CLEARING ROUTINE TAD CHRCNT /GET CHARACTER COUNTER SNA CLA /SKIP IF ANY TO CLEAR JMP I CLRNAME /ELSE JUST RETURN DCA I XR1 /CLEAR A NAME WORD ISZ CHRCNT /COUNT IT JMP .-2 /KEEP GOING JMP I CLRNAME /RETURN GETNSPC,.-. /GET NON-<SPACE> CHARACTER GETNAGN,JMS GETCHAR /GET A CHARACTER TAD (-" !200) /COMPARE TO <SPACE> SNA CLA /SKIP IF OTHER JMP GETNAGN /JUMP IF IT MATCHES TAD PUTEMP /GET THE CHARACTER BACK JMP I GETNSPC /RETURN GETCHAR,.-. /GET A CHARACTER ROUTINE CLA /CLEAN UP TAD INITFLAG /GET INITIALIZE FLAG JMS I [GETBYTE] /GET A CHARACTER JMP I (NIOERROR) /COMPLAIN IF AN ERROR JMP I [CHARERROR] /COMPLAIN IF <EOF> REACHED TAD [-140] /COMPARE TO LOWER-CASE LIMIT SPA /SKIP IF LOWER-CASE TAD [40] /RESTORE ORIGINAL IF UPPER-CASE AND (77) /JUST SIX-BIT DCA PUTEMP /SAVE IN CASE WE NEED IT DCA INITFLAG /CLEAR INITIALIZE FLAG TAD PUTEMP /GET IT BACK JMP I GETCHAR /RETURN GETAN, .-. /GET ALPHANUMERIC ROUTINE JMS GETNSPC /GET A NON-<SPACE> CHARACTER TAD (-".!200) /COMPARE TO "." SNA /SKIP IF OTHER JMP I GETAN /TAKE FIRST RETURN IF IT MATCHES TAD (-")+".) /COMPARE TO ")" SNA /SKIP IF OTHER JMP I (GOTRPAREN) /TAKE DEDICATED RETURN IF IT MATCHES TAD (-":+")) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD (":-"0) /ADD ON RANGE SZL CLA /SKIP IF NOT NUMERIC JMP GETANOK /JUMP IF NUMERIC TAD PUTEMP /GET THE CHARACTER BACK TAD (-"[!300) /SUBTRACT UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD ("[-"A) /ADD ON RANGE SNL CLA /SKIP IF ALPHABETIC JMP I [CHARERROR] /ELSE COMPLAIN GETANOK,TAD PUTEMP /GET GOOD ALPHANUMERIC CHARACTER ISZ GETAN /BUMP TO SKIP RETURN JMP I GETAN /RETURN ONAME, ZBLOCK 10 /OUTPUT NAME FIELD FENTER, .-. /FILE ENTER ROUTINE TAD (FNAME) /POINT TO DCA ENTAR1 /STORED FILENAME DCA ENTAR2 /CLEAR SECOND ARGUMENT TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE ENTER /ENTER TENTATIVE FILENAME ENTAR1, .-. /WILL POINT TO FILENAME ENTAR2, .-. /WILL BE ZERO JMP I (ENTERR) /ENTER ERROR TAD ENTAR2 /GET RETURNED EMPTY LENGTH IAC /ADD 2-1 FOR OS/278 CRAZINESS DCA DANGCNT /STORE AS DANGER COUNT TAD ENTAR1 /GET RETURNED FIRST RECORD DCA OUTRECORD /SETUP OUTPUT RECORD JMP I FENTER /RETURN PAGE $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12enb.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 | / OS/8 BOO ENCODING PROGRAM / LAST EDIT: 01-OCT-1991 15:00:00 CJL / MAY BE ASSEMBLED WITH '/F' SWITCH SET. / PROGRAM TO ENCODE ANY TYPE OF OS/8 FILE INTO "PRINTABLE" ASCII (".BOO") / FORMAT. THIS IS A COMMON DISTRIBUTION FORMAT FOR MANY COLUMBIA KERMIT FILES / AND IS AN ALTERNATIVE TO ENCODE FORMAT FOR PDP-8 AND DECMATE USERS. / DISTRIBUTED BY CUCCA AS "K12ENB.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. / WRITTEN BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / USAGE: / .RUN DEV ENBOO INVOKE PROGRAM / *OUTPUT<INPUT PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <CR>) / *OUTPUT<INPUT$ PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <ESC>) / . PROGRAM EXITS NORMALLY / INPUT FILE ASSUMES .SV EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN <ESC> / CHARACTER. / THIS PROGRAM SUPPORTS THE .BOO FORMAT FOR FILE ENCODING WHICH IS POPULAR IN / OTHER SYSTEMS. THIS VERSION IMPLEMENTS THE FILE LENGTH PROTECTION SCHEME / DEVELOPED BY CHARLES LASNER TO ENSURE PRECISE FILE LENGTH. / MANY .BOO PROGRAMS HAVE PROBLEMS MAINTAINING PRECISE FILE LENGTH. THE ACTUAL / LENGTH MAY BE IMPRECISELY STATED BY ONE OR TWO BYTES DUE TO AN INHERENT / WEAKNESS IN THE ORIGINAL .BOO ENCODING FORMAT DESIGN. THIS IMPLEMENTATION / APPENDS CORRECTION BYTES AS NECESSARY TO THE BASIC .BOO FILE TO ENSURE PROPER / DECODING BY PROGRAMS COMPATIBLE WITH THIS EXTENSION. / FILES CREATED BY THIS PROGRAM MAY BE USED WITH EARLIER .BOO DECODERS; THE / RESULTANT FILES MAY INACCURATELY RECREATE THE ORIGINAL FILES BY AS MUCH AS TWO / EXTRANEOUS TRAILING BYTES. THERE WILL BE NO PROBLEMS (BEYOND THE LENGTH / ANOMALY) AS LONG AS THE DECODERS IMPLEMENT ZERO-LENGTH COMPRESSION FIELDS AS / NO OPERATION. IT IS POSSIBLE THAT CERTAIN DECODERS COULD ERRONEOUSLY APPEND / MASSIVE QUANTITIES OF ZEROES ONTO THE END OF THE DECODED FILES, BUT THIS / ACTION WOULD CERTAINLY BE CAUSED BY DEFECTIVE PROGRAM CODE WITHIN THE DECODER. / (ALTHOUGH NOT LIKELY SEEN BEFORE ENCOUNTERING FILES WITH LENGTH CORRECTION / BYTES, THIS WOULD BE A LATENT BUG IN THESE DECODING PROGRAMS. UPDATED / VERSIONS SHOULD BE SOUGHT IF THIS PROBLEM SURFACES.) / ERROR MESSAGES. / ERROR MESSAGES ARE ONE OF TWO VARIETIES: COMMAND DECODER MESSAGES AND USER / (PROGRAM-SIGNALLED) MESSAGES. / COMMAND DECODER MESSAGES ARE NON-FATAL AND MERELY REQUIRE RETYPING THE / COMMAND. ATTEMPTING TO USE MORE THAN ONE OUTPUT FILE WILL YIELD THE COMMAND / DECODER MESSAGE "TOO MANY FILES" AND CAUSE A REPEAT OF THE COMMAND DECODER / PROMPT REQUIRING USER INPUT. THE USER IS DIRECTED TO OTHER DOCUMENTATION OF / THE "SPECIAL" MODE OF THE COMMAND DECODER, AS THAT IS THE ONLY MODE USED BY / THIS UTILITY PROGRAM. / ANY USER MESSAGE PRINTED IS A FATAL ERROR MESSAGE CAUSED BY A PROBLEM BEYOND / THE SCOPE OF THE COMMAND DECODER. ALL USER MESSAGES ARE THE STANDARD OS/8 / "USER" ERROR MESSAGES OF THE FORM: "USER ERROR X AT AAAAA", WHERE X IS THE / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. / THE FOLLOWING USER ERRORS ARE DEFINED: / ERROR NUMBER PROBABLE CAUSE / 0 NO OUTPUT FILE. / 1 INPUT FILE ERROR (CAN'T FIND INPUT FILE) OR NO INPUT / FILE SPECIFIED OR TOO MANY INPUT FILES SPECIFIED. / 2 ILLEGAL OUTPUT FILE NAME (WILD CARDS NOT ALLOWED). / 3 NO OUTPUT FILE NAME (DEVICE ONLY IS NOT ALLOWED). / 4 ERROR WHILE FETCHING FILE HANDLER. / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE ENCODING FILE DATA. / 9 OUTPUT ERROR WHILE ENCODING FILE DATA. / ASSEMBLY INSTRUCTIONS. / IT IS ASSUMED THE SOURCE FILE K12ENB.PAL HAS BEEN MOVED AND RENAMED TO / DSK:ENBOO.PA. / .PAL ENBOO<ENBOO/E/F ASSEMBLE SOURCE PROGRAM / .LOAD ENBOO LOAD THE BINARY FILE / .SAVE DEV ENBOO=2001 SAVE THE CORE-IMAGE FILE / DEFINITIONS. CLOSE= 4 /CLOSE OUTPUT FILE DECODE= 5 /CALL COMMAND DECODER ENTER= 3 /ENTER TENTATIVE FILE FETCH= 1 /FETCH HANDLER IHNDBUF=7200 /INPUT HANDLER BUFFER INBUFFE=6200 /INPUT BUFFER INFILE= 7605 /INPUT FILE INFORMATION HERE LOOKUP= 2 /LOOKUP INPUT FILE NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 OHNDBUF=6600 /OUTPUT HANDLER BUFFER OUTBUFF=5600 /OUTPUT BUFFER OUTFILE=7600 /OUTPUT FILE INFORMATION HERE PRGFLD= 00 /PROGRAM FIELD RESET= 13 /RESET SYSTEM TABLES SBOOT= 7600 /MONITOR EXIT TBLFLD= 10 /COMMAND DECODER TABLE FIELD TERMWRD=7642 /TERMINATOR WORD USERROR=7 /USER SIGNALLED ERROR USR= 0200 /USR ENTRY POINT USRENT= 7700 /USR ENTRY POINT WHEN NON-RESIDENT USRFLD= 10 /USR FIELD USRIN= 10 /LOCK USR IN CORE WIDTH= 114 /LINES MUST BE 76 WIDE OR LESS WRITE= 4000 /I/O WRITE BIT *0 /START AT THE BEGINNING *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /OUTPUT BUFFER POINTER CHAR, .-. /LATEST INPUT BYTE CHARPTR,.-. /OUTPUT BYTE POINTER CHARS, ZBLOCK 3 /OUTPUT BYTES HERE CMPCNT, .-. /MATCH COUNT FOR COMPRESSION COLUMN, .-. /LATEST COLUMN DANGCNT,.-. /DANGER COUNT IDNUMBE,.-. /INPUT DEVICE NUMBER IFNAME, ZBLOCK 4 /INPUT FILENAME INLEN, .-. /INPUT FILE LENGTH INPTR, .-. /INPUT BUFFER POINTER INPUT, .-. /INPUT HANDLER POINTER INRECOR,.-. /INPUT RECORD FNAME, ZBLOCK 4 /OUTPUT FILENAME LATEST, .-. /LATEST OUTPUT CHARACTER ODNUMBE,.-. /OUTPUT DEVICE NUMBER OUTPUT, .-. /OUTPUT HANDLER POINTER OUTRECO,.-. /OUTPUT RECORD PIFTEMP,.-. /PRINT INPUT FILENAME TEMPORARY TEMPTR, .-. /TEMPORARY POINTER THIRD, .-. /THIRD INPUT BYTE UNPACKING TEMPORARY PAGE /START AT THE USUAL PLACE BEGIN, NOP /IN CASE WE'RE CHAINED TO CLA /CLEAN UP START, CIF USRFLD /GOTO USR FIELD JMS I (USRENT) /CALL USR ROUTINE USRIN /GET IT LOCKED IN CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE DECODE /WANT COMMAND DECODER "*^100 /USING SPECIAL MODE CDF TBLFLD /GOTO TABLE FIELD TAD I (TERMWRD) /GET TERMINATOR WORD SPA CLA /SKIP IF <CR> TERMINATED THE LINE DCA EXITZAP /ELSE CAUSE EXIT LATER TAD I (OUTFILE) /GET OUTPUT FILE DEVICE WORD SNA /SKIP IF FIRST OUTPUT FILE PRESENT JMP TSTMORE /JUMP IF NOT THERE AND [17] /JUST DEVICE BITS DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SNA /SKIP IF PRESENT JMP INERR /JUMP IF NOT AND [17] /JUST DEVICE BITS DCA IDNUMBER /SAVE INPUT DEVICE NUMBER TAD I (INFILE+5) /GET SECOND INPUT FILE DEVICE WORD SZA CLA /SKIP IF ONLY ONE INPUT FILE JMP INERR /ELSE COMPLAIN JMS I (MIFNAME) /MOVE INPUT FILENAME WITH ADJUSTED EXTENSION TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD SNA CLA /SKIP IF NAME PRESENT JMP NONAME /JUMP IF DEVICE ONLY JMS I (MOFNAME) /MOVE OUTPUT FILENAME CDF PRGFLD /BACK TO OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE RESET /RESET SYSTEM TABLES TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT DCA OHPTR /STORE IN-LINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD OHPTR /GET RETURNED ADDRESS DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT DCA IHPTR /STORE IN-LINE TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD IHPTR /GET RETURNED ADDRESS DCA INPUT /STORE AS INPUT HANDLER ADDRESS JMS I (GEIFILE) /GO LOOKUP INPUT FILE TAD (FNAME) /POINT TO DCA ENTAR1 /STORED FILENAME DCA ENTAR2 /CLEAR SECOND ARGUMENT TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE ENTER /ENTER TENTATIVE FILENAME ENTAR1, .-. /WILL POINT TO FILENAME ENTAR2, .-. /WILL BE ZERO JMP ENTERR /ENTER ERROR TAD ENTAR1 /GET RETURNED FIRST RECORD DCA OUTRECORD /STORE IT TAD ENTAR2 /GET RETURNED EMPTY LENGTH IAC /ADD 2-1 FOR OS/278 CRAZINESS DCA DANGCNT /STORE AS DANGER COUNT JMS I (ENCODIT) /GO DO THE ACTUAL ENCODING JMP PROCERR /ERROR WHILE ENCODING TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE CLOSE /CLOSE OUTPUT FILE FNAME /POINTER TO FILENAME OUTCNT, .-. /WILL BE ACTUAL COUNT JMP CLSERR /CLOSE ERROR EXITZAP,JMP START /**** <ESC> TERMINATION **** 0000 JMP I (SBOOT) /EXIT TO MONITOR / OUTPUT FILE ERROR WHILE PROCESSING. ENCERRO,TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE PROCESSING INPUT FILE. PROCERR,NL0002 /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. CLSERR, NL0001 /SET INCREMENT SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. SIZERR, CLA /CLEAN UP TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ENTER ERROR. ENTERR, NL0002 /SET INCREMENT SKP /DON'T USE NEXT / HANDLER FETCH ERROR. FERROR, NL0001 /SET INCREMENT / NO OUTPUT FILENAME ERROR. NONAME, IAC /SET INCREMENT / ILLEGAL OUTPUT FILE NAME ERROR. BADNAME,IAC /SET INCREMENT / INPUT FILESPEC ERROR. INERR, IAC /SET INCREMENT / OUTPUT FILESPEC ERROR. OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER CDF PRGFLD /ENSURE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE USERROR /USER ERROR ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER / COMES HERE TO TEST FOR NULL LINE. TSTMORE,TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SZA CLA /SKIP NO INPUT OR OUTPUT GIVEN JMP OUTERR /ELSE COMPLAIN CDF PRGFLD /BACK TO OUR FIELD JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST PAGE ENCODIT,.-. /ENCODING ROUTINE NL7777 /SETUP INITIALIZE VALUE JMS I [DOBYTE] /INITIALIZE OUTPUT ROUTINE JMS I (PIFNAME) /OUTPUT THE INPUT FILENAME JMS I (PCRLF) /OUTPUT <CR>/<LF> AND CLEAR COLUMN COUNTER DCA CMPCNT /CLEAR COMPRESSION TAD [CHARS] /SETUP THE DCA CHARPTR /OUTPUT POINTER NL7777 /MAKE IT INITIALIZE LOOP, JMS I (GETBYTE) /GET LATEST BYTE JMP ENDCHECK /AREN'T ANY MORE, FINISH THE FILE / TEST IF ALREADY WITHIN A DEVELOPING COMPRESSION FIELD. TAD CMPCNT /GET COMPRESSION COUNT SNA CLA /SKIP IF COMPRESSION IN PROGRESS JMP NOCOMP /JUMP IF NOT / CHECK IF LATEST INPUT BYTE IS ZERO. TAD CHAR /GET LATEST SZA CLA /SKIP IF SO JMP ENDCOMPRESS /JUMP IF NOT SETCOMP,ISZ CMPCNT /BUMP COMPRESSION COUNT TAD CMPCNT /GET LATEST COUNT TAD (-116) /COMPARE TO MAXIMUM ALLOWED SNA CLA /SKIP IF NOT JMS I (COMPRESSOUT) /OUTPUT MAXIMUM COMPRESSION AND CANCEL COMPRESSION JMP LOOP /GO GET ANOTHER ONE / IF LATEST IS NON-ZERO, THEN COMPLETE EXISTING COMPRESSION FIELD. ENDCOMP,NL7777 /-1 TAD CMPCNT /COMPARE TO COMPRESSION COUNT SZA CLA /SKIP IF TRIVIAL CASE JMP OUTCOMPRESS /JUMP IF NOT / CANCEL TRIVIAL CASE OF ONE BYTE COMPRESSION. DCA CMPCNT /CLEAR COMPRESSION MODE DCA CHARS /FIRST BYTE WAS ZERO TAD (CHARS+1) /SETUP OUTPUT POINTER TO DCA CHARPTR /STORE INTO SECOND BYTE JMP BYTEINSERT /CONTINUE THERE / OUTPUT LATEST COMPRESSION AND PROCESS NEW NON-ZERO BYTE. OUTCOMP,JMS I (COMPRESSOUT) /OUTPUT COMPRESSION FIELD AND CANCEL COMPRESSION / COMES HERE IF NOT WITHIN A COMPRESSION REGION. NOCOMP, TAD CHARPTR /GET POINTER TAD (-CHARS) /CHECK IF AT BEGINNING SZA CLA /SKIP IF BUFFER EMPTY JMP BYTEINSERT /JUMP IF NOT / IF AT BEGINNING OF THREE BYTES, TEST IF LATEST STARTS A COMPRESSION FIELD. TAD CHAR /GET LATEST BYTE SNA CLA /SKIP IF NOT ZERO JMP SETCOMPRESSION /JUMP IF SO BYTEINS,TAD CHAR /GET LATEST BYTE DCA I CHARPTR /STORE IT ISZ CHARPTR /BUMP TO NEXT TAD CHARPTR /GET THE UPDATED POINTER TAD (-CHARS-2-1) /COMPARE TO UPPER LIMIT SNA CLA /SKIP IF LESS THAN THREE PRESENT JMS I (OUT3) /ELSE OUTPUT THE THREE BYTES AND RESET THE BUFFER JMP LOOP /GO GET ANOTHER ONE / COMES HERE AT END OF INPUT. ENDCHEC,NL7776 /-2 TAD CMPCNT /COMPARE TO COMPRESSION COUNT SMA /SKIP IF AT TRIVIAL CASE OR NO COMPRESSION CURRENTLY JMP ENDFCOMPRESS /FINISH WITH A COMPRESSION FIELD IAC /CHECK FURTHER SZA CLA /SKIP IF TRIVIAL COMPRESSION AT END JMP NORMEND /JUMP IF NOT WITHIN COMPRESSION / THE TRIVIAL CASE CONVERTS TO AN INCOMPLETE OUTPUT, COMPLETE WITH CORRECTION / BYTES TO INDICATE THE SHORT FIELD. DCA CHARS /MOVE ZERO BYTE TO FIRST POSITION NORM1, DCA CHARS+1 /CLEAR SECOND POSITION DCA CHARS+2 /CLEAR THIRD POSITION JMS I (OUT3) /OUTPUT THE THREE BYTES DCA CMPCNT /CLEAR COMPRESSION COUNT JMS I (COMPRESSOUT) /OUTPUT NULL COMPRESSION FIELD TO CANCEL THIRD BYTE /NEXT WILL CANCEL SECOND BYTE / COMES HERE IF FILE ENDS ON A COMPRESSION FIELD. ENDFCOM,JMS I (COMPRESSOUT) /OUTPUT COMPRESSION FIELD AND CANCEL COMPRESSION JMP CLOSFILE /FINISH IT THERE / COMES HERE IF FILE ENDS IN SOME FORM OF DATA FIELD. NORMEND,TAD CHARPTR /GET CHARACTER POINTER TAD (-CHARS-2) /COMPARE TO TWO PRESENT VALUE SNA /SKIP IF NOT THE CASE JMP NORM2 /JUMP IF SO IAC /BUMP TO ONE PRESENT VALUE SNA CLA /SKIP IF NOT THE CASE JMP NORM1 /JUMP IF SO CLOSFIL,TAD COLUMN /GET CURRENT COLUMN COUNTER SZA CLA /SKIP IF AT BEGINNING ALREADY JMS I (PCRLF) /ELSE OUTPUT <CR>/<LF> NOW TAD ("Z&37) /GET <^Z> CLOSLUP,JMS I [DOBYTE] /OUTPUT A BYTE (^Z OR NULL) TAD BUFPTR /GET THE OUTPUT BUFFER POINTER TAD (-OUTBUFFER) /COMPARE TO RESET VALUE SZA CLA /SKIP IF IT MATCHES JMP CLOSLUP /ELSE KEEP GOING ISZ ENCODIT /NO ERRORS JMP I ENCODIT /RETURN / COMES HERE IF FILE ENDS WITH ONLY TWO DATA CHARACTERS. NORM2, DCA CHARS+2 /CLEAR THIRD CHARACTER JMS I (OUT3) /OUTPUT THE THREE BYTES JMP ENDFCOMPRESS /FINISH IT THERE PAGE / GET AN INPUT BYTE ROUTINE. GETBYTE,.-. /GET A BYTE ROUTINE SNA CLA /INITIALIZING? JMP I PUTC /NO, GO GET NEXT BYTE TAD INRECORD /GET INPUT FILE STARTING RECORD DCA GETRECORD /STORE IN-LINE GETNEWR,JMS I INPUT /CALL INPUT HANDLER 2^100 /READ TWO PAGES PINBUFF,INBUFFER /INTO INPUT BUFFER GETRECO,.-. /WILL BE LATEST INPUT FILE RECORD JMP I (PROCERR) /INPUT READ ERROR, GO COMPLAIN TAD PINBUFFER/(INBUFFER) /SETUP THE DCA INPTR /BUFFER POINTER GETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE TAD THIRD /GET THIRD BYTE JMS PUTC /SEND IT BACK TAD INPTR /GET THE POINTER TAD (-2^200-INBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP GETLOOP /KEEP GOING ISZ GETRECORD /BUMP TO NEXT RECORD NOP /JUST IN CASE ISZ INLEN /DONE ALL INPUT RECORDS? JMP GETNEWRECORD /NO, KEEP GOING / AT END-OF-FILE, SO JUST TAKE IMMEDIATE RETURN. JMP I GETBYTE /RETURN TO CALLER PUTONE, .-. /SEND BACK A BYTE ROUTINE TAD I INPTR /GET LATEST WORD AND [7400] /JUST THIRD-BYTE NYBBLE CLL RAL /MOVE UP TAD THIRD /GET OLD NYBBLE (IF ANY) RTL;RTL /MOVE UP NYBBLE BITS DCA THIRD /SAVE FOR NEXT TIME TAD I INPTR /GET LATEST WORD AGAIN JMS PUTC /SEND BACK CURRENT BYTE ISZ INPTR /BUMP TO NEXT WORD JMP I PUTONE /RETURN PUTC, .-. /SEND BACK LATEST BYTE ROUTINE AND (377) /KEEP ONLY GOOD BITS DCA CHAR /SAVE AS LATEST BYTE ISZ GETBYTE /BUMP PAST <EOF> RETURN JMP I GETBYTE /RETURN TO MAIN CALLER / COMPRESSION FIELD OUTPUT ROUTINE. COMPRES,.-. /COMPRESSION OUTPUT ROUTINE CLA /CLEAN UP TAD COLUMN /GET CURRENT COLUMN COUNTER TAD (-WIDTH+2) /COMPARE TO UPPER LIMIT SMA SZA CLA /SKIP IF NOT ABOVE LIMIT JMS PCRLF /ELSE DO <CR>/<LF> FIRST TAD (176) /GET TILDE VALUE JMS I [DOBYTE] /OUTPUT IT TAD CMPCNT /GET COMPRESSION COUNT JMS PDIGIT /OUTPUT IT DCA CMPCNT /CLEAR COMPRESSION JMP I COMPRESSOUT /RETURN / DATA FIELD OUTPUT ROUTINE. OUT3, .-. /OUTPUT THREE BYTES ROUTINE TAD COLUMN /GET CURRENT COLUMN COUNTER TAD (-WIDTH+4) /COMPARE TO UPPER LIMIT SMA SZA CLA /SKIP IF NOT ABOVE LIMIT JMS PCRLF /ELSE DO <CR>/<LF> FIRST TAD CHARS /GET FIRST BYTE RTR /WANT HIGH SIX BITS FIRST JMS PDIGIT /OUTPUT THEM TAD CHARS /GET IT AGAIN AND [3] /JUST TWO LOWEST BITS CLL RTR;RTR;RAR /MOVE UP TAD CHARS+1 /GET SECOND BYTE RTR;RTR /MOVE DOWN JMS PDIGIT /OUTPUT THEM TAD CHARS+2 /GET THIRD BYTE AND (300) /JUST TWO HIGHEST BITS NEEDED CLL RTL;RTL;RAL /MOVE INTO POSITION TAD CHARS+1 /GET SECOND BYTE RTL /MOVE UP AND [77] /JUST DESIRED BITS JMS PDIGIT /OUTPUT THEM TAD CHARS+2 /GET THIRD BYTE AND [77] /JUST SIX BITS JMS PDIGIT /OUTPUT THEM TAD [CHARS] /RESET THE DCA CHARPTR /OUTPUT POINTER JMP I OUT3 /RETURN PDIGIT, .-. /PRINT AS A DIGIT INTO FILE ROUTINE AND [177] /REMOVE JUNK BITS TAD ("0&177) /TURN PASSED VALUE INTO A DIGIT JMS I [DOBYTE] /OUTPUT IT JMP I PDIGIT /RETURN PCRLF, .-. /PRINT <CR>/<LF> INTO FILE ROUTINE TAD ("M&37) /GET A <CR> JMS I [DOBYTE] /OUTPUT IT TAD ("J&37) /GET A <LF> JMS I [DOBYTE] /OUTPUT IT DCA COLUMN /CLEAR COLUMN COUNTER JMP I PCRLF /RETURN PAGE PUTBYTE,.-. /OUTPUT A BYTE ROUTINE SPA /ARE WE INITIALIZING? JMP PUTINITIALIZE /YES AND [177] /JUST IN CASE DCA LATEST /SAVE LATEST CHARACTER TAD LATEST /GET LATEST CHARACTER JMP I PUTNEXT /GO WHERE YOU SHOULD GO PUTNEXT,.-. /EXIT ROUTINE ISZ PUTBYTE /BUMP TO GOOD RETURN PUTERRO,CLA CLL /CLEAN UP JMP I PUTBYTE /RETURN TO MAIN CALLER PUTINIT,CLA /CLEAN UP TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH PUTNEWR,TAD (OUTBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER PUTLOOP,JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT TAD BUFPTR /GET POINTER VALUE DCA TEMPTR /SAVE FOR LATER ISZ BUFPTR /BUMP TO NEXT JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT JMS PUTNEXT /GET A CHARACTER RTL;RTL /MOVE UP AND [7400] /ISOLATE HIGH NYBBLE TAD I TEMPTR /ADD ON FIRST BYTE DCA I TEMPTR /STORE COMPOSITE TAD LATEST /GET LATEST CHARACTER RTR;RTR;RAR /MOVE UP AND AND [7400] /ISOLATE LOW NYBBLE TAD I BUFPTR /ADD ON SECOND BYTE DCA I BUFPTR /STORE COMPOSITE ISZ BUFPTR /BUMP TO NEXT TAD BUFPTR /GET LATEST POINTER VALUE TAD (-2^200-OUTBUFF)/COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING ISZ DANGCNT /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I (SIZERR) /JUMP IF SO JMS I OUTPUT /CALL I/O HANDLER 2^100+WRITE /WRITE SOME PAGES FROM OUTPUT BUFFER OUTBUFFER /BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER JMP PUTERROR /OUTPUT ERROR! ISZ I (OUTCNT) /BUMP ACTUAL LENGTH ISZ PUTRECORD /BUMP TO NEXT RECORD JMP PUTNEWRECORD /KEEP GOING / INPUT FILENAME MOVE ROUTINE; USES DEFAULT EXTENSION IF NONE PROVIDED BY USER. MIFNAME,.-. /MOVE INPUT FILENAME ROUTINE TAD I (INFILE+1) /GET FIRST INPUT FILENAME WORD DCA IFNAME /STASH IT TAD I (INFILE+2) /GET SECOND INPUT FILENAME WORD DCA IFNAME+1 /STASH IT TAD I (INFILE+3) /GET THIRD INPUT FILENAME WORD DCA IFNAME+2 /STASH IT TAD I [INFILE+4] /GET FOURTH INPUT FILENAME WORD SNA /SKIP IF SOMETHING THERE TAD ("S^100+"V-300) /ELSE USE DEFAULT EXTENSION VALUE DCA IFNAME+3 /STASH IT EITHER WAY JMP I MIFNAME /RETURN DOBYTE, .-. /OUTPUT A BYTE ROUTINE JMS PUTBYTE /OUTPUT PASSED VALUE JMP I (ENCERROR) /COULDN'T DO IT ISZ COLUMN /BUMP COLUMN COUNTER JMP I DOBYTE /RETURN PAGE / INPUT FILE ROUTINE. GEIFILE,.-. /GET INPUT FILE ROUTINE JMS LUKUP /TRY TO LOOKUP THE FILE SKP /SKIP IF IT WORKED JMP TRYNULL /TRY NULL EXTENSION VERSION NULLOK, TAD LARG1 /GET FIRST INPUT RECORD DCA INRECORD /STASH IT TAD LARG2 /GET NEGATED LENGTH DCA INLEN /STASH IT JMP I GEIFILE /RETURN / COMES HERE IF LOOKUP FAILED. TRYNULL,CDF TBLFLD /GOTO TABLE FIELD TAD I [INFILE+4] /GET ORIGINAL FILENAME'S EXTENSION CDF PRGFLD /BACK TO OUR FIELD SZA CLA /SKIP IF IT WAS NULL ORIGINALLY JMP I (INERR) /ELSE COMPLAIN OF EXPLICIT LOOKUP FAILURE DCA IFNAME+3 /NOW TRY NULL VERSION INSTEAD OF DEFAULT VERSION JMS LUKUP /TRY TO LOOK IT UP AGAIN JMP NULLOK /THAT WORKED! JMP I (INERR) /COMPLAIN OF LOOKUP FAILURE LUKUP, .-. /LOW-LEVEL LOOKUP ROUTINE TAD (IFNAME) /GET OUR FILENAME POINTER DCA LARG1 /STORE IN-LINE DCA LARG2 /CLEAR SECOND ARGUMENT TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE LOOKUP /WANT LOOKUP FUNCTION LARG1, .-. /WILL BE POINTER TO OUR FILENAME LARG2, .-. /WILL RETURN FILE LENGTH (HOPEFULLY) ISZ LUKUP /LOOKUP FAILED, SO BUMP RETURN ADDRESS JMP I LUKUP /RETURN EITHER WAY / INPUT FILENAME PRINT ROUTINE. PIFNAME,.-. /PRINT INPUT FILENAME ROUTINE TAD IFNAME /GET FIRST PAIR JMS PIF2 /PRINT IT TAD IFNAME+1 /GET SECOND PAIR JMS PIF2 /PRINT IT TAD IFNAME+2 /GET THIRD PAIR JMS PIF2 /PRINT IT TAD (".&177) /GET SEPARATOR JMS PIFOUT /PRINT IT TAD IFNAME+3 /GET FOURTH PAIR JMS PIF2 /PRINT IT JMP I PIFNAME /RETURN PIF2, .-. /PRINT A PAIR ROUTINE DCA PIFTEMP /SAVE PASSED PAIR TAD PIFTEMP /GET IT BACK RTR;RTR;RTR /MOVE DOWN JMS PIFOUT /PRINT HIGH-ORDER FIRST TAD PIFTEMP /GET IT AGAIN JMS PIFOUT /PRINT LOW-ORDER JMP I PIF2 /RETURN PIFOUT, .-. /FILENAME CHARACTER OUTPUT ROUTINE AND [77] /JUST SIXBIT SNA /SKIP IF SOMETHING THERE JMP I PIFOUT /ELSE IGNORE IT TAD [40] /INVERT IT AND [77] /REMOVE EXCESS TAD [40] /INVERT IT AGAIN JMS I [DOBYTE] /OUTPUT IT JMP I PIFOUT /RETURN MOFNAME,.-. /MOVE OUTPUT FILENAME ROUTINE TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME /STASH IT TAD I (OUTFILE+2) /GET SECOND OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+1 /STASH IT TAD I (OUTFILE+3) /GET THIRD OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+2 /STASH IT TAD I (OUTFILE+4) /GET FOURTH OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+3 /STASH IT JMP I MOFNAME /RETURN / OUTPUT NAME CHECK ROUTINE. CHKNAME,.-. /OUTPUT NAME CHECK ROUTINE DCA LUKUP /SAVE PASSED VALUE TAD LUKUP /GET IT BACK RTR;RTR;RTR /MOVE DOWN JMS CHKIT /CHECK HIGH-ORDER AND GET IT BACK JMS CHKIT /CHECK LOW-ORDER AND GET IT BACK JMP I CHKNAME /RETURN CHKIT, .-. /ONE CHARACTER CHECK ROUTINE AND [77] /JUST SIX BITS TAD (-"?!200) /COMPARE TO "?" SZA /SKIP IF ALREADY BAD TAD (-"*+"?) /ELSE COMPARE TO "*" SNA CLA /SKIP IF NEITHER BAD CASE JMP I (BADNAME) /COMPLAIN OF WILD CHARACTER TAD LUKUP /GET THE PAIR BACK FOR NEXT TIME JMP I CHKIT /RETURN PAGE $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12enc.doc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: ENCODE/DECODE format description The latest KERMIT-12 binary files are encoded in a specialized format. This document will describe the internal encoding and related subjects. OS/8 file considerations. All OS/8 files are contiguous multiples of PDP-8 double-page sized logical records. These are sometimes known as blocks, but are more accurately known as records. (The term block is associated with various hardware descriptions, and means different things to different people, such as DECtape blocks or RK05 blocks, where the first means a physical block which just happens to be 1/2 the size of the OS/8 logical record, and the second means a physical sector which is the same size as the OS/8 logical record, but only if the drive is attached to an RK8E. We will therefore avoid this term!) Since PDP-8 pages are 128 12-bit words each, the OS/8 record consists of 256 12-bit words, which can also be viewed as 384 8-bit bytes. For the benefit of various existing utilities, there is a standard method of unpacking the 8-bit bytes yielding a stream of coherent 8-bit bytes. The PDP-8 convention is to number bits from left to right starting with bit[0]. This is INCOMPATIBLE with the notation commonly used in other architectures, which is usually given as what power of 2 the bit represents. The PDP-8 notation is used to denote bit position in a manner consistent with significence of the bit, and arbitrarily uses origin 0, which is the usually assembly-language orientation. Using this notation, the first byte (byte #0) to be unpacked is taken from word[0] bits[4-11]. The second byte (byte #1) to be unpacked is taken from word[1] bits[4-11]. The third byte (byte #2) to be unpacked is taken from word[0] bits[0-3] concatenated with word[1] bits[0-3]. All bits are taken left to right as stated. This method is usually referred to as "3 for 2," and repeated accordingly will yield the correct stream of bytes for ASCII OS/8 files. OS/8 absolute binary files are images of 8-bit paper-tape frames packed in the same format. Although the high-order bit "matters" in absolute binary files, the high-bit is untrustworthy in ASCII files. Both types of files end with a ^Z character which will have the high-order bit set in the case of the absolute binary files. The reason it succeeds in the binary case is that the paper-tape format treats the high-bit present as leader or trailer, not loadable data, etc., so the loader ignores all leading high-bit set bytes, and finishes on the first trailing high-bit set byte. The binary file contains several leader bytes of 0200 octal, and several trailer bytes of 0200 followed by 232, the code for ^Z. There is no "fool-proof" way to derive these formats, rather these are usually given by the extensions .BN for binary, and various extensions (.LS, .PA, .MA, .DI, .BI, .TX, .DC, etc.) for ASCII files. If the file is "known" to be either ASCII or absolute binary, then these conventions can be used to ignore extraneous trailing bytes. If the file type is unknown, then it must be treated as an "image" file, where all data must be preserved. The most typical image file is a .SV file, which is an image of files organized as pages and double-pages, with some trivial absolute loading instructions in a "header" block. Each record of the file is always "paired" off, i.e., the record has an implied double-page boundary of main memory it is meant to load into. If the loading instructions indicate a single-page load, then the first page must be loaded; the second half of the record is IGNORED. Notice it is impossible to specify singular loading of the "odd" page. OS/8 also supports various other formats, so it is difficult to obtain useful knowledge of the "inner" format of the file. Encoding considerations. If the 8-bit bytes of an OS/8 file are unpacked and packed faithfully, the resultant file will be an accurate copy of the original data. This is the basis for an alternate encoding format, perhaps more universal in scope, but it is NOT the method used currently. The method chosen here is to treat the entire file as a contiguous stream of 5-bit bytes spanning words as necessary. This means that bits are taken from left to right, five at a time, and each encoded into a "printable" character for inclusion into the encoded file. This means that data will form 60-bit groups of 12 5-bit characters representing five 12-bit words. The 5-bit encoding is accomplished using the ASCII coding for an extension to hexadecimal, which can be called bi-hexadecimal, or base 32 notation. In this base, the values are 0-9, and A-V (just the "natural" extension of hexadecimal's 0-9, A-F). The alphabetic characters can be upper or lower case as necessary. This method is theoretically 25% more efficient than hexadecimal ASCII since each character holds 5-bit data rather than 4-bit data. Since the 5-bit data has no "good" boundary for most computers, we will use the "best" case for PDP-8 image data, the 60-bit group as described above. Once started, a 60-bit group must be completed, thus there are boundaries throughout the file every 12 characters. At any boundary, the file may have compressed data. Compressed fields are indicated by X (or x) followed by a four character field. The format is basically a truncation of the "normal" 60-bit group, but only contains 20 bits of data. The first 12 bits are the value of the data to be repeated. The last eight bits are the repeat count. Values of the repeat count range from 1-256, where 256 is implied if the value is zero. Practical values range from 3-255, since one or two values would take less file space uncompressed. Due to the boundary requirements, compression fields are independent of the data preceeding them. The repeat count limitation to a maximum of 256 was felt to be a reasonable compromise between compressed field length and adequate repeat count. Making the repeat count even only double the current maximum would require six character compression fields instead of five (including the X). As an implementation restriction, the encoding program only reads one OS/8 record at a time, thus the case of 256 maximum repetitions occurs only at a double-page boundary. The added complexity required to achieve infrequent and minimal improvement was considered to be unimportant, but could be added later. Thus adjacent repeated values split across boundaries, or split across logical records will not contribute to a (single) compression field. Note that compression is achieved by locating repeating strings of 12-bit values; if the file were viewed as repeating strings of 8-bit bytes, then compression would be less likely, except for cases like 0000 octal, which due to "symmetry" are compressible via either method. Many PDP-8 image files contain "filler" words, i.e., otherwise unloaded areas which are "pre-filled" with constant data such as 0000 octal, or 7402 octal, which is the PDP-8 HLT instruction. Image files filled with "large" regions of repeating strings of 7402 will not compress using 8-bit byte orientation. Reliability considerations. Even with the safeguards of a "robust" character set, file validity must be tested to maintain data integrity. Towards this end, the encoding format has several additional features. Unlike other "popular" formats, there is an explicit "command" structure to the encoded file format. All lines of data start with < and end with >. This prevents the characters from being "massaged" into unwanted alternates. Various systems are known to "destroy" files which have lines starting with "from", etc. By enclosing the data lines, we prevent these problems. Additionally, a class of explicit commands exist which start with ( and end with ). Instead of implied positioning, there is a command called (FILE filename.ext), where the filename.ext is the "suggested" name for the decoded file. The encoding program uses the original un-encoded file's file name in this field. After the data, there is another command (END filename.ext) which can be used to validate the data, since the same file name should be in both commands (as implemented in the encoding program). Several (REMARK {anything}) commands are inserted into the file at various points to assist in reconstructing the original file, or in documenting the fact that the file is an encoded "version" of another file. Several "frill" REMARK commands are implemented to indicate the original file date, and the date of encoded file creation. Today's date is always used for the encoded file creation date. The original file date may be omitted, if the system doesn't support Additional Information Words (AIWs), since this optional feature must be present in order for the files to have creation dates. The overall encoding format theoretically can be a concatenated series of encoded files, each with its own (FILE ) and (END ) commands, but the decoding program only supports single-file decoding as an implementation restriction. The file must always end with a good boundary condition. If the last field is an X (compression) field, then this is already satisfied. If the last field is ordinary data, then 1-4 12-bit words of 0000 octal will be added at the end of the last field if necessary to ensure a good boundary. The end of file is signified by a single Z (or z) character. At this point, an extraneous record may be in progress. If it consists of four or less 12-bit words of 0000 octal, it is discarded. Any other situation regarding a partial record indicates defective data in the received encoded file. After the single Z (z) character, there are 12 more characters: an entire 60-bit group. This is the file checksum. It is accomplished with pentuple-precision arithmetic. It is the sum of all 12-bit data values with carry into a total of five 12-bit words. Repeat compression data values are also added, but only once for each compression field. The compression field's repeat count is also added, but it is first multiplied by 16. (The repeat count was expressed originally as *16 so it would have its eight significant bits left-justified). The entire 60-bit quantity is expressed in two's complement notation by negating it and encoding the group as any other 60-bit group. Since most files are relatively short, the high-order bits are generally zero, so most two's complement checksums start with 7777,7777 octal. The five 12-bit quantities holding the checksum are encoded low-order first, so the right-most characters in the checksum field tend to be V (v). This order is used merely to accomodate multi-precision arithmetic, as anyone attempting to observe "backwards bytes" on other machines is familiar with. Future considerations. This format is by no means "perfect," but it is more robust than most, with a minimum of efficiency loss, given the tradeoffs involved. The data bracketing characters can be changed if required. The characters W (w) and Y (y) are available for this purpose. Files could incorporate a word or character count, or other validation technique, etc. Each line could incorporate a local count. These and other considerations could create a "compromise" format that could be more generic and "pallatable" to other systems. The checksum could be limited to 48 bits, which is more amenable to 8 and 16 bit architectures. Perhaps opening parameters could govern the contents of the rest of the file, such as whether the checksum was present, etc. [end of file] |
Added src/kermit-12/k12enc.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 | / OS/8 ENCODING PROGRAM / LAST EDIT: 08-JUL-1992 22:00:00 CJL / MUST BE ASSEMBLED WITH '/F' SWITCH SET. / PROGRAM TO ENCODE OS/8 FILES INTO "PRINTABLE" ASCII FORMAT ("ENCODE"). / DISTRIBUTED BY CUCCA AS "K12ENC.PAL" AS PART OF THE CUCCA KERMIT-12 PACKAGE. / WRITTEN BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / USAGE: / .RUN DEV ENCODE INVOKE PROGRAM / *OUTPUT<INPUT PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <CR>) / *OUTPUT<DEV:=NNNN/I **** SPECIAL IMAGE TRANSFER MODE **** INPUT IS RECORD / 0000-[NNNN-1] ON DEVICE DEV:. THE =NNNN VALUE MUST BE / STATED PRECISELY TO TRANSFER THE REQUISITE AMOUNT OF / THE DEVICE AS REQUIRED. THE VALUE IS GENERALLY THE / TOTAL LENGTH OF THE DEVICE, BUT COULD BE LESS AS / NECESSARY; LARGER VALUES WILL GENERALLY FAIL. THIS / MODE SHOULD ONLY BE USED TO EFFECT TRANSFER OF / COMPLETE DEVICE IMAGES WHERE THE NORMAL OS/8 FILE / STRUCTURE IS UNSUITABLE. IN THIS MODE, THE OS/8 FILE / (POSSIBLY PRESENT) ON THE DEVICE IS IGNORED. **** / NOTE **** THIS METHOD VIOLATES ALL OS/8 DEVICE / STRUCTURE AND IS MEANT FOR TRANSFER OF COMPLETE DEVICE / IMAGES ONLY; USE WITH CARE! / *OUTPUT<DEV:=NNNN/I/1 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE FIRST HALF OF THE DATA IS / USED. THE DECODER MUST BE GIVEN THE EQUIVALENT / PARAMETERS TO TRANSFER THE FIRST HALF. / *OUTPUT<DEV:=NNNN/I/2 **** SPECIAL IMAGE TRANSFER MODE **** SAME AS REGULAR / IMAGE MODE EXCEPT ONLY THE SECOND HALF OF THE DATA IS / USED. NOTE THAT THERE MUST BE TWO FILES CREATED, ONE / USING /I/1 AND THE OTHER USING /I/2 TO COMPLETELY / TRANSFER A DEVICE IMAGE UNLESS /I IS USED ALONE! / *OUTPUT<INPUT$ PASS ONE INPUT AND ONE OUTPUT FILE ONLY (WITH <ESC>) / . PROGRAM EXITS NORMALLY / INPUT FILE ASSUMES .SV EXTENSION; THERE IS NO ASSUMED OUTPUT EXTENSION. IF / IMAGE MODE IS USED, THERE IS NO INPUT FILE SPECIFICATION; ONLY A DEVICE IS / GIVEN ALONG WITH A LENGTH AND THE MANDATORY /I SWITCH. / PROGRAM EXIT IS THE NORMAL OS/8 METHOD OF EITHER PRESSING <^C> ON THE CONSOLE / KEYBOARD DURING THE COMMAND, OR ENDING THE COMMAND INPUT LINE WITH AN <ESC> / CHARACTER. / THIS PROGRAM SUPPORTS A SUBSET OF THE ASCII FILE ENCODING SCHEME DEVELOPED BY / CHARLES LASNER AND FRANK DA CRUZ. THE SCHEME USED IS FIVE-BIT ENCODING WITH / COMPRESSION, (AS OPPOSED TO SIX-BIT WITHOUT COMPRESSION AS USED IN PRIOR / VERSIONS). / RESTRICTIONS: / A) NO SUPPORT FOR MULTIPLE DECODABLE FILES PER ENCODED FILE. / B) CREATES ENCODED PDP-8 60-BIT CHECKSUM AT END OF FILE. / C) CUSTOMIZED (REMARK) COMMANDS MUST BE SEPARATELY ADDED BY THE USER. / D) THE FILENAME IN THE (FILE ) AND (END ) COMMANDS WILL BE IDENTICAL TO / THE ACTUAL INVOKED INPUT FILE. THE USER MUST SEPARATELY MODIFY THESE / COMMANDS WHEN EXPORTING THE ENCODED FILE TO A SYSTEM WITH DIFFERENT / NAMING CONVENTIONS. / ERROR MESSAGES. / ERROR MESSAGES ARE ONE OF TWO VARIETIES: COMMAND DECODER MESSAGES AND USER / (PROGRAM-SIGNALLED) MESSAGES. / COMMAND DECODER MESSAGES ARE NON-FATAL AND MERELY REQUIRE RETYPING THE / COMMAND. ATTEMPTING TO USE MORE THAN ONE OUTPUT FILE WILL YIELD THE COMMAND / DECODER MESSAGE "TOO MANY FILES" AND CAUSE A REPEAT OF THE COMMAND DECODER / PROMPT REQUIRING USER INPUT. THE USER IS DIRECTED TO OTHER DOCUMENTATION OF / THE "SPECIAL" MODE OF THE COMMAND DECODER, AS THAT IS THE ONLY MODE USED BY / THIS UTILITY PROGRAM. / ANY USER MESSAGE PRINTED IS A FATAL ERROR MESSAGE CAUSED BY A PROBLEM BEYOND / THE SCOPE OF THE COMMAND DECODER. ALL USER MESSAGES ARE THE STANDARD OS/8 / "USER" ERROR MESSAGES OF THE FORM: "USER ERROR X AT AAAAA", WHERE X IS THE / ERROR NUMBER AND AAAAA IS THE PROGRAM ADDRESS WHERE THE ERROR WAS DETECTED. / THE FOLLOWING USER ERRORS ARE DEFINED: / ERROR NUMBER PROBABLE CAUSE / 0 NO OUTPUT FILE. / 1 INPUT FILE ERROR (CAN'T FIND INPUT FILE) OR NO INPUT / FILE SPECIFIED OR TOO MANY INPUT FILES SPECIFIED. / 2 ILLEGAL OUTPUT FILE NAME (WILD CARDS NOT ALLOWED). / 3 NO OUTPUT FILE NAME (DEVICE ONLY IS NOT ALLOWED). / 4 ERROR WHILE FETCHING FILE HANDLER. / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE ENCODING FILE DATA. / ASSEMBLY INSTRUCTIONS. / IT IS ASSUMED THE SOURCE FILE K12ENC.PAL HAS BEEN MOVED AND RENAMED TO / DSK:ENCODE.PA. / .PAL ENCODE<ENCODE/E/F ASSEMBLE SOURCE PROGRAM / .LOAD ENCODE LOAD THE BINARY FILE / .SAVE DEV ENCODE=2001 SAVE THE CORE-IMAGE FILE / DEFINITIONS. AIWCNT= 1404 /ADDITIONAL INFORMATION WORDS COUNT HERE AIWXR= 0017 /POINTER TO ADDITIONAL INFORMATION WORDS CLOSE= 4 /CLOSE OUTPUT FILE DATEXT= 7777 /DATE EXTENSION HERE DATWRD= 7666 /OS/8 DATE WORD DECODE= 5 /CALL COMMAND DECODER ENTER= 3 /ENTER TENTATIVE FILE EQUWRD= 7646 /EQUALS PARAMETER HERE IN TABLE FIELD FETCH= 1 /FETCH HANDLER IHNDBUF=7200 /INPUT HANDLER BUFFER INBUFFE=6200 /INPUT BUFFER INFILE= 7605 /INPUT FILE INFORMATION HERE LOOKUP= 2 /LOOKUP INPUT FILE NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 OHNDBUF=6600 /OUTPUT HANDLER BUFFER OUTBUFF=5600 /OUTPUT BUFFER OUTFILE=7600 /OUTPUT FILE INFORMATION HERE PRGFLD= 00 /PROGRAM FIELD RESET= 13 /RESET SYSTEM TABLES REVISIO=1 /PROGRAM REVISION SBOOT= 7600 /MONITOR EXIT SWAL= 7643 /A-/L SWITCHES HERE IN TABLE FIELD SWY9= 7645 /Y-/9 SWITCHES HERE IN TABLE FIELD TBLFLD= 10 /COMMAND DECODER TABLE FIELD TERMWRD=7642 /TERMINATOR WORD USERROR=7 /USER SIGNALLED ERROR USR= 0200 /USR ENTRY POINT USRENT= 7700 /USR ENTRY POINT WHEN NON-RESIDENT USRFLD= 10 /USR FIELD USRIN= 10 /LOCK USR IN CORE VERSION=2 /PROGRAM VERSION WIDTH= 107-2 /69 DATA CHARACTERS PER LINE (TOTAL 71) WRITE= 4000 /I/O WRITE BIT *0 /START AT THE BEGINNING *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, .-. /AUTO-INDEX NUMBER 2 *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /OUTPUT BUFFER POINTER CCNT, .-. /CHECKSUM COUNTER CHKFLG, .-. /CHECKSUMMING ALLOWED FLAG CHKSUM, ZBLOCK 5 /CHECKSUM CMPCNT, .-. /MATCH COUNT FOR COMPRESSION DANGCNT,.-. /DANGER COUNT FDATE, .-. /FILE DATE FILLVAL,.-. /FILL VALUE FOR SPECIAL OUTPUT CHARACTERS IDNUMBE,.-. /INPUT DEVICE NUMBER IFNAME, ZBLOCK 4 /INPUT FILENAME IMSW, .-. /IMAGE-MODE SWITCH INLEN, .-. /INPUT FILE LENGTH INPTR, .-. /INPUT BUFFER POINTER INPUT, .-. /INPUT HANDLER POINTER INRECOR,.-. /INPUT RECORD FNAME, ZBLOCK 4 /OUTPUT FILENAME LATEST, .-. /LATEST OUTPUT CHARACTER OBOUND, .-. /OUTPUT BOUNDARY COUNTER OCTCNT, .-. /OCTAL OUTPUT ROUTINE COUNTER OCTEMP, .-. /OCTAL OUTPUT ROUTINE TEMPORARY ODNUMBE,.-. /OUTPUT DEVICE NUMBER OUTPUT, .-. /OUTPUT HANDLER POINTER OUTRECO,.-. /OUTPUT RECORD PRTEMP, .-. /DATE OUTPUT TEMPORARY PUTEMP, .-. /OUTPUT TEMPORARY PUTLATE,.-. /LATEST 5-BIT CHARACTER PUTPREV,.-. /PREVIOUS OUTPUT TEMPORARY QUO, .-. /DIVIDE QUOTIENT REM, .-. /DIVIDE REMAINDER SCRCASE,.-. /CURRENT MESSAGE CASE SCRCHAR,.-. /LATEST MESSAGE CHARACTER SCRPTR, .-. /MESSAGE POINTER TDATE, .-. /TODAY'S DATE TEMP, .-. /TEMPORARY TEMPTR, .-. /TEMPORARY OUTPUT POINTER WIDCNT, .-. /LINE WIDTH COUNTER PAGE /START AT THE USUAL PLACE BEGIN, NOP /IN CASE WE'RE CHAINED TO CLA /CLEAN UP START, CIF USRFLD /GOTO USR FIELD JMS I (USRENTRY) /CALL USR ROUTINE USRIN /GET IT LOCKED IN CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE DECODE /WANT COMMAND DECODER "*^100 /USING SPECIAL MODE CDF TBLFLD /GOTO TABLE FIELD TAD I (TERMWRD) /GET TERMINATOR WORD SPA CLA /SKIP IF <CR> TERMINATED THE LINE DCA EXITZAP /ELSE CAUSE EXIT LATER DCA IMSW /CLEAR IMAGE-MODE; MIGHT GET SET LATER THOUGH TAD I (OUTFILE) /GET OUTPUT FILE DEVICE WORD SNA /SKIP IF OUTPUT FILE PRESENT JMP TSTMORE /JUMP IF NOT THERE AND [17] /JUST DEVICE BITS DCA ODNUMBER /SAVE OUTPUT DEVICE NUMBER TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SNA /SKIP IF PRESENT JMP INERR /JUMP IF NOT AND [17] /JUST DEVICE BITS DCA IDNUMBER /SAVE INPUT DEVICE NUMBER TAD I (INFILE+5) /GET SECOND INPUT FILE DEVICE WORD SZA CLA /SKIP IF ONLY ONE INPUT FILE JMP INERR /ELSE COMPLAIN JMS I (MIFNAME) /MOVE INPUT FILENAME WITH ADJUSTED EXTENSION TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD SNA CLA /SKIP IF NAME PRESENT JMP NONAMERROR /JUMP IF DEVICE ONLY JMS I (MOFNAME) /MOVE OUTPUT FILENAME CDF PRGFLD /BACK TO OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE RESET /RESET SYSTEM TABLES TAD (OHNDBUFFER+1) /GET BUFFER POINTER+TWO-PAGE BIT DCA OHPTR /STORE IN-LINE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER OHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD OHPTR /GET RETURNED ADDRESS DCA OUTPUT /STORE AS OUTPUT HANDLER ADDRESS TAD (IHNDBUFFER+1) /GET INPUT BUFFER POINTER+TWO-PAGE BIT DCA IHPTR /STORE IN-LINE TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE FETCH /FETCH HANDLER IHPTR, .-. /WILL BE BUFFER POINTER+TWO-PAGE BIT JMP FERROR /FETCH ERROR TAD IHPTR /GET RETURNED ADDRESS DCA INPUT /STORE AS INPUT HANDLER ADDRESS TAD IMSW /GET IMAGE-MODE SWITCH SNA CLA /SKIP IF IMAGE MODE SET JMS I (GEIFILE) /GO LOOKUP INPUT FILE TAD (FNAME) /POINT TO DCA ENTAR1 /STORED FILENAME DCA ENTAR2 /CLEAR SECOND ARGUMENT JMS I (INDATE) /GET INPUT FILE'S DATE TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE ENTER /ENTER TENTATIVE FILENAME ENTAR1, .-. /WILL POINT TO FILENAME ENTAR2, .-. /WILL BE ZERO JMP ENTERR /ENTER ERROR TAD ENTAR1 /GET RETURNED FIRST RECORD DCA OUTRECORD /STORE IT TAD ENTAR2 /GET RETURNED EMPTY LENGTH IAC /ADD 2-1 FOR OS/278 CRAZINESS DCA DANGCNT /STORE AS DANGER COUNT JMS I (CLRCHKSUM) /CLEAR THE CHECKSUM JMS I (ENCODIT) /GO DO THE ACTUAL ENCODING JMP PROCERR /ERROR WHILE ENCODING TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE CLOSE /CLOSE OUTPUT FILE FNAME /POINTER TO FILENAME OUTCNT, .-. /WILL BE ACTUAL COUNT JMP CLSERR /CLOSE ERROR EXITZAP,JMP START /**** <ESC> TERMINATION **** 0000 JMP I (SBOOT) /EXIT TO MONITOR / ERROR WHILE PROCESSING INPUT FILE. PROCERR,NL0002 /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. CLSERR, NL0001 /SET INCREMENT SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. SIZERR, CLA /CLEAN UP TAD [3] /SET INCREMENT SKP /DON'T USE NEXT / ENTER ERROR. ENTERR, NL0002 /SET INCREMENT SKP /DON'T USE NEXT / HANDLER FETCH ERROR. FERROR, NL0001 /SET INCREMENT / NO OUTPUT FILENAME ERROR. NONAMER,IAC /SET INCREMENT / ILLEGAL OUTPUT FILE NAME ERROR. BADNAME,IAC /SET INCREMENT / INPUT FILESPEC ERROR. INERR, IAC /SET INCREMENT / OUTPUT FILESPEC ERROR. OUTERR, DCA ERRNUMBER /STORE ERROR NUMBER CDF PRGFLD /ENSURE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE USERROR /USER ERROR ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER / COMES HERE TO TEST FOR NULL LINE. TSTMORE,TAD I (INFILE) /GET FIRST INPUT FILE DEVICE WORD SZA CLA /SKIP NO INPUT OR OUTPUT GIVEN JMP OUTERR /ELSE COMPLAIN CDF PRGFLD /BACK TO OUR FIELD JMP EXITZAP /MIGHT BE LAST TIME, SO GO THERE FIRST PAGE ENCODIT,.-. /ENCODING ROUTINE TAD INRECORD /GET INPUT FILE STARTING RECORD DCA INREC /STORE IN-LINE NL7777 /SETUP INITIALIZE VALUE JMS I [DOBYTE] /INITIALIZE OUTPUT ROUTINE JMS I (TDMESSAGE) /OUTPUT TODAY'S DATE MESSAGE JMS I (FDMESSAGE) /OUTPUT FILE DATE MESSAGE JMS I [SCRIBE] /OUTPUT THE FILMSG /(FILE MESSAGE JMS I (PIFNAME) /OUTPUT THE INPUT FILENAME JMS I [SCRIBE] /OUTPUT THE EMSG /LINE ENDING TAD [-WIDTH] /SETUP THE DCA WIDCNT /LINE WIDTH COUNTER JMS I (OUTSETUP) /SETUP PACKING ROUTINE AND CLEAR FILL TAD [-5] /INITIALIZE DCA OBOUND /BOUNDARY COUNTER ENCLOOP,JMS I INPUT /CALL INPUT HANDLER 2^100 /READ TWO PAGES PINBUFF,INBUFFER /INTO INPUT BUFFER INREC, .-. /WILL BE LATEST INPUT FILE RECORD ENCERRO,JMP I ENCODIT /INPUT ERROR, TAKE IMMEDIATE RETURN ISZ INREC /BUMP TO NEXT RECORD NOP /JUST IN CASE TAD PINBUFFER/(INBUFFER) /SETUP THE DCA INPTR /BUFFER POINTER LOOP, JMS I (CHKBND) /CHECK IF ON A GOOD BOUNDARY JMP NOCOMPRESSION /COMPRESS IS NOT ALLOWED AT THIS TIME TAD INPTR /GET CURRENT POINTER DCA XR1 /STASH FOR SEARCH DCA CMPCNT /CLEAR MATCH COUNT CMPLUP, TAD XR1 /GET INDEX VALUE TAD (-2^200-INBUFFER+1) /COMPARE TO LIMIT SNA CLA /SKIP IF NOT AT END OF BUFFER JMP CMPEND /JUMP IF AT END OF BUFFER TAD I XR1 /GET A CANDIDATE WORD CIA /INVERT FOR TEST TAD I INPTR /COMPARE TO CURRENT TEST VALUE SZA CLA /SKIP IF IT MATCHES JMP CMPEND /JUMP IF THIS IS NOT A REPEAT ISZ CMPCNT /BUMP MATCH COUNT JMP CMPLUP /TRY TO FIND MORE / COMES HERE POSSIBLY WITH SOME COMPRESSED VALUES COUNTED. CMPEND, NL7776 /-2 TAD CMPCNT /DID WE FIND ENOUGH MATCHES? SPA CLA /SKIP IF SO JMP NOCOMPRESSION /FORGET IT TAD ("X-"0) /SETUP COMPRESSION INDICATOR JMS I (OUTSETUP) /SETUP SPECIAL MODE JMS I (PUT5) /OUTPUT "X" JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE TAD I INPTR /GET THE VALUE JMS I [PUTIT] /OUTPUT IT ISZ CMPCNT /ACCOUNT FOR ORIGINAL TAD CMPCNT /GET COMPRESSION COUNT CLL RTL;RTL /*16 JMS I [PUTIT] /OUTPUT BITS[0-7] ONLY JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE AGAIN TAD INPTR /GET INPUT POINTER TAD CMPCNT /UPDATE PAST ALL COMPRESSED VALUES DCA INPTR /STORE BACK JMP TEST /CONTINUE THERE / COMES HERE IF NO COMPRESSION FOUND (OR NOT ALLOWED). NOCOMPR,TAD I INPTR /GET LATEST VALUE JMS I [PUTIT] /OUTPUT IT ISZ INPTR /BUMP TO NEXT ISZ OBOUND /BUMP TO NEXT WORD JMP TEST /KEEP GOING TAD [-5] /RESET THE DCA OBOUND /BOUNDARY COUNTER TEST, TAD INPTR /GET INPUT POINTER TAD (-2^200-INBUFFER) /COMPARE TO UPPER LIMIT SZA CLA /SKIP IF AT END OF BUFFER JMP LOOP /ELSE JUST KEEP GOING ISZ INLEN /DONE ALL INPUT RECORDS? JMP ENCLOOP /NO, KEEP GOING / WE MUST FINISH THE LAST [5 WORDS => 12 BYTES] SEQUENCE. ENDLUP, JMS I (CHKBND) /AT A GOOD BOUNDARY? SKP /SKIP IF NOT JMP ENDONE /JUMP IF SO JMS I [PUTIT] /OUTPUT SOME WASTE BYTES ISZ OBOUND /AT A GOOD BOUNDARY NOW? JMP ENDLUP /NO, TRY AGAIN ENDONE, TAD ("Z-"0) /GET END INDICATOR JMS I (OUTSETUP) /SETUP SPECIAL MODE JMS I (PUT5) /OUTPUT A "Z" JMS I (INVCHKSUM) /INVERT THE CHECKSUM JMS I (OUTSETUP) /SETUP NORMAL NUMERICAL MODE JMS I (CHKOUT) /OUTPUT THE CHECKSUM JMS I [SCRIBE] /OUTPUT THE ENDMSG /END MESSAGE JMS I (PIFNAME) /OUTPUT THE INPUT FILENAME JMS I [SCRIBE] /OUTPUT THE EMSG /LINE ENDING JMS I [SCRIBE] /OUTPUT THE EOFMSG /FINAL MESSAGE TAD ("Z&37) /GET <^Z> CLOSLUP,JMS I [DOBYTE] /OUTPUT A BYTE (^Z OR NULL) TAD BUFPTR /GET THE OUTPUT BUFFER POINTER TAD (-OUTBUFFER) /COMPARE TO RESET VALUE SZA CLA /SKIP IF IT MATCHES JMP CLOSLUP /ELSE KEEP GOING ISZ ENCODIT /NO ERRORS JMP I ENCODIT /RETURN PAGE PUTIT, .-. /WORD OUTPUT ROUTINE DCA PUTEMP /SAVE PASSED VALUE JMS I (CALCHKSUM) /UPDATE CHECKSUM JMP I PUTNXT /GO WHERE YOU SHOULD GO PUTNXT, PUT0 /OUTPUT EXIT ROUTINE TAD PUTEMP /GET LATEST VALUE DCA PUTPREV /SAVE FOR NEXT TIME JMP I PUTIT /RETURN TO MAIL CALLER PUTLUP, JMS PUTNXT /GET ANOTHER WORD PUT0, TAD PUTEMP /GET WORD[0] RTL;RTL;RTL /BITS[0-4] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[0] AGAIN RTR /BITS[5-9] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER JMS PUTNXT /GET ANOTHER WORD PUT1, TAD PUTPREV /GET WORD[0] AND [3] /ISOLATE BITS[10-11] CLL RTL;RAL /BITS[10-11] => AC[7-8] DCA PUTPREV /SAVE FOR NOW TAD PUTEMP /GET WORD[1] RTL;RTL /BITS[0-2] => AC[9-11] AND [7] /ISOLATE DESIRED BITS TAD PUTPREV /ADD ON WORD[0] BITS IN AC[7-8] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[1] RTR;RTR /BITS[3-7] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER JMS PUTNXT /GET ANOTHER WORD PUT2, TAD PUTEMP /GET WORD[2] RAL /BIT[0] => L CLA /CLEAN UP TAD PUTPREV /GET WORD[1] RAL /BITS[8-11],L => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[2] RTR;RTR;RTR /BITS[1-5] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[2] RAR /BITS[6-10] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER JMS PUTNXT /GET ANOTHER WORD PUT3, TAD PUTPREV /GET WORD[2] RAR /BIT[11] => L CLA /CLEAN UP TAD PUTEMP /GET WORD[3] RTL;RTL;RAL /L, BITS[0-3] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[3] RTR;RAR /BITS[4-8] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER JMS PUTNXT /GET ANOTHER WORD PUT4, TAD PUTPREV /GET WORD[3] AND [7] /ISOLATE BITS[9-11] CLL RTL /BITS[9-11] => AC[7-9] DCA PUTPREV /SAVE FOR NOW TAD PUTEMP /GET WORD[4] RTL;RAL /BITS[0-1] => AC[10-11] AND [3] /ISOLATE BITS[10-11] TAD PUTPREV /ADD ON WORD[3] BITS IN AC[7-9] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[4] RTR;RTR;RAR /BITS[2-6] => AC[7-11] JMS PUT5 /OUTPUT A CHARACTER TAD PUTEMP /GET WORD[4] BITS[7-11] IN AC[7-11] JMS PUT5 /OUTPUT A CHARACTER JMP PUTLUP /GO DO ANOTHER GROUP OF FIVE WORDS CHKNL, .-. /CHECK IF AT NEW LINE ROUTINE TAD WIDCNT /GET LINE WIDTH COUNTER TAD (WIDTH) /COMPARE TO MAXIMIM VALUE SZA CLA /SKIP IF AT MAXIMUM ISZ CHKNL /TAKE SKIP RETURN IF NOT AT MAXIMUM JMP I CHKNL /RETURN EITHER WAY OUTSETU,.-. /OUTPUT SETUP ROUTINE DCA FILLVALUE /STORE PASSED FILL VALUE TAD (PUT0) /SETUP THE DCA PUTNXT /OUTPUT CO-ROUTINE JMP I OUTSETUP /RETURN PUT5, .-. /FIVE-BIT OUTPUT ROUTINE AND [37] /JUST 5 BITS DCA PUTLATEST /SAVE IT JMS CHKNL /CHECK IF AT BEGINNING OF LINE SKP /SKIP IF NOT JMP PUTNORMAL /JUMP IF SO TAD ("<&177) /GET BEGINNING BRACKET JMS I [DOBYTE] /OUTPUT IT PUTNORM,TAD PUTLATEST /GET LATEST VALUE TAD ("0-"9-1) /COMPARE TO FIRST LIMIT SMA CLA /SKIP IF LESS TAD ["A-"9-1] /CONVERT LARGER VALUES TO A-V TAD PUTLATEST /ADD ON LATEST VALUE TAD ["0&177] /MAKE IT ASCII TAD FILLVALUE /ADD ON FILL VALUE FOR SPECIAL MODE JMS I [DOBYTE] /OUTPUT IT ISZ WIDCNT /BUMP LINE COUNTER TAD WIDCNT /GET LINE COUNTER SZA CLA /SKIP IF AT END OF LINE JMP I PUT5 /ELSE JUST RETURN TAD (">&177) /GET DATA CLOSING CHARACTER JMS I [DOBYTE] /OUTPUT IT TAD ["M&37] /GET A <CR> JMS I [DOBYTE] /OUTPUT IT TAD ["J&37] /GET A <LF> JMS I [DOBYTE] /OUTPUT IT TAD [-WIDTH] /RESET THE DCA WIDCNT /LINE WIDTH COUNTER JMP I PUT5 /RETURN PAGE / MESSAGE PRINT ROUTINE. SCRIBE, .-. /MESSAGE PRINT ROUTINE TAD I SCRIBE /GET IN-LINE POINTER ARGUMENT DCA SCRPTR /STASH THE POINTER ISZ SCRIBE /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO DCA SCRCASE /LOWER-CASE SCRLUP, TAD I SCRPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS SCRPRNT /PRINT IT TAD I SCRPTR /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE AND [77] /JUST SIX BITS SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD (-"^+100+"%) /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER SCRPRLF,JMS I [DOBYTE] /OUTPUT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,TAD ["M&37] /GET A <CR> JMS I [DOBYTE] /OUTPUT IT TAD ["J&37] /GET A <LF> JMP SCRPRLF /CONTINUE THERE SCRFLIP,TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES DCA SCRCASE /STORE NEW INVERTED CASE JMP I SCRPRNT /RETURN PUTBYTE,.-. /OUTPUT A BYTE ROUTINE SPA /ARE WE INITIALIZING? JMP PUTINITIALIZE /YES AND (177) /JUST IN CASE DCA LATEST /SAVE LATEST CHARACTER TAD LATEST /GET LATEST CHARACTER JMP I PUTNEXT /GO WHERE YOU SHOULD GO PUTNEXT,.-. /EXIT ROUTINE ISZ PUTBYTE /BUMP TO GOOD RETURN PUTERRO,CLA CLL /CLEAN UP JMP I PUTBYTE /RETURN TO MAIN CALLER PUTINIT,CLA /CLEAN UP TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH PUTNEWR,TAD (OUTBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER PUTLOOP,JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT TAD BUFPTR /GET POINTER VALUE DCA TEMPTR /SAVE FOR LATER ISZ BUFPTR /BUMP TO NEXT JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT JMS PUTNEXT /GET A CHARACTER RTL;RTL /MOVE UP AND [7400] /ISOLATE HIGH NYBBLE TAD I TEMPTR /ADD ON FIRST BYTE DCA I TEMPTR /STORE COMPOSITE TAD LATEST /GET LATEST CHARACTER RTR;RTR;RAR /MOVE UP AND AND [7400] /ISOLATE LOW NYBBLE TAD I BUFPTR /ADD ON SECOND BYTE DCA I BUFPTR /STORE COMPOSITE ISZ BUFPTR /BUMP TO NEXT TAD BUFPTR /GET LATEST POINTER VALUE TAD (-2^200-OUTBUFFERR) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING ISZ DANGCNT /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I (SIZERR) /JUMP IF SO JMS I OUTPUT /CALL I/O HANDLER 2^100+WRITE /WRITE SOME PAGES FROM OUTPUT BUFFER OUTBUFFER /BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER JMP PUTERROR /OUTPUT ERROR! ISZ I (OUTCNT) /BUMP ACTUAL LENGTH ISZ PUTRECORD /BUMP TO NEXT RECORD JMP PUTNEWRECORD /KEEP GOING DOBYTE, .-. /OUTPUT A BYTE ROUTINE JMS PUTBYTE /OUTPUT PASSED VALUE JMP I (ENCERROR) /COULDN'T DO IT JMP I DOBYTE /RETURN PAGE / INPUT FILE ROUTINE. GEIFILE,.-. /GET INPUT FILE ROUTINE JMS LUKUP /TRY TO LOOKUP THE FILE SKP /SKIP IF IT WORKED JMP TRYNULL /TRY NULL EXTENSION VERSION NULLOK, TAD LARG2 /GET NEGATED LENGTH DCA INLEN /STASH IT TAD LARG1 /GET FIRST INPUT RECORD DCA INRECORD /STASH IT JMP I GEIFILE /RETURN / COMES HERE IF LOOKUP FAILED. TRYNULL,CDF TBLFLD /GOTO TABLE FIELD TAD I [INFILE+4] /GET ORIGINAL FILENAME'S EXTENSION CDF PRGFLD /BACK TO OUR FIELD SZA CLA /SKIP IF IT WAS NULL ORIGINALLY JMP I (INERR) /ELSE COMPLAIN OF EXPLICIT LOOKUP FAILURE DCA IFNAME+3 /NOW TRY NULL VERSION INSTEAD OF DEFAULT VERSION JMS LUKUP /TRY TO LOOK IT UP AGAIN JMP NULLOK /THAT WORKED! JMP I (INERR) /COMPLAIN OF LOOKUP FAILURE LUKUP, .-. /LOW-LEVEL LOOKUP ROUTINE TAD (IFNAME) /GET OUR FILENAME POINTER DCA LARG1 /STORE IN-LINE DCA LARG2 /CLEAR SECOND ARGUMENT TAD IDNUMBER /GET INPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USR] /CALL USR ROUTINE LOOKUP /WANT LOOKUP FUNCTION LARG1, .-. /WILL BE POINTER TO OUR FILENAME LARG2, .-. /WILL RETURN FILE LENGTH (HOPEFULLY) ISZ LUKUP /LOOKUP FAILED, SO BUMP RETURN ADDRESS JMP I LUKUP /RETURN EITHER WAY / INPUT FILENAME PRINT ROUTINE. PIFNAME,.-. /PRINT INPUT FILENAME ROUTINE TAD IMSW /GET IMAGE-MODE SWITCH SNA CLA /SKIP IF SET JMP DOIFNAME /JUMP IF NOT JMS I [SCRIBE] /OUTPUT THE IFMSG /IMAGE MESSAGE CDF TBLFLD /GOTO TABLE FIELD TAD I [EQUWRD] /GET EQUALS PARAMETER CDF PRGFLD /BACK TO OUR FIELD JMS I (OCTOUT) /OUTPUT IT CDF TBLFLD /GOTO TABLE FIELD TAD I [SWY9] /GET /Y-/9 SWITCHES CDF PRGFLD /BACK TO OUR FIELD AND [600] /JUST /1, /2 BITS SNA /SKIP IF SOMETHING SET JMP I PIFNAME /JUST RETURN IF NOT AND [400] /JUST /1 BIT SNA CLA /SKIP IF /1 SET JMP PIFPT2 /JUMP IF /2 SET JMS I [SCRIBE] /OUTPUT THE PT1MSG /PART ONE MESSAGE JMP I PIFNAME /RETURN PIFPT2, JMS I [SCRIBE] /OUTPUT THE PT2MSG /PART TWO MESSAGE JMP I PIFNAME /RETURN DOIFNAM,TAD IFNAME /GET FIRST PAIR JMS PIF2 /PRINT IT TAD IFNAME+1 /GET SECOND PAIR JMS PIF2 /PRINT IT TAD IFNAME+2 /GET THIRD PAIR JMS PIF2 /PRINT IT TAD (".&177) /GET SEPARATOR JMS PIFOUT /PRINT IT TAD IFNAME+3 /GET FOURTH PAIR JMS PIF2 /PRINT IT JMP I PIFNAME /RETURN PIF2, .-. /PRINT A PAIR ROUTINE DCA SCRCHAR /SAVE PASSED PAIR TAD SCRCHAR /GET IT BACK RTR;RTR;RTR /MOVE DOWN JMS PIFOUT /PRINT HIGH-ORDER FIRST TAD SCRCHAR /GET IT AGAIN JMS PIFOUT /PRINT LOW-ORDER JMP I PIF2 /RETURN PIFOUT, .-. /FILENAME CHARACTER OUTPUT ROUTINE AND [77] /JUST SIXBIT SNA /SKIP IF SOMETHING THERE JMP I PIFOUT /ELSE IGNORE IT TAD [40] /INVERT IT AND [77] /REMOVE EXCESS TAD [40] /INVERT IT AGAIN JMS I [DOBYTE] /OUTPUT IT JMP I PIFOUT /RETURN MOFNAME,.-. /MOVE OUTPUT FILENAME ROUTINE TAD I [OUTFILE+1] /GET FIRST OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME /STASH IT TAD I (OUTFILE+2) /GET SECOND OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+1 /STASH IT TAD I (OUTFILE+3) /GET THIRD OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+2 /STASH IT TAD I (OUTFILE+4) /GET FOURTH OUTPUT FILENAME WORD JMS CHKNAME /CHECK IF LEGAL DCA FNAME+3 /STASH IT JMP I MOFNAME /RETURN / OUTPUT NAME CHECK ROUTINE. CHKNAME,.-. /OUTPUT NAME CHECK ROUTINE DCA LUKUP /SAVE PASSED VALUE TAD LUKUP /GET IT BACK RTR;RTR;RTR /MOVE DOWN JMS CHKIT /CHECK HIGH-ORDER AND GET IT BACK JMS CHKIT /CHECK LOW-ORDER AND GET IT BACK JMP I CHKNAME /RETURN CHKIT, .-. /ONE CHARACTER CHECK ROUTINE AND [77] /JUST SIX BITS TAD (-"?!200) /COMPARE TO "?" SZA /SKIP IF ALREADY BAD TAD (-"*+"?) /ELSE COMPARE TO "*" SNA CLA /SKIP IF NEITHER BAD CASE JMP I (BADNAME) /COMPLAIN OF WILD CHARACTER TAD LUKUP /GET THE PAIR BACK FOR NEXT TIME JMP I CHKIT /RETURN PAGE CALCHKS,.-. /CALCULATE CHECKSUM ROUTINE TAD CHKFLG /SHOULD WE CHECKSUM? SZA CLA /SKIP IF SO JMP I CALCHKSUM /JUMP IF NOT JMS CHKSETUP /SETUP TAD PUTEMP /GET PASSED VALUE CLL RAR /CLEAR LINK AND MOVE OVER ADDLUP, RAL /MOVE OVER CARRY TAD I XR1 /ADD A WORD DCA I XR2 /STORE BACK ISZ CCNT /DONE ENOUGH? JMP ADDLUP /NO, KEEP GOING JMP I CALCHKSUM /YES, RETURN CHKOUT, .-. /OUTPUT THE CHECKSUM ROUTINE JMS CHKSETUP /SETUP ISZ CHKFLG /DISABLE CHECKSUMMING TAD I XR1 /GET A WORD JMS I [PUTIT] /OUTPUT IT ISZ CCNT /DONE YET? JMP .-3 /NO, KEEP GOING JMP I CHKOUT /YES, WE'RE DONE CLRCHKS,.-. /CLEAR CHECKSUM ROUTINE JMS CHKSETUP /SETUP DCA I XR1 /CLEAR A WORD ISZ CCNT /DONE YET? JMP .-2 /NO, DO ANOTHER DCA CHKFLG /ENABLE CHECKSUMMING JMP I CLRCHKSUM /RETURN INVCHKS,.-. /CHECKSUM INVERSION ROUTINE JMS CHKSETUP /SETUP STL /FORCE INITIAL CARRY COMLUP, TAD I XR1 /GET A WORD CMA /INVERT IT SZL /SKIP IF NO CARRY CLL IAC /ELSE ADD ONE AND CLEAR CARRY FOR NEXT TIME DCA I XR2 /STORE BACK ISZ CCNT /DONE ALL YET? JMP COMLUP /NO, KEEP GOING JMP I INVCHKSUM /YES, RETURN CHKSETU,.-. /CHECKSUM SETUP ROUTINE TAD (CHKSUM-1) /POINT TO DCA XR1 /CHECKSUM AREA TAD (CHKSUM-1) /POINT TO DCA XR2 /CHECKSUM AREA TAD [-5] /SETUP THE DCA CCNT /CHECKSUM COUNT JMP I CHKSETUP /RETURN / FILE DATE ROUTINE. FDMESSA,.-. /PUT FILE DATE IN MESSAGE ROUTINE TAD FDATE /GET INPUT FILE'S DATE SNA CLA /SKIP IF ANY JMP I FDMESSAGE /RETURN IF NONE JMS I [SCRIBE] /PRINT OUT THE DATMSG /DATE BLURB TAD FDATE /GET IT BACK JMS PRDATE /PRINT THE DATE JMS I [SCRIBE] /PRINT THE EMSG /END MESSAGE JMP I FDMESSAGE /RETURN TDMESSA,.-. /PUT TODAY'S DATE IN MESSAGE ROUTINE JMS I [SCRIBE] /OUTPUT THE REMMSG /OPENING REMARKS CDF TBLFLD /GOTO TABLE FIELD TAD I (DATWRD) /GET DATE WORD CDF PRGFLD /BACK TO OUR FIELD SNA /SKIP IF THERE JMP NOTDATE /JUMP IF NOT DCA TDATE /SAVE TODAY'S DATE JMS I [SCRIBE] /OUTPUT THE ONMSG /BRIDGING MESSAGE TAD TDATE /GET TODAY'S DATE JMS PRDATE /PRINT TODAY'S DATE NOTDATE,JMS I [SCRIBE] /OUTPUT THE EMSG /END MESSAGE JMP I TDMESSAGE /RETURN PRDATE, .-. /DATE PRINT ROUTINE DCA PRTEMP /SAVE PASSED VALUE TAD PRTEMP /GET IT BACK RTR;RAR /MOVE DOWN AND [37] /JUST DAY BITS JMS I (DEC2) /PRINT AS TWO DIGITS TAD PRTEMP /GET DATE AGAIN AND [7400] /JUST MONTH BITS CLL RTL;RTL;RTL /MOVE DOWN TAD (MONLST-2-1) /POINT TO PROPER ELEMENT DCA XR1 /STASH THE POINTER TAD I XR1 /GET FIRST PAIR DCA I (MMSG+1) /STORE IN MESSAGE TAD I XR1 /GET SECOND PAIR DCA I (MMSG+2) /STORE IN MESSAGE JMS I [SCRIBE] /OUTPUT THE MMSG /MONTH MESSAGE TAD PRTEMP /GET DATE AGAIN AND [7] /JUST YEAR BITS DCA TEMP /SAVE IT CDF TBLFLD /GOTO TABLE FIELD TAD I (DATWRD) /GET CURRENT DATE WORD CDF PRGFLD /BACK TO OUR FIELD AND [7] /JUST YEAR BITS CIA /INVERT FOR TEST TAD TEMP /COMPARE TO DESIRED YEAR SMA SZA CLA /SKIP IF THEY MATCH OR ARE EARLIER TAD (-10) /ELSE BACKUP A GROUP TAD TEMP /ADD TO YEAR DCA TEMP /STORE BACK TAD I (DATEXT) /GET EXTENSION WORD AND [600] /JUST EXTENSION BITS CLL RTR;RTR /MAKE IT GROUP COUNT TAD TEMP /ADD ON RELATIVE YEAR TAD (106) /MAKE IT ABSOLUTE YEAR (70-99) JMS I (DEC2) /PRINT AS TWO DIGITS JMP I PRDATE /RETURN PAGE DEC2, .-. /PRINT TWO DIGITS ROUTINE JMS DIVIDE /DIVIDE 12 /BY 10 TAD ["0&177] /MAKE IT ASCII JMS I [DOBYTE] /OUTPUT IT TAD REM /GET SECOND DIGIT TAD ["0&177] /MAKE IT ASCII JMS I [DOBYTE] /OUTPUT IT JMP I DEC2 /RETURN / DIVIDE ROUTINE. DIVIDE, .-. /DIVIDE ROUTINE DCA REM /SAVE IN REMAINDER DCA QUO /CLEAR QUOTIENT TAD REM /GET IT BACK STL CIA /INVERT SKP /DON'T FIRST TIME DVLOOP, ISZ QUO /BUMP UP QUOTIENT TAD I DIVIDE /ADD ON ARGUMENT SNA SZL /UNDERFLOW? JMP DVLOOP /NO, KEEP GOING CIA /YES, INVERT IT BACK TAD I DIVIDE /RESTORE LOST VALUE DCA REM /SAVE AS REMAINDER TAD QUO /GET THE QUOTIENT ISZ DIVIDE /BUMP PAST ARGUMENT JMP I DIVIDE /RETURN INDATE, .-. /GET INPUT FILE'S DATE WORD CDF TBLFLD /GOTO TABLE FIELD TAD IMSW /GET IMAGE-MODE SWITCH SNA CLA /SKIP IF SET JMP NOIMG /JUMP IF NOT TAD I (DATWRD) /USE TODAY'S DATE JMP NOAIW /CONTINUE THERE NOIMG, TAD I (AIWCNT) /GET AIW COUNT SNA /SKIP IF ANY JMP NOAIW /JUMP IF NOT TAD I [AIWXR] /GET ENTRY POINTER DCA TEMP /STASH FIRST AIW POINTER TAD I TEMP /GET FIRST AIW NOAIW, DCA FDATE /SAVE AS FILE'S DATE CDF PRGFLD /BACK TO OUR FIELD JMP I INDATE /RETURN / INPUT FILENAME MOVE ROUTINE; USES DEFAULT EXTENSION IF NONE PROVIDED BY USER. MIFNAME,.-. /MOVE INPUT FILENAME ROUTINE TAD I (INFILE+1) /GET FIRST INPUT FILENAME WORD SNA /SKIP IF SOMETHING THERE JMP IMTEST /JUMP IF NOT IFNAMOK,DCA IFNAME /STASH IT TAD I (INFILE+2) /GET SECOND INPUT FILENAME WORD DCA IFNAME+1 /STASH IT TAD I (INFILE+3) /GET THIRD INPUT FILENAME WORD DCA IFNAME+2 /STASH IT TAD I [INFILE+4] /GET FOURTH INPUT FILENAME WORD SNA /SKIP IF SOMETHING THERE TAD ("S^100+"V-300) /ELSE USE DEFAULT EXTENSION VALUE DCA IFNAME+3 /STASH IT EITHER WAY JMP I MIFNAME /RETURN / TEST IF IMAGE-MODE IS SET. ASSUME /1 AND /2 ARE NOT SET. IMTEST, TAD I (SWAL) /GET /A-/L SWITCHES AND (10) /JUST /I BIT SZA CLA /SKIP IF NOT SET TAD I [EQUWRD] /GET EQUALS PARAMETER SNA /SKIP IF SOMETHING THERE JMP I (INERR) /ELSE COMPLAIN CIA /INVERT IT DCA INLEN /USE AS INPUT RECORD COUNT DCA INRECORD /START AT THE BEGINNING OF THE DEVICE ISZ IMSW /INDICATE IMAGE-MODE SET / TEST IF /1 OR /2 IS SET. TAD I [SWY9] /GET /Y-/9 SWITCHES AND [600] /JUST /1, /2 SWITCHES SNA /SKIP IF EITHER SET JMP IFNAMOK /JUMP IF NEITHER SET / TEST IF /1 IS SET. IF NOT, /2 MUST BE SET. AND [400] /JUST /1 SWITCH SNA CLA /SKIP IF /1 SET JMP IM2 /JUMP IF /2 SET / FOR A FIRST HALF, USE THE ROUNDED-DOWN FIRST HALF LENGTH. THE DATA STARTS AT / RECORD ZERO (ALREADY SET). TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 IM2ENTR,CIA /INVERT IT DCA INLEN /SET COUNT FOR HALF OF THE DEVICE JMP IFNAMOK /KEEP GOING / FOR A SECOND HALF, THE DATA STARTS AT THE HALFWAY POINT (ROUNDED DOWN). IM2, TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 DCA INRECORD /SETUP STARTING RECORD / FOR A SECOND HALF, THE COUNT IS THE ORIGINAL AMOUNT MINUS THE COUNT FOR THE / FIRST HALF. TAD I [EQUWRD] /GET EQUALS PARAMETER CLL RAR /%2 CIA /INVERT IT TAD I [EQUWRD] /SUBTRACT FROM EQUALS PARAMETER JMP IM2ENTRY /CONTINUE THERE CHKBND, .-. /CHECK IF ON GOOD OUTPUT BOUNDARY ROUTINE TAD OBOUND /GET BOUNDARY COUNTER TAD (5) /COMPARE TO BEGINNING VALUE SNA CLA /SKIP IF NOT AT BEGINNING ISZ CHKBND /SET SKIP RETURN IF AT BEGINNING JMP I CHKBND /RETURN EITHER WAY OCTOUT, .-. /OCTAL OUTPUT ROUTINE DCA OCTEMP /SAVE IT TAD (-4) /SETUP THE DCA OCTCNT /DIGIT COUNTER OCTLUP, TAD OCTEMP /GET THE VALUE RTL;RAL /MOVE UP A DIGIT DCA OCTEMP /STORE BACK TAD OCTEMP /GET IT AGAIN RAL /PUT INTO CORRECT BITS AND [7] /JUST ONE DIGIT TAD ["0&177] /MAKE IT ASCII JMS I [DOBYTE] /OUTPUT IT ISZ OCTCNT /DONE ENOUGH? JMP OCTLUP /NO, GO BACK FOR MORE JMP I OCTOUT /YES, RETURN TO CALLER PAGE / FILE TEXT MESSAGES. DATMSG, TEXT "(^REMARK F^ILE ^D^ATE: " EMSG, TEXT ")%^" ENDMSG, TEXT ">%(^END ^" EOFMSG, TEXT "(^REMARK E^ND OF ^F^ILE)%" FILMSG, TEXT "(^FILE " IFMSG, TEXT "^B^LOCK-^I^MAGE-^F^ILE =^" MMSG, TEXT "-^D^EC-19" ONMSG, TEXT ": ^" PT1MSG, TEXT " ^F^IRST ^H^ALF" PT2MSG, TEXT " ^S^ECOND ^H^ALF^" REMMSG, TEXT "(^REMARK PDP-8/DEC^MATE ^E^NCODING ^P^ROGRAM ^V^ERSION ^" "0+VERSION^100+".-200; "0+REVISION^100+" -200 TEXT " C^HARLES ^L^ASNER)%" TEXT "(^REMARK I^MAGE ^F^ILE ^C^REATED BY ^PDP^-8" / MONTH TEXT TABLE. MONLST, TEXT "J^AN" /JANUARY TEXT "F^EB" /FEBRUARY TEXT "M^AR" /MARCH TEXT "A^PR" /APRIL TEXT "M^AY" /MAY TEXT "J^UN" /JUNE TEXT "J^UL" /JULY TEXT "A^UG" /AUGUST TEXT "S^EP" /SEPTEMBER TEXT "O^CT" /OCTOBER TEXT "N^OV" /NOVEMBER TEXT "D^EC" /DECEMBER $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12fl0.ipl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | leader for direct load file which must be in lower case file contains kermit data in ipl encoded format this file contains data for field zero !!M!!!!!!!!!!!!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`\!!!!!!!! !!"_!!!!!!!N!D!!!R!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"`!!_! UL!>``!!!!!!!!!!!!%!#A3!E!E*1TEB,B%@!!!!!!!!!!?!;!`N9!!."A04!;]! !+A!EZ?Z3^EC.)/!-!G\#8QT!(U5%9+,+:"!%!$`!#`G`T"`<A#!`A&3!A!`G!%1 P`F`9#:&Y!)(U,F_E*F_EPH_,^99,]H\K>K!9:E7K8):K0]IK!;<F_!!K!F_A*K! !!\!/A<23A/A@[3A,Z<3,Y@X<4)@"^*]@W02^)K],4<402@38X4243KR\!,40X0W 0[F\@343)F*[]IL+@343[A@3)<9=1@Y!OA!!!!!!!!4PL64PL8T"!IT'[!,;TW,V TW,VTW9291P5T)[!P5!!T*LKT/[!PJ!!#=5Q6/=6!!!)S5S4!DS7S6+R88Q!1!W! !!F.S3/!3!_IO!F,/!3!]IO!;/CK!!O!!!\!9-,`9`*Z:!O1!!C1,_9`,^:!O9!! ;I)U;J?J3J3IKDO@!!!!!![!/K3K;S0]YBFY!!_IOKM$!!H\K_<-)G@.4.,-@.4. [A@.)B,[YB,.`)L+D/OW3WOW!!)!!!,Z<.P/!!<>,>Y+Y+Y+$Y,>"^*]P3!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$)!(=*=QVULV"VE !!C9O!"X,`_AK"3!O!!!C9O*;8+80_@_+8*W_IO*+83*O*!!!![!*W;U])_IU"KG U'"X94)439O9H^*V]A*U_I1#])KLY!3[K=3UK=O9!!Y!H][!*&OU!!;9*W<J[A"# _IL&CU_AL#U*K_+9])*SU/[!O[4KK_4JK_H\K]!!T"P4\9TW[!TW$[Z)_ILB,ZTW 92[%]A91[!,YTW[!P4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Y!I!&$5N#UW3S`` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<X)A_A LQ,X"[_ILS,X,`_ILS,XYB)G_ALQ)GLV,XP=,X*R"X4=P=!!!!!!!!!!!!!!!!_" !!FQO!95)5FPY!,`963!O!!!;Q])3Q/Q^)K7*[_AK/3,\!+QO,!!;Q])3Q/Q^)KE *[_IK=3:\!+QO:!!;Q/Q`)KO3QKJ+QOH!!!!<A,AC!L3)9<@)5<?0?YB0@_AL6,? YB)6_IL(4?4@K[,@CHY"<?0?973R3R\")6OR3R,AOR,@CHY"Y"<@0@_IL4KY!!!! !!!!<M)U<N0M@N4M4N1SLFPB!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`` !!;L+LFQK@;M;Q;R,`9O9P,_;N/M]IK@,^_IK=/M3MF/3NK./M,^_AK@3M,`KC\! +L;MCUKI9Z+M3!O!\!+LO!!!!!!!%4,!;;;;;;;;!!]I,]<(0(<!4(0(<"S+FZ!+ !!!!!!OU,"3UOU!!!!<8,\<1,8S+FZ!"!!])4)\!,19LP)!!!!FO,[9/F+.N"(F* !".G1=L@,ZP949P9":.G"/.C!!"'``!!!!!!!!!!!!!!!!!!!!E+!#W"-O`'`]-Q !!;Q)V9U,`F2+QFQKN;R)V9O9P,_;S9WCT/R^)KJ,^]IK<,]_AKNKJ3R)V,\9O9P \E;SCT/R^)KJ*[_AKN3!\!+RO!\!+QO!!!!!!!!!/RH[])L(,Z]IL&,Y_AOT1W*^ F/3SK`3RL21W*^F/3R3SKU/RH[L2\!3RL,\!OT!!04<<4404<=44F+!!!!F*!"0F ])4444P41=L>P4":0B":0E!!!!!!!!!!!!!!!!!!!!!!!!!!!6`";@!$!/`3`[`] !!,`;SH_,^]IK;,]_IK@+S,\`!KO).,[^!*[,Z?S3S[A?S).FNK$[A?SF_E*O!+S ,Y_IK$[A+S;S?S,XFN*]FN,XFNK$\!*MFNK$!!!!"^<'\9)P9P]9L",'Y'Y'Y'=O OT-O,'=O1OOT!!!!]A<R,Q9Q9R,R<M<O,W<N\9,O<O0M]9L=Y+Y+Y+])4M"^<PF0 ,V]ILI*^YB,P_AP(4NL34(P(!!!!!!!!!!!!!!!!!!`"`Y!)IJ"A_AI*_/`TU!88 !!)<;PH`KB;S*L;RH_KB?R/R,^YB;Q3RH_KB?R3QK03R[A?R+SF\YB;QH_KB+Q_I KL\!3PKG,]NK)#_AP\H[K$)#_IO!P\!!!!!!!!!!F`F_C#*"FJF_E*3TOT!!F-QW F_E*O^!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!67CWG>`@'*'! !!FO,`9/):9N)NFICR9N,_9V)NFHCR9N)NFQ])CR9N)ZFGCR<'9T["<(,_@^,(H] CRKJ4'<(H\CR)W_AK=,'_ICRD-)N9:3!O!!![!+RFY5VO!LXAZLRB8LMBVLIH"L@ GPL;H3L5EC!!!!!!!!!!!!!!!!\!9TF+T_"#F*!"!!P-!![A)@"^*]<L,K,L,MF\ <N)F*[]I[A<OF.6JP7!"!D!!"/!!!!``!!!!!!!!!!!!!!!!!!!!!!A==!2Q6)!# !!FO,`9/):9N)NFIKJFQKE;7+7FP])K.9N[A=N9@+7F+!!"3F*!"7K1=K9O!H_KD 3!)N9:O!\!*FO!FEO!\!,^O!"&7H"47?"/7<!!!!FO,`9/):9N)NFIL+FQ])L.9N F,H]8.L.H_L.3T)N9:OT\!,^OT[!OT"48%"#8."#8'!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%KAZ9!!$ !!H`9[S+FZ!,9@F+TU":F*!";*1=K+DBF+T_":F*!":_DB)[_IDBH_DBK1)[_ADB .L,^^)DB,]<O[A@O,\9V,]FHDB\!)Z9])]FGDB,\;Z)]S+FZ!$!!!!DB+Z9X+[Y" 9Y1[[AFD]#)VFCF_BCF-6QF_E*K1)[_IDBFBDBK1)[_AFBY!F+T_":F*!!3!O!FE O!!!F+T_"#F*!!,BFY;1]I,[O!!!!!!!!!!!!!!!!!!!!!!!!!!!F(6)QW`>;`CG "%98";:/"#:5"'9>"&:@!!"/9."'9>"&:@!!HJH<HEB&H%FUH4F2H.FBGNB-!!!! CH])KFCT])3@O@!!;S+S,`Z!,_]93H\!+SOH!!!!;_+_,^Z!*A]93T\!+_OT!!!! .L,]<?@?,\<?0?]IL=YB)G_IL2,@_A,[L5,@_IL90?FDO`L:\"<@4?L'3`O`!!!! !!9$0A9)4A1)-)]IPA)$_ALF-)9$)$PA!!!!!!!!!!!!!!!!!!!!`!QWQ4`'!;_F !!]IKS;(EL#)5!!!O!S*0`9X,_9+-+]IKV<,-+<--+<.-+</[A0_<"<#+<;AKC-+ <#3A4"K@-+]IKZ<+S",^H]KS,+9Y,^FC3!K`S*,+])-+YB)X9X8\K/0[S"]AK$3! O!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5#5!2(>,5%5" !!_IOG)X;)EL#)1!!!O!+(<R<"C:C:,"CG,R,`_AK-3)1YK&KR!!S*0R"@Z%,"Y' Y'<"0RCG4RO:!!S"Y%Z9!^*V]IKT*?"T3!3!O!,S_IKR,_;GKO!!^)L'!^90S*)0 P"!!3Z\!S"OZ[!)X<M@^,L<RD"@R,R;:4RD"@RD"Y'Y'"@/:?:)0Y+Y+Y)"@0R@R 4R,R,`_AL-S"1Y])OZELC)1!!!L$8^4ML+!!!!!!!!!!!!!!!!!!!!!!!!A7?RM! !!)^`)K.)0*V_A+<_IK.*?FDK80`,__AK,)]S+FZ!%6)!!_)3!9[O!!"!!)T_AKL ,^9I,]9F,\9G,[9B9@HZO=F+6Q"'F*!"C)1=KOO=F_BMF-6QF_E*C_])3=O=!!HY [AHXO_L1HW])L"F+)!"%F*!"B_1=L+O_0V,U_IL>F+)!"%F*!"C$1=L8O_F>T_"; O_O_3_O_!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Y!&.%W?!&/C3"_!D!N!RQ!@R ":B""/B.!!":B>"/B;!!":AU"/AR!!":AU!!!!F+TU"4F*!"C@1=K7O3CG\"9T33 O3":C="/C:!!!!,`9U,_F2.L,^,_^A[!,]YB9S,\F1OG\!9#)/,[]AL$F>D2";Y! Y!HZL0,Y_AL0F>T_"#Y![!)[_AFB[!,XNK"%``!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!A!``6-`_QW!+`=`W!B !!]AK&/!3!9U*NC3O!!!]AK//*3*9U,`C3O*!!;@)U;A/A3A^)K>G@\!K7\!O3!! !!!!\9)R9R-Q]9KMY+Y+Y+])1Q"^OB!!]I*]*]"^*]?Y3YOP!!!!9Q9R,_;Y,^<2 F0]ACP42L!,]CP\E<2F0]ACP42L*[A?YOZ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!O`[6Q'[ !![!*N;V/!<+3!)_*=<)S*0+Y+Y+Y+C6S*0+C64+K+!!S""^]IO!<*,*,`]IKJ*M _IKN,*"]_I,),*GVO6*<GV*AKH)__AO6,)YB,_<)O6!![!+V;!,^K$!!<(,(*[`! L%F_AC*R,(FNO\!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'[#A`< !!FOF_A4*"FJF_AIF_AUF_AS<M*"<IH`H_*$]I*%_AL3H^K<H]])H\,L,M_IKBH^ L&H[L&HZL&<N,N"XYB<P,M_IKT,PFYJC_IL#M$,P*"_AK[[AL%<M,L_IK`,NH\,N HYL&*MH\<MY!HXHWHVHUK23!O!Y!HXHWHVHUH^L.0TYB0S_AL.*$_IL?F_D^*%_I K-F_G/K-"$J,"DJ,!!IZ!!!!!!!!(4!!!!!!LWLVLBO@K5MFO!K!O7L#M!L9N>P& !!,YYB,Z_IK2,Z<B[",Z"X*;<ZS*0BS"])CH3!O!!!CH])O5S*@YS"[",Y"X*;<Y ,YYB,Z_I2$O5KE!!Q:L!Q?^)2$])KM"T<B*#_IK],B"X*:]IK_*U_IK`,BOH\9<X 3HOH!!<B,VYB,W,X_AL/,BH`L/P#,BS*@VS"[",V"X*9<VP#!![",VYB,W"X_A49 P9!!,X_APB,VYB,W_IPBS*0WS"H`PB[",W"X*9<WPB!!!!!!!!!!!!!!!!!!!!O_ !!,KYB,L_IKC,L<M[",L"X,`<LS*0MS"<M*#_IKA\9*'_AKA,KYB,L"=_AKA[A:' ,M])D#3!O!!!D#])OFS*@KS"[",K"X,`<K,KYB,L]I2%])KV*="=_I*#_IOF*'_I 2'OF!!U"L<U'^)2%])L("T<M*#_IL8,M"X*:]IL:*U_IL;,MP#\9:&4#P#!!*8:( *8:),`<K,`<L:&:':%P>!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=! !!;@*(YB*)*&_AK-+@H`K-O!+@S*>(S"["*("X*8:(O!!!["*(YB*)"X_A37O7!! *'Z%_IKL,_]1*UH`KLY9:'*&_AO@*(YB*)_IO@S*.)S"H`O@["*)"X*8:)O@!!QB L$QG3_[!O_!!*9@^*9@]*;@\*;@[@Z:$P&!!])*SU*L9U/42[!P2[!9242P2!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LXLZLYLWLV!2P2 "$"0"/"/"&"$"5``I!"'"*"/"*"4")``.9"&"9"*"5``^`"4"&"/"%``5!"("&"5 ``7!"3"&"$"&"*"7"&``7T")"&"-"1``3T``!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"_!P!A"!!N!D"/!R!A!A``!! !!C;).]IK"O!!!,`]IK.,3D%O'*]D%),"M_AK.O'!!<R9-,RC'O5!!CW]IKL,_]I KNY"]IKQ,^_AO;CW,]_AKH9.O;,\DIN!,[DI\9)-9-KL!![!Q:OWQ="X9.\G)._I M`Q;).OW!!<RC;)-`)L.,RD>L'C;,R"=_A1,!*,R,Z]I9,,Y_I[A),9,P%!!QBP> QG[!4>P>,XDIQ;NZ!!<R,WD>LL,RD>LOPI!!!!!!!!!!"?"$!&`T"0"1`P`]`Q`X \!QG+!>ZH`<I,I,__IK]U/U'[!F_3)F_2FF_3GF_3]F_2=,IZ',I,^;>F_!!F_1A KDF_2HF_E*F_1!F_3N,IZ',]9),\D=ET,IZ',I,[9),ZD=ATS+HY!)NZ@X@W8V8V ++,U_AL)+,,T_IL9R:Y!R?Y!3>L-R@L4;AS,PSR:K+;AS,PR;A,Q;CK+!!<J0=9* 4=S*-)=*4JLCS"P=!!!!!!!!!!!!!!!!2Z#,#!-K-CU[VGV"`!`\4O`]3_1C`VY! !!\!)!<#,`9!,#9!\M,__IK=\E,^_AK_[$,]_IKH[ARX[!RZY"_IK^K`[A_"_AK\ RB!0!#Y"_IK[K]Y/]IKR,\]IKZ,[_IKYL"[.,Z_IKWKXY"Y"Y"Y"Y"Y"Y"Y"Y"Y" Y"O!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`Y`G(S`!!#A#Y` !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! end of data After the program exits back to the monitor, you should save the data with: .SAVE SYS FIELD0.SV 00000-07577=0 |
Added src/kermit-12/k12fl1.ipl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | leader for direct load file which must be in lower case file contains kermit data in ipl encoded format this file contains data for field one !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! H`,_C1S"0^_IK*,]C1S$P\H[,ZC1S$P\!!9)S*-)]IO1;<-)S"?<K3!!!!,`TS[! CN3S3]3^4"4$4'KB,`TW\9CNO=!!TX4(KP[!T),YD!S"0XS*,WD!,VD!T'T)[!ON !!T*L"T/[!P!`A!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=65Q!(6/%W%!W.('!+&`#= !!TX,`S"TWS*TWS"\7TW,_TWS*\7TW[!TWS"\(TW,^TWS*\(TW,^TWS"["TW,]TW S*["TW,]TWS"["TW,]TW\6TW,\TW,[TW,ZTW\6TS[![!O!#%D5#'TT'=)1'?KG'@ 91'AT''OD4'VD4'_CU(&)2('_I((L.()92(*+9(+T/J&HOJ.HON$)1N%_IN&L<N' 91N(T'P5<&P6)2P7_IP8P2P9,&P:T/!!!!!!!!!!!!!!!!!!!!"D^%#_!6"!!/!9 #%D5#'Y!$6,Q$7TS$8[!$9TX$:4P$;L:$<4P$=L<$>T)$?,S$@DJ$A)($B,R$CDJ $D,T$EDJ$FT'$GT)$KT*$MT/'?T"'AT''_CU(&T*('L.()"T(+T/N$T"N&T'N']) P3"TP5T*P7T/!!$7TW$8\9$>TI$FTG$GTI$KTJ$MTO'?TB'ATG(&TJ(+TON$TBN& TGP5TJP7TO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ??????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ?>?!?6?/,/08/!?1%1?NV??!?1%1?NY??!?1%1?NYP4!?-*/$?NY?!?1%1?NYP*! ?1%1?NYP-!?1%1?NRS?!?1%1?NYP&!?1%1?NYP"!WRQQ?????!WRSQ?!F?<$?16A 5:1&A*4[A!QWA!A?<6?4*/(A?$?0..6/*$"5*0/4A?1?035?>!A?<6?4*/(A?1?3 */5&3A?1?035?>?!F?14PYA14PRSA04PYA04PRSA04PXYA04PSXYAA,?&3.*5NRS AA?7RQ?(AAA!?4?&15&.#&3A?!F?5?:1&A?)&-1]$3_?A'03A)&-1F?!RZZQ?!`` ?_???!V?_????!Y?_????!Y?P4_??!-*/$NY_!Y?P*_??!Y?P-_??!RS?_???!Y? P&_??!Y?P"_??!XY?_???!SXY?_??!?6?/,/08/!?1%1?NV??!?1%1?NY??!?1%1 ?NYP4!?-*/$?NY?!?1%1?NYP*!?1%1?NYP-!?1%1?NRS?!?1%1?NYP&!?1%1?NYP "!?75?NXY??!?%&$?."5&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! F?'?*-&A?"?#035F?!`?*?/7"-*%A$0.."/%?!FI?$?0//&$5*/(A50A)045MA5: 1&A!?$?0/530-N?!A?$?A50A3&563/A50A?!JF?!!!!!!!!!!!`?&?3303A*/A%& 7*$&A/".&!`?%?*4,A'6--B!`?&?3303A$-04*/(A'*-&!`?&?3303A*/A'*-&A/ ".&!?3?&$&*7*/(A'*-&[A?!?4?&/%*/(A'*-&[A?!`?'?*-&A/".&A4:/5"9A&3 303!F?4?611035&%A$0.."/%4A"3&[FF?$0//&$5?AI50A3&.05&A4:45&.JAF?4 &/%A%&7['*-/".O&9?AF?3&$&*7&A%&7[?AI'*-&/".&A"/%A&95&/4*0/A?/05? A"--08&%JF?(&5A%&7['*-/".O&9?F?'*/*4)?AI4&37&3JF?&9*5?AI50A01&3" 5*/(A4:45&.JAF?)&-1?AI5)*4A.&44"(&JFF?&?4$"1&A$)"3"$5&3[A!F?,?&: #0"3%A*/165A&3303BF!`?6?/"#-&A50A5&--A)045A5)"5A4&44*0/A*4A'*/*4 )&%!`?6?/"#-&A50A-0$"5&A'*-&?!?,?&3.*5N?!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!`?3?&$&*7&A'"*-63&?!`?&?3303A*/A3&$&*7&%A'*-&A/".& ?!?6?/"#-&A50A3&$&*7&ANA)"/%-&3!A&3303?!`?6?/"#-&A50A3&$&*7&ANA* /46''*$*&/5A%*3&$503:A41"$&!F?3?&.05&A-*/&A*/165A&3303BF?!`?6?/" #-&A50A3&$&*7&A-"5&45A1"$,&5?!`?6?/"#-&A50A4&/%ANA%*3&$503:A&330 3!`?6?/"#-&A50A4&/%ANA)"/%-&3A&3303!`?6?/"#-&A50A4&/%!`?6?/"#-&A 50A3&$&*7&ANA%"5"A&3303!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! end of data After the program exits back to the monitor, you should save the data with: .SAVE SYS FIELD1.SV 10000-17577=0 |
Added src/kermit-12/k12glb.boo.
> > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | K12GLB.TE 8@U;<C9@@dP^D44PCD59CUA1BDi5CT=584e1@e9?2C4a;DY1CRda>CPh2C0i>S0`2D=:C0d:3@X_ 2EEC@DM5>Pd:3@X_2Bi@@D`P;4\a<Te9E3a4AEHjBc4bCDUD;dD_ARm>;eL92D=BAD5DAB0RDeU= @Tm<Db8PC4UCE4U>Ab16BDa584m>84ACBcX=2Rl9;TeECTLPBc4bAda2;UA5;4\a<U13B0T92EE@ A45DAB14Dd\jBc4bD4=8;U113@X=2Rl9@e95@EA5Db14Dd\jBc4bD4=8;U1184IBCddPA5=;>T\a <U13B2i@@B0ZEdUDB21>Cb12@D=;EE0Z;R1DB4DPEE=5DR1=EE=D3@X_2D=BAD5DAB11CUTP@T53 BeE@84I9C4DPATUBDe@P:51BAE=ECD52C5TPATmB84=?CE11DTUCCdhPD5EBD4mCAE<PE4lPDdE5 3@X_2EM8@E@PDTE3ADiDC5TP@dQ1CTM5A2T^3@X=2Rl9@e95@EA5Db14Dd\jAE5E@EA5;UA=85M9 E4PPEE14@EA5A211ATI5@eA5A215DEE1E4EC84m>C5TP@E<P@DhP@E9DBDI1@e@^3@X=2Rl9@DiI 84EAED5DAD@PDeU=@Tm<Db12AEAGADE>85A8AB1CD4E3BD5<84A5C4U=BEA5DU<P@E9585E@A45D AD@^3@X=2Rl9E4Q585=@AD=9@D`PA4E<BDe9E4EBDb11DTDP8Sa3DShlC4Hn;blR85M8BD=884eE De@PD595@dE4AB11CT@PADi485A8AB17C4m2@D`=2Rl9DeU=@Tm<Db1DCb12AB15DEE1E4E4;R1? CTaI84EAED5DAB1CE45DADe5CUAC845>A212C45>Bb1<BDi5Db11CT@P?4I6?Pd:;`U3B45B@D=D AE9C845BAB11C4a?EdE48495E5M5ADhPE4Q585=@AD=9@D`PA4E<BDe9E4EBDbh=2Pd:;`U1CUTP DeU=@Tm<84i?E218@EI9CTLP@B1=@E=DAE8PET5<EDDPBDhPBc4bCDUD;TaC85M9C4`P@TDP@dQ1 CTM5A21DCb1185I1C5E53@X_2Dm683Ti>CTPE4lPATmB@dDP@DhP@E=CADe2C5TPAE9BCe8^3@X= 2R4=2T0E<14EFA\Q@B5J8TE5ATdb9dQH@DXjD`hC6b95B51GADI=<RMB;UDiBCYO4a]C?A]B3@X^ ;BQA>B\c:Bdf8TMA>B\c:cI:9d199A<KECPUDCT\;UPi3@Y5DT\a<Te9E2i<Da]ICCU=<C0\;U0` ;2i;Cd4K4@d:@1Da4E4h8ThQ@R4`@BdN8295@dm26bL?G5Di9dQ;Ad5:DcdKDCPRA@5>Cb1F@DaE AB16Ce8P0@d:BU<>4a]B;UDiDcdKDU4i;2iD0@d:0BE59e<>4a]B3@X^EC5L6e4a;2i;DCPRADTi >CTi6bMA>29>DCTV=c0`<2la<30`G54i9SL`<2la<31LDCTV=c0_<C1LDCTV=e`W14`A3@Y05C8A DEPRAA0WBTMHBQ9B6eLKB5QGCEM=F5U>3@X_;a]<<2`^D4EBAE5E@EA5;UA=6eTjCPhH6a]=F39O 3@X_;a\`C30\;T]AAB9>?3hWAEPA3@Y05D4AFEl=2Rl_6d``;2i;8EPQ>U<K8TEJBS4bBA]1CePK 9`d:<4`^;5Y;CC0A3@Y5EdEAED5DABiDCA]J8Ti:>U<^6b95FTY9;U116bM:BDEB6eY:<SM96`d: <5QHCEPUF1]=@BL1Ce15CR19CU1EE216BDa5845>A21DFE1582M=@BLPE4lPDeA1DU@13@XJ~~~~ ~? |
Added src/kermit-12/k12glb.enc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | (REMARK Image File Created by PDP-8: 05-Sep-1990) (REMARK File Date: 11-Jan-1988) (FILE K12GLB.TE) (REMARK File decodes to K12GLB.TEC aka GLOBAL.TEC, a TECO macro for) (REMARK file maintenance of KERMIT-12 source files.) <88DGIKOG68I3SI15010K9MA18JGL8H4L9P2EAGQ2056K8FQI628J2GMH98QE2B9JJ0S31> <69G6EG30G4Q8C2CK390RS5514QL8GAKE0TA1KGDU2IGI0N2842C6B0KMGP99L2K8F1KB9> <B39CHHAJA4I8NV8L26SBO2V5BL14I3AHA4292I412JQMA45H7IAC12AJ1KIHAE9527C82> <4IL6443IFA81K815T780AIBQISL6I9O276IP32H3I9H1EAL1IO55K68QG0I4GIK4GALA4> <8GA4AGG3AEIB6IP32H888D1E2K00RK501A9F8GQL4H0LAH2J881L795J9CHH8K446GN1A> <1904HH4U16K8IQJ6EGKMGP3A1A80BH438G5AT298I720H7I4121MGP5B9855P104I04AH> <ALAD2IQ82LAH9I1NOAA2946L2K85252814S1CK88Q1AIO5AGG98OIC0HAKC94IAC2KAA1> <50L2LAD2D4G94O1CL8OIF887K6H6HA1AI6I94U175A0ILAK1KU92GACIK0JQ56L2I1NOA> <82C5E90GAH2I6HAKAH729G2P8GOKGH758SI4SA80RK501A9F8GQL4H0LAH2J881L795L8> <LAH8GAL8GNDAH10ILP58144AL2G8GAL8H214126AHI46LA48H908K8LALA38L10SJP4O1> <CI842J4G84SL0KA9292HH47PA01N8A02KIUL0P9P902HALAH0I8K248KULIH1C9T2J482> <KATA48NI588458L2J412G6HA4JH0K41A48J6KIH4LAGII0KQ42L95402LAH24292U8G0D> <Q2G0L4NKAHA8A8056H2P8CI10J249H2K96ADAL14AH9H40II0HA24CU3AB1U6J74C8NI5> <T10GLQ4J11L41AD4KO58H85A9238HA4A4G29O248HA4SGG8AH25E824O97G87AC02KIUH> <9TB522OJQL6GG49SH08HAI0H8HAL2K8HA2TSG59QACA80KALAK85A5682L8H0K8LADAJH> <L8GGE85244824PP0K9F108IAKSH9H40IE0H23OP307QGD8BPGIL4285A18GQKAD9540I1> <8H8I0H6F9H2N8HA20L14AHAN4H84SHA591900KQ4B51I842C8H64AH4P9LAK4H857KN01> <AGD8BOGI970B52JQMA45H7K43QE8L420H0PAOIE0HQ43KG5852J4H854HBC84IL0H94I1> <739CHHAJA4IKN39H10ILP4O16288258GOKGH758TA48824U4G440AM8J2LA86V1909CJP> <I14SI741P4L04UL329SI30H94217584QJ8H94Q960B5A54KH4VP901N8A02MI2455809G> <A495I4DL86H188IKAD329L97GI1K3951ACOE86QI4L47A125QHIJ48JJ5QALAIFJKK9J3> <D9T46P0RO555K986E9IMCKM5L922HPJICLK5EHM89SK04IR2CILAE153GSJ5QAO83AGKD> <919D1IIJA59GN5AE8R8JEJI8OS60PE0K22PCN19UQ104D0QD012KOHGK92457388112GF> <2QGG549234JO1NSJJBIAL89TKGH3Q84AJMF9528S48NG1AJR20L0L9H25C814U19006GD> <0IN56K9I3CPEIL8L7CUJAAAHAB22S00Q1L01A982FP9L2CGR43F0KLAS64OR2KA2PCN2A> <4HO6HCKICSP758R29Q3HOH2A5HP6DO30CO15SPG0C1LP58J4O1N6C0IUKOC60IHCE93FS> <O5671G4KB3I8RNBG842J20Q0512K9I4K95G92N21AAGHQKK8913EQNAI3LGH6TAT2OSM9> <0RS545V0R4C72OL828LA5AKA42LA45RAK66T5I5781P0RQ6QLHSP21NOA6BO1M96C619E> <2IQ4BOH27HPU2H8LGG6G188L2G85JLFI1BPF66O4OGMB5OH12M0JLD9L4AI56IH32H4H3> <CAFMM02F86I63IC8B5LK56H610DA2ILE52LAL21AHA2SL6Q3D12KJH3LP9K3D928MKKKG> <N1A10RK9QKI92K3EIQ8CKJE0DQ1L9GGM14QLC4B38R0G8IEH7LA12EI82KSL84AHH08IA> <KOGGE85A48825IL8443974G82E9A09T2J2L0545A11MGAX003IZAEFEFVVVVVVV> (END K12GLB.TE) (REMARK End of File) |
Added src/kermit-12/k12ip0.odt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | This is an example of an ODT session to manually enter the IPL0.SV program followed by an explicit SAVE command. This is identical to loading the binary produced by IPL0.PA, a customized version of K12IPL.PAL. Locations marked with * are modified according to the REC parameter; locations marked with ** are modified according to the SEN parameter; locations marked with *** are modified according to the BRATE parameter. All values in this example are obtained using default parameters. All commands are normally terminated with CR except within ODT. In ODT all commands are terminated with LF to automatically advance to the next location, except the final numeric command which terminates with CR to end the loading. The xxxx indicates the former contents which are to be ignored. Exit from ODT is via ^C. .ODT 10200/xxxx 6032 10201 /xxxx 1236 10202 /xxxx 6413 ** 10203 /xxxx 6031 10204 /xxxx 5203 10205 /xxxx 6036 10206 /xxxx 6416 ** 10207 /xxxx 6046 10210 /xxxx 6406 * 10211 /xxxx 6201 10212 /xxxx 4236 10213 /xxxx 5212 10214 /xxxx 5217 10215 /xxxx 4236 10216 /xxxx 5232 10217 /xxxx 7106 10220 /xxxx 7006 10221 /xxxx 7006 10222 /xxxx 3635 10223 /xxxx 4236 10224 /xxxx 5232 10225 /xxxx 1635 10226 /xxxx 3635 10227 /xxxx 2235 10230 /xxxx 0177 10231 /xxxx 5215 10232 /xxxx 7600 10233 /xxxx 6203 10234 /xxxx 5632 10235 /xxxx 0000 10236 /xxxx 0007 *** 10237 /xxxx 6401 * 10240 /xxxx 5237 10241 /xxxx 6406 * 10242 /xxxx 0230 10243 /xxxx 1256 10244 /xxxx 7510 10245 /xxxx 5237 10246 /xxxx 1255 10247 /xxxx 7500 10250 /xxxx 5636 10251 /xxxx 0254 10252 /xxxx 2236 10253 /xxxx 5636 10254 /xxxx 0077 10255 /xxxx 7700 10256 /xxxx 7737 ^C .SAVE SYS IPL0 ;10200 IPL0.SV is now ready to run as documented in K12IPL.PAL. |
Added src/kermit-12/k12ip1.odt.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | This is an example of an ODT session to manually enter the IPL1.SV program followed by an explicit SAVE command. This is identical to loading the binary produced by IPL1.PA, a customized version of K12IPL.PAL. Locations marked with * are modified according to the REC parameter; locations marked with ** are modified according to the SEN parameter; locations marked with *** are modified according to the BRATE parameter. All values in this example are obtained using default parameters. All commands are normally terminated with CR except within ODT. In ODT all commands are terminated with LF to automatically advance to the next location, except the final numeric command which terminates with CR to end the loading. The xxxx indicates the former contents which are to be ignored. Exit from ODT is via ^C. .ODT 00200/xxxx 6032 00201 /xxxx 1236 00202 /xxxx 6413 ** 00203 /xxxx 6031 00204 /xxxx 5203 00205 /xxxx 6036 00206 /xxxx 6416 ** 00207 /xxxx 6046 00210 /xxxx 6406 * 00211 /xxxx 6211 00212 /xxxx 4236 00213 /xxxx 5212 00214 /xxxx 5217 00215 /xxxx 4236 00216 /xxxx 5232 00217 /xxxx 7106 00220 /xxxx 7006 00221 /xxxx 7006 00222 /xxxx 3635 00223 /xxxx 4236 00224 /xxxx 5232 00225 /xxxx 1635 00226 /xxxx 3635 00227 /xxxx 2235 00230 /xxxx 0177 00231 /xxxx 5215 00232 /xxxx 7600 00233 /xxxx 6203 00234 /xxxx 5632 00235 /xxxx 0000 00236 /xxxx 0007 *** 00237 /xxxx 6401 * 00240 /xxxx 5237 00241 /xxxx 6406 * 00242 /xxxx 0230 00243 /xxxx 1256 00244 /xxxx 7510 00245 /xxxx 5237 00246 /xxxx 1255 00247 /xxxx 7500 00250 /xxxx 5636 00251 /xxxx 0254 00252 /xxxx 2236 00253 /xxxx 5636 00254 /xxxx 0077 00255 /xxxx 7700 00256 /xxxx 7737 ^C .SAVE SYS IPL1 IPL1.SV is now ready to run as documented in K12IPL.PAL. |
Added src/kermit-12/k12ipg.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | / IPL GENERATING PROGRAM / LAST EDIT: 08-OCT-1991 12:00:00 CJL / MUST BE ASSEMBLED WITH '/F' SWITCH SET. / THIS IS A UTILITY NAMED IPLGEN (AKA K12IPG) TO CREATE FIELD0.IPL (AKA / K12FL0.IPL) AND FIELD1.IPL (AKA K12FL1.IPL). THESE FILES ARE IN TURN MEANT / FOR USE WITH THE DIRECT LOADING PROGRAM IPLOAD (AKA K12IPL). FUTURE VERSIONS / OF K12MIT.SV MAY "GROW" TO USE FIELD TWO, IN WHICH CASE THIS PROGRAM WILL HAVE / TO BE CHANGED. / THIS PROGRAM ALWAYS RESIDES IN THE NEXT FIELD BEYOND K12MIT.SV, AND CREATES / FILES FOR ALL FIELDS LOWER THAN ITS LOADING FIELD. THIS CURRENTLY REQUIRES A / 12K MACHINE TO ENCODE ALL LOCATIONS 00000-07577 AND 10000-17577. / USAGE: / SINCE K12MIT.SV IS A COMPLETE IMAGE FILE, IT MUST BE LOADED FIRST IN IMAGE / MODE, AND THEN OVERLAYED WITH THE BINARY OF THIS ASSEMBLY: / .PAL IPLGEN<IPLGEN/E/F ASSEMBLE IPLGEN PROGRAM. / .LOAD K12MIT.SV/I$*IPLGEN/G=20200 LOAD K12MIT.SV IN IMAGE MODE; THE $ / INDICATES USING <ESC> TO TERMINATE / THE LINE; THEN LOAD IPLGEN AND START. / THE FILES SYS:FIELD0.IP AND SYS:FIELD1.IP WILL BE CREATED AND THE PROGRAM / EXITS TO THE KEYBOARD MONITOR. THE RESULTANT FILES MAY BE EDITED AS LONG AS / THE RULES OF .IPL FORMAT ENCODING ARE OBEYED (ADDITIONAL LOWER-CASE LEADER / COMMENTS SHOULD BE ADDED AT THE BEGINNING, AND UNRESTRICTED COMMENTS AT THE / END). / ERROR MESSAGES: / ERROR NUMBER PROBABLE CAUSE / 5 ERROR WHILE ATTEMPTING TO ENTER OUTPUT FILE. / 6 OUTPUT FILE LARGER THAN AVAILABLE FILE SPACE. / 7 ERROR WHILE CLOSING THE OUTPUT FILE. / 8 I/O ERROR WHILE ENCODING FILE DATA. / EQUATED SYMBOLS. CLOSE= 4 /CLOSE OUTPUT FILE DFIELD= 2 /PROGRAM LOADS INTO FIELD TWO (ALSO OUTPUT COUNT) DFLD= DFIELD^10 /PROGRAM FIELD FOR CDF INSTRUCTIONS ENTER= 3 /ENTER TENTATIVE FILE NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7777= CLA CMA /LOAD AC WITH 7777 SBOOT= 7600 /MONITOR EXIT SYSENTR=7607 /CALL SYS: HANDLER HERE USERROR=7 /USER SIGNALLED ERROR USRENT= 7700 /USR ENTRY POINT WHEN NON-RESIDENT USRFLD= 10 /USR FIELD WRITE= 4000 /I/O WRITE BIT FIELD DFIELD /WHERE WE LOAD *20 /GET PAST AUTO-INDEX AREA BUFPTR, .-. /OUTPUT BUFFER POINTER DANGCNT,.-. /DANGER COUNT FOR OUTPUT FILE FCNT, -DFIELD /FIELD, FILE COUNTER FNAME, FILENAM FIELD0.IP /OUTPUT FILE NAME FIELD LATEST, .-. /LATEST OUTPUT CHARACTER OUTRECO,.-. /OUTPUT RECORD SCRCASE,.-. /CURRENT MESSAGE CASE SCRCHAR,.-. /LATEST MESSAGE CHARACTER SCRPTR, .-. /MESSAGE POINTER TEMPTR, .-. /TEMPORARY OUTPUT POINTER WRDADR, .-. /WORD ADDRESS WRDCNT, .-. /WORD COUNTER DSETUP, .-. /DATA FIELD SETUP DATFLD, CDF 00+.-. /WILL BE LATEST DATA FIELD JMP I DSETUP /RETURN TO CALLER PAGE /START AT THE BEGINNING BEGIN, NOP /IN CASE WE'RE CHAINED TO LOOP, TAD (FNAME) /POINT TO DCA ENTAR1 /STORED FILENAME DCA ENTAR2 /CLEAR SECOND ARGUMENT NL0001 /SYS: IS ALWAYS DEVICE ONE CDF DFLD /INDICATE OUR CALLING FIELD CIF USRFLD /GOTO USR FIELD JMS I (USRENTRY) /CALL USR ROUTINE ENTER /ENTER TENTATIVE FILENAME ENTAR1, .-. /WILL POINT TO FILENAME ENTAR2, .-. /WILL BE ZERO JMP ENTERR /ENTER ERROR TAD ENTAR1 /GET RETURNED FIRST RECORD DCA OUTRECORD /STORE IT TAD ENTAR2 /GET RETURNED EMPTY LENGTH IAC /ADD 2-1 FOR OS/278 CRAZINESS DCA DANGCNT /STORE AS DANGER COUNT NL7777 /INDICATE INITIALIZATION JMS I [PUTBYTE] /INITIALIZE OUTPUT FILE JMS LEADER /OUTPUT LEADER JMS I (DOFLD) /OUTPUT LATEST FIELD'S DATA JMS TRAILER /OUTPUT TRAILER TAD ("Z&37) /GET <^Z> CLOSLUP,JMS I [PUTBYTE] /OUTPUT A BYTE (^Z OR NULL) TAD BUFPTR /GET THE OUTPUT BUFFER POINTER TAD (-OUTBUFFER) /COMPARE TO RESET VALUE SZA CLA /SKIP IF IT MATCHES JMP CLOSLUP /ELSE KEEP GOING NL0001 /GET SYS:'S DEVICE NUMBER CDF DFLD /INDICATE OUR CALLING FIELD CIF USRFLD /GOTO USR FIELD JMS I (USRENTRY) /CALL USR ROUTINE CLOSE /CLOSE OUTPUT FILE FNAME /POINTER TO FILENAME OUTCNT, .-. /WILL BE ACTUAL COUNT JMP CLSERR /CLOSE ERROR ISZ FNAME+2 /BUMP THE FILENAME TAD DATFLD /GET CURRENT DATA FIELD TAD (10) /BUMP TO NEXT FIELD DCA DATFLD /STORE BACK ISZ FCNT /DONE ALL FIELDS YET? JMP LOOP /NO, GO DO IT AGAIN CIF CDF 00 /YES, GOTO MONITOR FIELD JMP I [SBOOT] /EXIT TO MONITOR / ERROR WHILE OUTPUTTING THE FILE. PROCERR,NL0002 /SET INCREMENT SKP /DON'T USE NEXT / ERROR WHILE CLOSING THE OUTPUT FILE. CLSERR, NL0001 /SET INCREMENT SKP /DON'T CLEAR IT / OUTPUT FILE TOO LARGE ERROR. SIZERR, CLA /CLEAN UP TAD (3) /SET INCREMENT SKP /DON'T USE NEXT / ENTER ERROR. ENTERR, NL0002 /SET INCREMENT TAD (3) /ADD ON OFFSET DCA ERRNUMBER /STORE ERROR NUMBER CDF DFLD /ENSURE OUR FIELD CIF USRFLD /GOTO USR FIELD JMS I (USRENTRY) /CALL USR ROUTINE USERROR /USER ERROR ERRNUMB,.-. /WILL BE PASSED ERROR NUMBER / LEADER ROUTINE. LEADER, .-. /LEADER ROUTINE JMS I (SCRIBE) /CALL SCRIBE ROUTINE LEADMSG /FOR LEADER MESSAGE TAD DATFLD /GET CURRENT FIELD RTR;RAR /MOVE DOWN AND (7) /JUST FIELD NUMBER TAD (NTABLE) /POINT TO TABLE ELEMENT DCA MSGPTR /STASH THE POINTER TAD I MSGPTR /GET THE MESSAGE ADDRESS DCA MSGPTR /STORE IN-LINE JMS I (SCRIBE) /CALL SCRIBE ROUTINE MSGPTR, .-. /WILL POINT TO CORRECT MESSAGE JMP I LEADER /RETURN / TRAILER ROUTINE. TRAILER,.-. /TRAILER ROUTINE JMS I (SCRIBE) /CALL SCRIBE ROUTINE SAVEMSG /END OF FILE MESSAGE JMS OUTFLD /OUTPUT FIELD DIGIT JMS I (SCRIBE) /CALL SCRIBE ROUTINE SVMSG /.SV BRIDIGING MESSAGE JMS OUTFLD /OUTPUT FIELD DIGIT JMS I (SCRIBE) /CALL SCRIBE ROUTINE SV0MSG /0000 BRIDGING MESSAGE JMS OUTFLD /OUTPUT FIELD DIGIT JMS I (SCRIBE) /CALL SCRIBE ROUTINE SVEMSG /FINISHING MESSAGE JMP I TRAILER /RETURN OUTFLD, .-. /OUTPUT FIELD DIGIT ROUTINE TAD DATFLD /GET OUTPUT FIELD RTR;RAR /MOVE OVER AND (7) /JUST FIELD DIGIT TAD ("0&177) /MAKE IT ASCII JMS I [PUTBYTE] /OUTPUT IT JMP I OUTFLD /RETURN PAGE DOFLD, .-. /DO LATEST FIELD ROUTINE DCA WRDADR /CLEAR WORD ADDRESS TAD (-7600) /SETUP THE DCA WRDCNT /WORD COUNT WRDLUP, JMS DSETUP /GOTO DATA FIELD TAD I WRDADR /GET A WORD DCA DSETUP /SAVE IT CDF DFLD /BACK TO OUR FIELD TAD DSETUP /GET THE WORD AGAIN RTR;RTR;RTR /WANT HIGH-ORDER HALF FIRST JMS DOBYTE /OUTPUT HIGH-ORDER BYTE TAD DSETUP /GET THE WORD AGAIN JMS DOBYTE /OUTPUT LOW-ORDER BYTE ISZ WRDADR /BUMP TO NEXT ADDRESS TAD WRDADR /GET LATEST ADDRESS AND (37) /JUST LOW-ORDER BITS SNA CLA /SKIP IF NOT AT GOOD BOUNDARY JMS PUTCRLF /ELSE OUTPUT LINE BREAK ISZ WRDCNT /DONE ALL WORD YET? JMP WRDLUP /NO, KEEP GOING JMP I DOFLD /YES, RETURN TO CALLER DOBYTE, .-. /OUTPUT A SIX-BIT BYTE ROUTINE AND (77) /JUST SIX BITS TAD (41) /ADD ON OFFSET TO MAKE IT PRINTABLE JMS I [PUTBYTE] /OUTPUT IT JMP I DOBYTE /RETURN / <CR>/<LF> ROUTINE. PUTCRLF,.-. /OUTPUT <CR>/<LF> ROUTINE TAD ("M&37) /GET A <CR> JMS I [PUTBYTE] /OUTPUT IT TAD ("J&37) /GET A <LF> JMS I [PUTBYTE] /OUTPUT IT JMP I PUTCRLF /RETURN / MESSAGE PRINT ROUTINE. SCRIBE, .-. /MESSAGE PRINT ROUTINE TAD I SCRIBE /GET IN-LINE POINTER ARGUMENT DCA SCRPTR /STASH THE POINTER ISZ SCRIBE /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO DCA SCRCASE /LOWER-CASE SCRLUP, TAD I SCRPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS SCRPRNT /PRINT IT TAD I SCRPTR /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE AND (77) /JUST SIX BITS SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD (-"^+100+"%) /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND (40) /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER JMS I [PUTBYTE] /OUTPUT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,JMS PUTCRLF /OUTPUT <CR>/<LF> JMP I SCRPRNT /RETURN SCRFLIP,TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES DCA SCRCASE /STORE NEW INVERTED CASE JMP I SCRPRNT /RETURN PAGE PUTBYTE,.-. /OUTPUT A BYTE ROUTINE SPA /ARE WE INITIALIZING? JMP PUTINITIALIZE /YES AND (177) /JUST IN CASE DCA LATEST /SAVE LATEST CHARACTER TAD LATEST /GET LATEST CHARACTER JMP I PUTNEXT /GO WHERE YOU SHOULD GO PUTNEXT,.-. /EXIT ROUTINE JMP I PUTBYTE /RETURN TO MAIN CALLER PUTINIT,CLA /CLEAN UP TAD OUTRECORD /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (OUTCNT) /CLEAR ACTUAL FILE LENGTH PUTNEWR,TAD (OUTBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER PUTLOOP,JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT TAD BUFPTR /GET POINTER VALUE DCA TEMPTR /SAVE FOR LATER ISZ BUFPTR /BUMP TO NEXT JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT JMS PUTNEXT /GET A CHARACTER RTL;RTL /MOVE UP AND (7400) /ISOLATE HIGH NYBBLE TAD I TEMPTR /ADD ON FIRST BYTE DCA I TEMPTR /STORE COMPOSITE TAD LATEST /GET LATEST CHARACTER RTR;RTR;RAR /MOVE UP AND AND (7400) /ISOLATE LOW NYBBLE TAD I BUFPTR /ADD ON SECOND BYTE DCA I BUFPTR /STORE COMPOSITE ISZ BUFPTR /BUMP TO NEXT TAD BUFPTR /GET LATEST POINTER VALUE TAD (-2^200-OUTBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING ISZ DANGCNT /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I (SIZERR) /JUMP IF SO CDF DFLD /SET OUR FIELD CIF 00 /GOING TO SYSTEM FIELD JMS I (SYSENTRY) /CALL I/O HANDLER 2^100+DFLD+WRITE /WRITE SOME PAGES FROM OUTPUT BUFFER OUTBUFFER /BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER JMP I (PROCERR) /OUTPUT ERROR! ISZ I (OUTCNT) /BUMP ACTUAL LENGTH ISZ PUTRECORD /BUMP TO NEXT RECORD JMP PUTNEWRECORD /KEEP GOING PAGE / TEXT MESSAGES. LEADMSG,TEXT "LEADER FOR DIRECT LOAD FILE WHICH MUST BE IN LOWER CASE%" TEXT "%FILE CONTAINS KERMIT DATA IN IPL ENCODED FORMAT%%" TEXT "THIS FILE CONTAINS DATA FOR FIELD" ONEMSG, TEXT " ONE%%^" SAVEMSG,TEXT "END OF DATA%%^A^FTER THE PROGRAM EXITS BACK TO THE MONITOR, " TEXT "YOU SHOULD SAVE THE DATA WITH:%%.^SAVE SYS FIELD^" SVMSG, TEXT ".^SV " SV0MSG, TEXT "0000-" SVEMSG, TEXT "7577=0%" ZEROMSG,TEXT " ZERO%%" / DIGIT MESSAGE POINTER TABLE. NTABLE, ZEROMSG /POINTER TO ZERO MESSAGE ONEMSG /POINTER TO ONE MESSAGE PAGE /GET TO A GOOD BOUNDARY OUTBUFF=. /OUTPUT BUFFER HERE $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12ipl.doc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Initial Program Load (.IPL) format description Some of the latest KERMIT-12 binary files are encoded in a specialized format designed to allow direct memory loading without an elaborate protocol such as KERMIT. This document will describe the internal encoding of this format known as IPL, and related subjects. The Initial Program Load (.IPL) format is designed expressly for use with the IPL loading program. An error-free connection to a serving host is required as no checking or recovery is performed by the program. (The program itself is meant to be keyed in on the target PDP-8 where there is no other means of acquiring KERMIT-12.) The format is also meant to be "printable" in the same sense as ENCODE, .BOO, or uuencode files. This makes the file format more "friendly" to the host system, and allows simple editing of the file to insert comments, etc. An .IPL file starts with at least one lower-case character (not counting `) meaning any character in the range 141-177 octal. Any number of similar characters may follow immediately to create an arbitrary length leader, but the lower-case requirement must be strictly enforced. Once a non-lower-case character is encountered, it is accepted as the first data character. Data characters continue throughout the rest of the file until the next occurrence of a lower-case character which ends the loading. Any characters past this point are ignored and can be freely added as a trailing comment. Throughout the entire .IPL file, control characters and <SPACE> (000-040 octal) are ignored and may be used within the leader to make the file comment(s) more readable. In some loading situations, <NUL> or <SPACE> characters may be pre-pended to the file to give the operator sufficient time to run down the hall between machines in different rooms to start the PDP-8 loading program after first starting the server. Data lines are broken every 64 characters with <CR>/<LF> to make the file more "readable" to the host system. Each data character in the body of the file represents six bits of PDP-8 data encoded in the form (value+041 octal). This causes 00 octal to be represented as ! through 77 octal to be represented as `. Data characters are taken in pairs where the first character is the upper six bits and the second is the lower six bits of a twelve bit word. Loading is implied to start at 0000 of the loading field and continues through at most 7577. The operating system generally prohibits loading into 7600-7777. This is not a problem since KERMIT-12 conforms to these limitations as a matter of design. If the loading field is 3 or greater (or possibly 2 in certain configurations) then the entire field can possibly be loaded. This is never recommended because such a file would violate loading restrictions of certain configurations. (The general rule is to never load into x7600-x7777 for any field x in the range 0-7.) The loading field itself is not contained in the file data, so it is the user's responsibility to setup the loading program parameters accordingly. File comments (in lower-case if in the leader) often contain this information to aid the user. After loading is complete, the loading program exits to the operating system. The user must save the recently loaded data as an image (.SV) file by providing explicit arguments to a SAVE command. It is recommended that the appropriate command be contained in the trailer of the .IPL file as a comment. Placement at the end of the file allows the commentary to be in upper-case, thus allowing it to be given in the exact form required by OS/8. Certain characters such as "." are required in the complete documentation of these commands which are not allowed in the leader area. The leader can contain a comment referring the user to the end of the file for the information itself. [end of file] |
Added src/kermit-12/k12ipl.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | / INITIAL PROGRAM LOADER / LAST EDIT: 06-OCT-1991 05:00:00 CJL / MAY BE ASSEMBLED WITH '/F' SWITCH SET. / THIS PROGRAM IS USED TO LOAD BINARY PROGRAMS IN .IPL FORMAT DIRECTLY. AN / ERROR-FREE PATH IS ASSUMED BETWEEN THE PDP-8 (OR DECMATE) AND THE DATA SERVER. / SUCH A CONNECTION COULD BE ESTABLISHED BETWEEN THE PDP-8 AND A NEARBY PC USING / A SHORT RS-232 CABLE WITH NULL MODEM. THIS UTILITY IS WRITTEN FOR THE EXPRESS / PURPOSE OF LOADING KERMIT-12 ON PDP-8 SYSTEMS WITHOUT IT. ONCE KERMIT-12 HAS / BEEN LOADED, ITS USE SUPERSEDES THIS PROGRAM ENTIRELY. / THERE IS NO FLOW-CONTROL PROTOCOL PER SE BETWEEN SYSTEMS, SINCE THE UTILITY / STORES DATA DIRECTLY INTO PDP-8 MEMORY AND THEREFORE DOESN'T REQUIRE / SYNCHRONIZATION DELAYS. INITIAL SYNCHRONIZATION CAN BE ACCOMPLISHED BY / SENDING A SINGLE CHARACTER FROM THE PDP-8 TO THE SERVER SIDE WHICH STARTS THE / TRANSMISSION. ALTERNATIVELY THE PDP-8 PROGRAM CAN BE STARTED FIRST, THEN THE / SERVER CAN SEND DATA DIRECTLY TO THE PDP-8; THIS ASSUMES THE ABILITY TO START / THE SERVER TRANSMISSION FROM THE SERVER'S END. / THIS PROGRAM IS FOR ANY MODEL PDP-8 WITH A KL-STYLE REMOTE LINE SERIAL / INTERFACE OR EQUIVALENT. DEFAULT PARAMETER VALUES ARE CONSISTENT WITH THE / DISTRIBUTION SETTINGS FOR KERMIT-12 ITSELF AND ARE EASILY CHANGED. IT CAN BE / MODIFIED FOR USE ON VARIOUS DECMATE MODELS, BUT WILL BECOME SOMEWHAT LARGER IN / THE PROCESS DUE TO THE MUCH GREATER COMPLEXITY OF THE VARIOUS DECMATE / COMMUNICATIONS INTERFACES UNLESS THE COMPATIBLE PRINTER PORT IS CHOSEN (DEVICE / 32/33). / THIS PROGRAM SHOULD ONLY BE USED IF NO OTHER METHOD IS AVAILABLE AS THE / ASSUMPTION OF AN ERROR-FREE CONNECTION IS UNRELIABLE. DISTRIBUTION PATHS SUCH / AS INTERNET FTP OR CONTACTING THE AUTHOR CAN YIELD COMPLETE COPIES OF THE / PROGRAM DISTRIBUTION ON APPROPRIATE MEDIA WHERE APPLICABLE. / USAGE: / THIS PROGRAM IS RESTRICTED TO A SINGLE-FIELD LOAD ONLY. SEVERAL VARIANT / VERSIONS MUST BE CREATED TO COMPLETELY LOAD KERMIT-12. (AS OF THIS WRITING, / ONLY A FIELD ZERO AND FIELD ONE VERSION NEED BE CREATED. HOWEVER, KERMIT-12 / MAY BECOME LARGER!). THE EXAMPLE GIVEN BELOW ILLUSTRATES USAGE FOR FIELD ONE. / REPEATING THE PROCESS WITH THE INTENDED CONTENTS OF ALL OTHER FIELDS WILL / (EVENTUALLY) YIELD AN ENTIRE COPY OF KERMIT-12: / .R IPL1 (OR RUN DEV IPL1) / [PRESS AN APPROPRIATE KEY (SUCH AS CR) TO START WAITING FOR THE TRANSFER] / [THE DATA IS TRANSFERRED FROM THE OTHER SYSTEM AT THIS TIME AND THE PROGRAM / EXITS AUTOMATICALLY TO THE KEYBOARD MONITOR.] / .SAVE DEV FIELD1.SV 10000-17577=0 / CHANGING ALL OF THE ONES IN THE ABOVE EXAMPLE TO ZERO WILL YIELD THE / FIELD-ZERO LOAD FILE FIELD0.SV AS WELL. DEV IS ANY CONVENIENT OS/8 DEVICE / SUCH AS SYS OR DSK. (IT ISN'T CRITICAL SINCE THESE FILES CAN BE DELETED ONCE / KERMIT-12 IS CREATED.) ONCE ALL PORTIONS OF KERMIT-12 HAVE BEEN OBTAINED, THE / FOLLOWING COMMANDS WILL COMBINE THEM INTO THE STANDARD RELEASE FILE K12MIT.SV: / .LOAD DEV:FIELD1.SV/I,FIELD0.SV/I$ LOAD IMAGE FILES FIELD1.SV, FIELD0.SV / WITH /I SWITCH SET. (FUTURE VERSIONS / MAY REQUIRE LENGTHENING THE COMMAND TO / ADD MORE FILES SUCH AS FIELD2.SV, / FIELD3.SV, ETC.) $ INDICATES USING / <ESC> TO TERMINATE LINE. / .SAVE DEV K12MIT=1 SAVE COMPLETED FILE ON ANY AVAILABLE / DEVICE DEV (PREFERABLY SYS). / CREATING THE VARIANT VERSIONS. / ONLY ONE PARAMETER NEED BE CHANGED TO PRODUCE THE VARIOUS VERSIONS REQUIRED. / SETTING DFIELD=0 CREATES A VERSION USED TO OBTAIN THE FIELD-ZERO DATA. / SETTING DFIELD=1 CREATES THE FIELD-ONE VERSION. LEGAL VALUES FOR DFIELD / EXTEND UP TO SEVEN. THE DEFAULT VALUE IS ZERO. NOTE THAT THE FIELD-ZERO / VERSION LOADS INTO FIELD ONE WHILE ALL OTHER VERSIONS LOAD INTO FIELD ZERO. / THIS IS NECESSARY TO ALLOW UNRESTRICTED FILE LOADING WITHIN THE SELECTED / FIELD. (OS/8 ITSELF GENERALLY BARS LOADING INTO 7600-7777 OF ANY FIELD, THUS / LOADING IS ACTUALLY RESTRICTED TO 0000-7577 OF THE SELECTED FIELD.) / OTHER ASSEMBLY PARAMETERS. / SETTING REC= XX SETS THE REMOTE RECEIVE DEVICE CODE TO / XX (DEFAULT VALUE IS 40). / SETTING SEN= XY SETS THE REMOTE TRANSMIT DEVICE CODE / TO XY (DEFAULT VALUE IS 41). / SETTING BRATE= NN SETS THE BAUD RATE (FOR SYSTEMS THAT / SUPPORT THIS FEATURE SUCH AS THE / VT-78) FROM A TABLE OF VALUES (00-17) / AS FOLLOWS: / NN (OCTAL) BAUD RATE / 00 50 / 01 75 / 02 110 / 03 134.5 / 04 150 / 05 300 / 06 600 / 07 1200 / 10 1800 / 11 2000 / 12 2400 / 13 3600 / 14 4800 / 15 7200 / 16 9600 / 17 19200 / (THE DEFAULT VALUE IS 07 FOR 1200 / BAUD COMMUNICATIONS.) / ASSEMBLY INSTRUCTIONS FOR ANY VARIANT VERSION. / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ZERO DATA IS CALLED / IPL0.PA, THE FOLLOWING COMMANDS WILL CREATE IPL0.SV: / .PAL IPL0<IPL0/E/F ASSEMBLE VARIANT FOR FIELD ZERO / .LOAD IPL0 LOAD THE BINARY / .SAVE DEV IPL0 ;10200=0 SAVE THE IMAGE ON ANY DEV (SUCH AS / SYS). / NOTE THE NON-STANDARD STARTING ADDRESS FOR THE FIELD ZERO VERSION (10200). / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ONE DATA IS CALLED IPL1.PA, / THE FOLLOWING COMMANDS WILL CREATE IPL1.SV: / .PAL IPL1<IPL1/E/F ASSEMBLE VARIANT FOR FIELD ONE / .LOAD IPL1 LOAD THE BINARY / .SAVE DEV IPL1=0 SAVE THE IMAGE ON ANY DEV (SUCH AS / SYS). / IF NECESSARY FOR FIELD TWO AND FOLLOWING, ADDITIONAL VERSIONS CAN BE CREATED. / THE SAVE COMMAND WILL BE THE SAME AS FOR IPL1. / EQUATED SYSMBOLS. / LOADING FIELD DEFINED HERE. REMOVE THE / FROM THE APPROPRIATE LINE. / DFIELD= 0 /LOAD FIELD ZERO DATA / DFIELD= 1 /LOAD FIELD ONE DATA IFNDEF DFIELD <DFIELD=0> /DEFINE LOADING FIELD ZERO BY DEFAULT / REMOTE LINE RECEIVE DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE / APPROPRIATE VALUE. / REC= 40 /REMOTE RECEIVE DEVICE CODE IFNDEF REC <REC= 40> /DEFAULT RECEIVE DEVICE CODE IS 40 / REMOTE LINE TRANSMIT DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE / APPROPRIATE VALUE. / SEN= 41 /REMOTE TRANSMIT DEVICE CODE IFNDEF SEN <SEN= 41> /DEFAULT TRANSMIT DEVICE CODE IS 41 / BAUD RATE CONTROL VALUE DEFINED HERE FOR VT-78, ETC. REMOVE THE / AND FILL IN / THE APPROPRIATE VALUE. / BRATE= 7 /BAUD RATE CONTROL VALUE IFNDEF BRATE <BRATE= 7> /DEFAULT IS VALUE FOR 1200 BAUD / REMOTE LINE IOT DEFINITIONS. / RECEIVE DEFINITIONS. / RKCCIOT=REC^10+6002 /CLEAR REMOTE INPUT FLAG, AC RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG / TRANSMIT DEFINITIONS. RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11] RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG / RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG / OTHER DEFINITIONS. DATFLD= DFIELD^10 /LOADING FIELD FOR CDF INSTRUCTIONS / THE PROGRAM CODE STARTS HERE. IFZERO DFIELD <FIELD 1> /FIELD ZERO VERSION LOADS HERE IFNZRO DFIELD <FIELD 0> /ALL OTHER VERSIONS LOAD HERE *200 /START AT THE BEGINNING START, KCC /CLEAR KEYBOARD FLAG AND AC TAD INPUT /GET BAUD RATE CONTROL VALUE RSBIOT /SETUP THE BAUD RATE / RKSFIOT /**** FOR DECMATE PRINTER PORT ONLY **** KSF /WAIT FOR JMP .-1 /KEYBOARD INPUT KRB /GET THE CHARACTER RTLSIOT /OUTPUT TO REMOTE TLS /LET USER SEE IT ALSO RKRBIOT /CLEAR REMOTE INPUT FLAG NOW CDF DATFLD /SETUP LOADING FIELD JMS INPUT /TRY TO GET A VALID DATA CHARACTER JMP .-1 /LEADER FOUND, IGNORE IT JMP GOTDATA /LOAD FIRST DATA CHARACTER THERE DATLUP, JMS INPUT /TRY TO GET A VALID DATA CHARACTER JMP LOADEND /TRAILER FOUND, GO FINISH THERE GOTDATA,CLL RTL;RTL;RTL /MOVE HALF-WORD UP DCA I LOADPTR /STORE HIGH-ORDER HALF JMS INPUT /TRY TO GET A VALID DATA CHARACTER JMP LOADEND /TRAILER FOUND, GO FINISH THERE TAD I LOADPTR /COMBINE LATEST WITH PREVIOUS DCA I LOADPTR /STORE BACK COMPOSITE ISZ LOADPTR /BUMP TO NEXT L177, 177 /CONSTANT 0177; HERE JUST IN CASE IT SKIPS JMP DATLUP /GO BACK FOR MORE / COMES HERE WHEN LOADING IS DONE. LOADEND,CLA!400 /CLEAN UP; ALSO CONSTANT 7600 CIF CDF 00 /GOING TO MONITOR FIELD JMP I LOADEND/(7600) /EXIT TO MONITOR LOADPTR,0000 /LOADING POINTER INPUT, BRATE /INPUT ROUTINE; ALSO HOLDS BAUD RATE VALUE INPAGN, RKSFIOT /ANY REMOTE INPUT? JMP INPAGN /NO, WAIT FOR IT RKRBIOT /YES, READ IT IN AND L177/(177) /REMOVE PARITY BIT TAD L7737/(-41) /COMPARE TO LOWER LIMIT SPA /SKIP IF GREATER THAN THAT JMP INPAGN /ELSE IGNORE IT TAD L7700/(-100) /COMPARE TO UPPER LIMIT SMA /SKIP IF IN RANGE JMP I INPUT /ELSE TAKE IMMEDIATE RETURN ON LEADER/TRAILER AND L77/(77) /REMOVE JUNK BITS ISZ INPUT /BUMP RETURN JMP I INPUT /TAKE SKIP RETURN TO CALLER L77, 77 /CONSTANT 0077 L7700, 7700 /CONSTANT 7700 L7737, 7737 /CONSTANT 7737 $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12mit.ann.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 | Date: Sat, 11 Jul 92 15:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: A few more release files for Kermit-12 Now available are two new versions of K12DEC and K12ENC, which have a new feature for image transfer of an entire device optionally split into two parts. This comes at the request of a user, and was quite easy to add. As before, the sources document how to use the programs, etc. The new files have been installed in the regular places: BITNET/EARN Internet KERMSRV@CUVMA watsun.cc.columbia.edu Description K12MIT ANN kermit/d/k12mit.ann Announcement of KERMIT-12 K12MIT UPD kermit/d/k12mit.upd Release update (this) file K12ENB PAL kermit/d/k12enb.pal .BOO-format encoding program K12DEB PAL kermit/d/k12deb.pal .BOO-format decoding program K12MIT NOT kermit/d/k12mit.not Release notes file K12MIT DSK kermit/d/k12mit.dsk Description of RX02 diskettes ------------------------------ Date: Wed, 11 Mar 92 15:52:25 EST From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: A few more release files for Kermit-12 Now available are two new versions of K12DEC and K12ENC, which have a new feature for image transfer of an entire device. This comes at the request of several users, and was quite easy to add. As before, the sources document how to use the programs, etc. I am working on an upgrade (specifically a handler) for OS/278 to allow complete transfer of RX50 diskettes as an encoded ASCII-fied file. This utility merely handles records available to the normal file structure, but in the OS/278 RX50 case (from DEC) this is not the entire disk structure. In part this is a safety feature, so you can't access the "slushware" tracks; you can't transfer an entire image of an RX50 currently. When the system is upgraded with a suitable handler, the encoder and decoder gain access to the entire device; all other system utilities can utilize the entire RX50 as an effectively larger device. If the handler project takes too long (it is actually quite involved surprisingly enough) I will possibly resort (by popular demand) to releasing an interim program that does its own RX50 I/O as a special case of encode and decode. That would be withdrawn later when the handler is available. (DECmates are becoming available to various people around the world, but they don't have the support software to get it running; this method would allow them to get their machines up after they had merely an OS/278 bootable disk (available from DECUS) and the Kermit-12 files :-).) The two new utilities are currently useful for other devices. For example, an entire OS/8 RX01 or RX02 can be encoded as a file. With the WPS-oriented handlers installed (commonly available), images of an RX01 WPS document disk can be encoded/decoded directly. (This even includes bootable WPS RX01 systems diskettes, or even RT-11 RX01 disks!) The existant WPS/COS-style handlers allow transfer of any RX01 as long as track zero can be ignored. This is generally the case on RX01/02, but NOT RX50, thus the above problem. The new files have been installed in the regular places: BITNET/EARN Internet KERMSRV@CUVMA watsun.cc.columbia.edu Description K12MIT ANN kermit/d/k12mit.ann Announcement of KERMIT-12 K12MIT UPD kermit/d/k12mit.upd Release update (this) file K12ENB PAL kermit/d/k12enb.pal .BOO-format encoding program K12DEB PAL kermit/d/k12deb.pal .BOO-format decoding program ------------------------------ Date: Mon Oct 21 1991 12:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Release of Additional Kermit-12 Utilities Keywords: .BOO, PDP-8, PDP-12, VT-78, DECmate, OS/8 Xref: DEC PDP, See PDP This is a release of companion utilities to KERMIT-12 for the purpose of enhancing file distribution. Two areas are addressed: 1) Initial program acquisition, 2) Binary file encoding. 1) Utilities are provided to create and load copies of KERMIT-12 "on the fly" from a server such as a remote time-sharing system or a local PC on the other end of a "clean" connection to the PDP-8. Unfortunately, most PDP-8 family systems lack a communications predecessor to KERMIT-12. Most communications applications were limited to terminal emulation only, so it is rare that any PDP-8 system has an existing utility sufficient to acquire KERMIT-12. (Of course some sites have prior versions of KERMIT-12 already.) Assuming an error-free serial connection to the other system, it is possible to down-load KERMIT-12 directly into the PDP-8 memory without a protocol. This is similar to the process used for years by DEC field service to load paper-tape copies of diagnostics. Loading is limited to a single PDP-8 field at a time. Performing several load operations yields intermediary image files which can be combined into K12MIT.SV identical to the release version (except for irrelevant loading artifacts which is a consequence of the operating system itself). The format chosen for Initial Program Load (.IPL) is an encoding that yields ASCII files that should pass through any system with ease. The scenario of loading is assumed to be either direct system-to-system, or between a remote system and one of its terminals. All control characters (such as CR and LF) are ignored, thus the encoded files contain frequent line breaks to make the encoded file pallatable to the serving system. Strictly lower-case letter messages are added at the beginning and end of the file to serve as leader trailer fields as well as file documentation. Please note that while spaces are insignificent, the rest of the ASCII character set is used for loading information, so editing of .IPL files must scrupulously avoid changes to the "body" of the file. A simple program (K12IPL.PAL) is provided for .IPL loading of a single field. The user must customize it for local requirements, and then enter two variant forms of the loader. (Future releases could require additional variants to be created. The current release occupies two fields.) This process is similar to customizing the communications requirements of KERMIT-12 itself. The program is sufficiently small to allow manual entry into the system debugger (ODT) directly. Examples of such an entry session are provided as K12IP0.ODT and K12IP1.ODT. The source program may also be retyped by any available means (TECO, EDIT, etc.) if desired. Only standard PDP-8 peripherals are supported such as KL8E, KL8-JA, etc., as opposed to KERMIT-12 itself which supports various DECmate communications hardware as well. It was felt that the greatly increased complexity of supporting the DECmate communications ports would make this process too unwieldy. However, it is possible to load the data through the DECmate's printer port. The VT-78 and all prior PDP-8 models are fully supported. Distribution files include K12FL0.IPL and K12FL1.IPL which are the encoded copies of field zero and field one respectively. K12IPL.DOC is a discussion of the .IPL encoding format itself. K12IPG.PAL is the utility used to create K12FL0.IPL and K12FL1.IPL from the standard release file K12MIT.SV. (K12MIT.SV is itself distributed in encoded form as K12MIT.ENC and now also K12MIT.BOO (see below). K12IPG can be used with other programs for similar purposes if required.) 2) Utilities are provided for encoding and decoding arbitrary OS/8 files using the popular .BOO format encoding scheme. .BOO format should be compatible across dis-similar systems thus avoiding intermediary "hazards." While quite popular in the MS-DOS world for file distribution purposes, .BOO format as originally designed has an inherent weakness that makes reliable use on OS/8 family systems impossible. I have designed an extension to the format to make .BOO format sufficiently reliable to allow implementation of an encoder and decoder for OS/8 systems. Note that ENCODE format is still the format of choice for file distribution because of its more robust nature, but the shorter files created by a .BOO encoder may be desirable in certain circumstances. .BOO format files cannot pass through WPFLOP "paths" to distribute files on DECmates or VT-78, so ENCODE format is mandatory on systems used this way. The relevant problem with .BOO format has to do with file length anomalies that are a consequence of the format itself. .BOO files either end on a repeat compression field or a complete three-byte data field expressed as four characters, each only six bits significant. Should a file end with only one or two eight-bit data bytes, two or one additional null bytes will be appended to pad out the last data field. This leads to files that are one or two bytes longer than intended. At least this is the behavior on systems like MS-DOS which maintain a file byte count. Since OS/8 files are multiples of whole records, each of which can be viewed as a collection of 384 bytes, any change in a file's length of even a single extra null byte will cause the creation of an extraneous whole record. Besides wasting space, it is conceivable that an OS/8 file corrupted in this manner could actually be dangerous to use! Note also that this problem can be cumulative in that repeated transmission between systems where the file is stored locally in some decoded form, and then encoded locally before transmission to another site, can cause the problem to worsen indefinitely. Clearly, .BOO format must be firmed up to prevent this form of file corruption before it can be used safely on PDP-8 systems. (It has also been noted that widely distributed .BOO encoding programs exist on certain systems which exhibit defects such as erroneous appendage of additional null bytes onto the end of the file not indicated by the file's contents. This is clearly a program bug and not an inherent problem with .BOO format design.) The method chosen to correct the existing .BOO anomaly is to append a correction field to the end of every file requiring it. The basic correction unit is ~0 which means literally a repeat compression field with a count of zero. This construct is ignored by most .BOO decoders because it contributes nothing to the file. (At the bare minimum, .BOO decoders should implement the robustness of ignoring this type of data. It is conceivable that due to design error, a decoding program could "blow up" when encountering this data. Imagine a file lengthened by 2^32 null bytes! The exact amount of extraneously generated null bytes would likely be 2^{how many bits wide are integers on the machine} or one less than that.) .BOO-encoded files may now contain either ~0 or ~0~0 at the end to indicate whether one or two bytes are to be "taken back" respectively. Tests on MSBPCT.BAS and MSBPCT.C as currently distributed by CUCCA indicate that these corrections are perfectly ignored, thus decoded files are erroneously inflated by one or two bytes. This is the expected behavior of these older decoders. When used with PDP-8 DEBOO.SV (distributed in source form as K12DEB.PAL), the correct file length is maintained. PDP-8 ENBOO.SV (distributed in source form as K12ENB.PAL) is the first encoding program that creates the correction field as necessary. It is hoped that this "pioneering" effort will cause other systems' encoders and decoders to be similarly updated. Overall program operation for the encoder and decoder is identical to the equivalent programs for ENCODE format. Documentation is contained in the source files. As in the ENCODE format decoding program, the target file name can be taken from the original file name imbedded within the file, or optionally the user can specify a target file name as well as a target device. When encoding, the imbedded file name will always be the original name of the file supplied as input to the encoder. The user can specify any valid combination of output file name and device for the resultant encoded file. OS/8 files passed through ENBOO/DEBOO are packed/unpacked according to the standard OS/8 "3 for 2" scheme to ensure byte accuracy where relevant. This allows files which are ASCII, but too "delicate" for ordinary transfer to be sent between unlike systems with total accuracy. This includes any file where the precise placement of CR and LF may be critical, or contains unusual characters in the file such as BEL or ESC. A perfect example of this is the interchange of TECO macros between PDP-8s (used with OS/8 TECO.SV) and IBM-PCs (used with MS-DOS TECO.EXE) with a unix system as an intermediary storage site. Both end systems use like line termination schemes incompatible with the intermediary system. Since both systems support .BOO format, the files can still be sent without loss. Most of the existing K12MIT-related files are unchanged. K12MIT.DSK is updated to reflect all new files pertaining to .IPL or .BOO utilities. K12MIT.ANN and K12MIT.UPD are updated per this announcement. All files distributed in ENCODE format are replicated in .BOO format. The new files have been installed in the regular places: BITNET/EARN Internet KERMSRV@CUVMA watsun.cc.columbia.edu Description K12MIT ANN kermit/d/k12mit.ann Announcement of KERMIT-12 K12MIT UPD kermit/d/k12mit.upd Release update (this) file K12MIT DSK kermit/d/k12mit.dsk Description of RX02 diskettes K12MIT NOT kermit/d/k12mit.not Release notes file K12IPL PAL kermit/d/k12ipl.pal .IPL loading program K12IP0 ODT kermit/d/k12ip0.odt ODT session creating IPL0.SV K12IP1 ODT kermit/d/k12ip1.odt ODT session creating IPL1.SV K12FL0 IPL kermit/d/k12fl0.ipl .IPL encoding of K12mit (FL0) K12FL1 IPL kermit/d/k12fl1.ipl .IPL encoding of K12mit (FL1) K12IPG PAL kermit/d/k12ipg.pal .IPL-format encoding program K12IPL DOC kermit/d/k12ipl.doc Description of .IPL format K12ENB PAL kermit/d/k12enb.pal .BOO-format encoding program K12DEB PAL kermit/d/k12deb.pal .BOO-format decoding program K12MIT BOO kermit/d/k12mit.boo .BOO encoding of KERMIT-12 K12PL8 BOO kermit/d/k12pl8.boo .BOO encoding of PAL8 Ver B0 K12CRF BOO kermit/d/k12crf.boo .BOO encoding of CREF Ver B0 K12GLB BOO kermit/d/k12glb.boo .BOO encoded TECO file macro [Ed. - Thanks, Charles! Additional information can be found in the new file, k12mit.not (K12MIT NOT), a message from Charles to the "PDP-8 lovers" mailing list.] ------------------------------ Date: Thu Sep 6 1990 11:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Announcing KERMIT-12 Version 10g Keywords: PDP-8, PDP-12, VT-78, DECmate, OS/8 Xref: DEC PDP, See PDP This is a maintenance release of KERMIT-12. A minor problem relating to incorrect CPU identification messages has been fixed. The problem only appeared when the CPU was a KK-8A single-board CPU; this configuration was previously untested. Thanks to Johnny Billquist of Sweden for his assistance in pinning down the problem. KERMIT-12 operation was not affected in any other way, as only the DECmate-specific identification is crucial; earlier PDP-8 family members are treated in a generic fashion except for the "frill" of model identification (all PDP-8, PDP-12, VT-78 models use software-compatible port hardware; all DECmates are incompatible and must be handled individually). We are still looking for volunteers to test the various DECmate III and DECmate III+ configurations. The rest of the release concerns the encoding of files into the "ASCII-fied" format. The format has been modified to be more robust, since the original method has proven itself to be problematic in certain practical circumstances (as reported in K12MIT.BWR). The new ENCODing format is based on five-bit encoding with repeat compression. As much as 256 repeated 12-bit words will be expressed in a five character field. Any repeated 12-bit value can be compressed, as opposed to simple zero compression, as in other common encoding schemes. (PDP-8 files often have repeated strings of the value 7402 octal, which is the HLT instruction.) The only printing characters required to pass through any distribution "path" are 0-9, A-V, X, and Z. The alphabetic characters can also be lower-case. All command lines are framed by ( and ); all data lines are framed by < and >. These characters can be changed if required, as they are not part of the data; they could be replaced by W (w) and Y (y) if necessary. (Changing the framing characters requires slight modification of the ENCODing and DECODing programs.) The new format supports a 60-bit file checksum to ensure proper decoding at the other end. The former 12-bit checksum could be compromised on long files. The new ENCODing programs creates internal (REMARK commands stating the ENCODed file's creation date, and the original file's creation date. This will aid in distribution of PDP-8 files where the user wishes to maintain proper file dates. The date algoritm used is the one proscribed by the OS/8 DIRECT program. (OS/8 systems only OPTIONALLY support file dates, and there is an eight-year "anomaly" associated with identifying the year; the user must determine the credibility of the year portion of the date. The value provided by the ENCODE program for the original file creation date is always today's year or the previous seven years as necessary; this field will not be provided if the system doesn't support the required AIW feature.) Overall file size is theoretically as much as 6/5 of the original encoding format (as the earlier format was based on six-bit encoding), but actual size varies downward due to slightly less file overhead (wider lines mean less CR LF; there is now less automatically generated verbiage), and the random improvement afforded by simple repeat compression. Virtually all K12MIT-related files are re-released at this time. There are several new files. Due to the "fragile" nature of TECO macro files, the file K12GLB.TEC is no longer being distributed directly; the file K12GLB.ENC is the same file in the new ENCODE format. The new files have been installed in the regular places: BITNET/EARN Internet KERMSRV@CUVMA watsun.cc.columbia.edu Description K12MIT ENC kermit/d/k12mit.enc Encoded binary of KERMIT-12 K12MIT DOC kermit/d/k12mit.doc Documentation file K12MIT BWR kermit/d/k12mit.bwr Updated "beware" file K12MIT DSK kermit/d/k12mit.dsk Description of RX02 diskettes K12MIT ANN kermit/d/k12mit.ann Announcement of KERMIT-12 K12MIT UPD kermit/d/k12mit.upd Release update file K12DEC PAL kermit/d/k12dec.pal Decoding program K12ENC PAL kermit/d/k12enc.pal Encoding program K12PL8 ENC kermit/d/k12pl8.enc Encoded binary of PAL8 Ver B0 K12CRF ENC kermit/d/k12crf.enc Encoded binary of CREF Ver B0 K12MIT PAL kermit/d/k12mit.pal Main source file of KERMIT-12 K12PCH PAL kermit/d/k12pch.pal KERMIT-12 source patch file K12CLR PAL kermit/d/k12clr.pal Memory clearing file K12MIT LST kermit/d/k12mit.lst Symbols-only listing file K12PRM PAL kermit/d/k12prm.pal Sample VT-78 config file K12GLB ENC kermit/d/k12glb.enc Encoded TECO file macro K12ENC DOC kermit/d/k12enc.doc Encoding format description [Ed. - Many thanks, Charles. Believe it or not, there are still quite a few PDP-8 based systems out there, and even some PDP-12s. You won't find very many other new software packages that support them!] ------------------------------ Date: 05-October-1989 From: lasner@cunixc.cc.columbia.edu (Charles Lasner) Subject: Announcing KERMIT-12 Version 10f Keywords: PDP-8, PDP-12, VT-78, VT-278, DECmate, OS/8 Xref: DEC PDP, See PDP This is to announce the release and availability of a highly revamped KERMIT program for the complete family of Digital Equipment Corporation 12-bit computers, known as KERMIT-12 (or K12MIT), Ver. 10f. Unlike its predecessors (K08MIT and K278, upon which it is partially based, as well as prior versions of KERMIT-12), KERMIT-12, as now distributed, will run on any PDP-8 model (8, LINC-8, 8/i, 8/l, 8/e, 8/f, 8/m, 8/a), PDP-12, VT-78, or DECmate (VT-278, aka DECmate I, DECmate II, DECmate III, DECmate III-plus) under any OS/8 family member operating system. Proper operation is accomplished automatically. Companion utilities are provided to deal with "ASCII-fied" binary files in ENCODE format (a mechanism designed by Charles Lasner and Frank da Cruz as a proposed successor to BOO format); ENCODE format has been employed to distribute the binary portion of this release of KERMIT-12. Due to the myriad port requirements of the various models, conditional parameters have been provided in the source (as well as a separate patching file) for models prior to DECmate I. The program auto-configures for all models of DECmate; parameters are available to select the DECmate ports (DP278, communications, printer, etc.) where applicable. Many improvements have been provided to get this KERMIT "up to speed" relative to other KERMITs. KERMIT-12 has been tested successfully with many KERMIT implementations and will run at the maximum baud rate (and sometimes beyond the DEC-stated limit!) of the relevant interface. Any console terminal configuration acceptable to OS/8, etc. can be used at any baud rate as long as local flow-control protocol is obeyed; remote flow control can be disabled at console speeds higher than the remote line rate. Connect mode I/O is fully ring-buffered in all directions with local flow control always enabled for all console terminal operations. (This should satisfy all console terminal requirements ranging from 110-baud teletypes to built-in 350-Kbaud VT-220 emulators, since any of the gamut of these ASCII terminals could be the system console terminal for any of the KERMIT-12 supported computer configurations!). KERMIT-12 will run anywhere OS/8 does, so it runs on any perfect look-alike suitably configured. Some known compatibles are: - TPA made in Hungary, this machine is an 8/l except for the silkscreened letters which are Magyar, not English. - Fabritek MP-12 - Intersil Intercept - Pacific CyberMetrix PCM-12 - Digital Computer Controls DCC-112 and DCC-112H - Computer Extensions CPU-8 (a drop-in replacement for the 8/e or 8/a cpu for a PDP-8/A-400 or -600 hex-wide box) - Computer Extensions SBC-8 (a single-board computer -8 compatible based on the 6120 like a DECmate, but compatible with -8 peripherals, not DECmate peripherals; it also supports up to 16 comm ports) Various emulators are available for PDP-10, 15 and the IBM-PC which will also support KERMIT-12 if suitably configured. Distribution files are available from CUCCA. Testing is under way for some of the more obscure configurations (e.g., DECmate III with comm port); volunteers are welcome for this task. The author can provide copies to interested parties on virtually all of the popular PDP-8 media on a time-available basis. [Ed. - Many thanks, Charles! The files are in Kermit Distribution area D with prefix K12, and the previous PDP-8 versions having prefixes K08 and K278 have been retired. Internet users may ftp the files as kermit/d/k12*, and BITNET users can get them from KERMSRV at CUVMA as K12* *.] ------------------------------ |
Added src/kermit-12/k12mit.boo.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | K12MIT.SV oX?lP0400<P70<074QTP1A8B3a80?ahE7Ph10P`581@?81<53P@P;B080@h430DB80DB4PlB03lN 5Ah>0@8<1B0D3b0C1@h403lN5Ah>0@8<1B0D3b0B1@<52AH582dP104D0B054Q8?4P0a4X20P820 P820VP00~xb\b=RXf:[hWDb<WCX<K9c<FPbM>Pd=;?e\W4aLBPe<nPeM?5d]>PclJPblGBcLWD [K6bX=C?X<7<c<oGX<?EdmC?cLWJaLBPe\GBdlW?c]>Pe<nP`\F=RZn9c<o3`Lc<fJ33d\G1e<G4 X=O9e<S?eMBPcLo4bLKIbLk7X=C8aJ3=`LW>X=??eM;3aJ2Xbk6bcLWD[]31c:V^SHZ=RZn9`m;5 `MC9c\NPblGBcLWD[K6bX<KBclfPe<S5X=?D`Lk4~~~~~ToojBT86<oJPoRObRT8><noZinI0X Po_;00P6R@S3:93kV`QSPI_7TP2P0?l2lX3>[K:4_;e4`L=4aZ5:ooH\f:gXW02`mlO4[h2^b?S2 `86<mhTlm\0XmL0Xa\S<P:g[0<T<`Lj\P<3[h03`~s5@L`1e1>=U40SAg62Q1oW100m`coPBcf RLcfPLcFm^cnmRb9e\kfP<kfPLc7m^cmmRb9alkfoL;fPLb1m^clmRb9PLkfo<;fPLb1m^clmRcE m^ckmRcjmRcimRcEl^b0P>j0Q;3DQX3cW<4@WR6VWj4@X676[\7C]H7C_X6daH4AaR6Xao7=b:4A bF6HbR7>AL[^CI[^@i\@A2^XAO_KAZ\@Af_6e<_5eF\AeR^Xeo_Af;_5fB_>0<00~<H`14__0E @00>6024e0R600kEl0;FlPcGP0kHm`cIk`CJf@[Kk`CLf`[Mb0cNlP;Oj@SP1`;Ql@;Rj@SSl`;T j@SUaPcVb0cZb@c\cPbN`AbPaQbn]1S5bAc6cA[8La3:cQa3`Ka5a[a62;oBLk3DbKcFc[`0eP3f el3HgN3XiL3Vi\3Xj\3Yk<3^W\7QX<7VaL7Yb\7^@l_QAL_Ve<_Ye\_^0<00~~~~~~~~~~~~~~~~ ~~~~~JWYigWYigWYigWYigWYigWP1`~NWH1gUHigc]LSP90g4:dGGX3GT11a[AinP91g4:dG;l3T S4ibgWP;P91g4:dG;d3RT11a[Bmn090g4:dGLX37T11a[Bmn@90G4:dG;d3P\C3LWYigP;5m\837 G\>FT61e6@ED2OZ403J<01j8eI=WC^0QPhmgCDhe@e@PCi<S7Qj4dQhe@1iheI=WC^0QT99gCPDU X917SiAdWH1gGQ>Dn12hkg9<3nn48=?SlJ2ldoLk8=?Sl_Rm8=j2DTTC;G9L89J7L8O78028ThEg 54e1QJ04P5ii7U1FH8PGC3`DdYh?1]:324b19H17NG3>P?mo_YigP5imWYkgP1inWYkgP1indijo P0UcPgPkP1knbIjoP1inc9joP79l_YigP1inaIjoP1in`IjoP?Qm_YigP;Ml7Yk_P9EgS\ibeh0c T11a[EimP91g4:dG7X3WT11a[Bmn`8a7C]hPN82gT11a[Bmn@90W4:dG;`3ST11a[G9lP91g4:dG ;d3QT11a[Bmn@9H77WMK7X3WQ4=aSEA`@00@~~~~~~~~~~~~~~~~~~~~~~~~~~~xGYjAC60QPH9g dRDeP=ioGYHSC4@20lf3@H@cP6QiPhmgST<a2HMC5>233m@T81Ve1@18PhmgU8ld;H0g7]j05>23 QAE5SQA8h80gIH2W~7gPmNTQCB2CRP1C69aE0>CH10gQlNDa;PUB4<@3SNG_6BdT<33h?9Qd<6 C890gQmNTQCB2CRPRC453SQ=@06BQGO5EP9>h2691A>PP>NCQGN4CS;PRA45X3j0gWnNC19PPA=5 4cQ>0FDPDV6?P4ANgYA@3eBDA443cH=1Q3?PDT1jIAV3cW>5e32P57[PQCA?1CDCDhH5JE<UThM> 8145^QF93Q==Q@\N9FRB@g59QAD4EX6N:>R91A>1AC<1Q8<558I>bAC>7SR?7SD138?GA35UQjMD 11QFQQi<PB=^F36UQWM>Db8N:2S5UTABIAZ52GHN:5P?3eP5PD@9Qe<CDhH5JE<UR8M<7Q@X28EC 3BQC`AC5IAYNGY73D41Pb11B@`05^U@0GXWNFB6?DP0PCQ8E84EBSaBQ@4WNG_F1S31P3aDDC84P 3c;D54P182G5ddA?X2=C1RQ>Db85027NG_F1S31P3aD<`h=DH0691A>0RgN5SGADGR\0~KgPnN @d59QAD6BH0EQCB0gWmNTQCB2CRPQCC5EP941QQ<H261AC>0UGN>@W0553SPQCC5EP9PH1\1Q2<5 P3@5TXCBP3ONG_F1S31P3aDB@h59QAD]2HRCASF9bA1>81D9QACDdP=Pd6A3@05NWYA=e1=P2A>5 2CR@E3D5TXCBICR0gWmNPE><H04?4UQ3BA6535QDD`4P0EC;E060gWmNPE><H04?4eQ>815P2K65 e43BH3IBSaB0gTmNPE><H04?4eQ>815P0K:41C>PDT6?P4CNG_F1S31P3aDCCX40gQmNPE><H04? 4UQ3BA65;EP4E81PDP6?P4@0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~Sdl?1d<FP`lS1d\73e<GBX=C?X<k>c\j^SHZ=RZn9dlGDe<W>aj36c<oG_HVaRLG>`L;<aM>P a\c?ejg3clkDd\o<X<;IX<C5a\7Ec=B^SHZ_RM?5e=C9c\NPa\c?ekf9\8W4bM?1`\c5dj36c<oG [L??c]CBclbP`]VPa<G6`MG<e:j=RXf:[hWCaMCDbLk7X<K=clC5_HV`\KNgRM?5e=>Pe<S5X<C5 a\7Ec=BPa\W<aJ3=clC5X=C?X<7C`lW9~22`00~51`00~Kn`l0~6OP00~3;@0S~2<@00~LO`00 P0l[7M3o0?00~70J201009VC<QBN4O8@00~5P0N0kFl03F1Pd`<J00l:00Pi^INm8TU8P3<0^cVG <``750dHRa:I@200oa02iPocOo3PP63PD_4P?`20497oOkT2AFH01n8;O]T9OYT_oYWm62KlnbVM P:XI5VVG6J:?::n0VjIn0920OZT9P8X0`0jPdCJPX4?jX7CidRKhmbOC7f9mO0;fdG=8_?[CdbKA dSOgdECB\D[0dn;gmS?jNcWBdW@UNR8Xb_[BdWBPd^LK72HO04jP0;00~3k`CEkjCG`J`XaPb0 f^;fmL;fmL;f4LH@e6_8P<kD0;39j\[>P<kY0;2L<0E>5EL0202DTl`SUPbE\L;G05`0P4d0C@VB P<>0Z4n0BkV0P3@XP?^>ZVP0P0\0`0h<of8oNF90T6\0T0Sn?bKm@2JH0;2X=6:YZFNYZ4BSWj\0 ~3P0jZZSBbo6<QN>T0Z0nZ0k\0n`Vnc:HVcBO=c4;=cGBPcNLQnR8QcN;8b_[>]X^f]T\00080 n@;=cV\0g@KM2Rh:2^khg@9mO0;B0;00~V0`02g5`B=B_=@FCM09P8P7N`oj0_PH2TP02`V8V; UiMRo_hgUgHRZ8WkUhTTR@2`080>M[@V2:So0JKJ1WO@4a=RV9Q;oGFB87CbZ0;d2:_j0;[TW;BT W9R[~23_b0WTFd:`2H1WKY9Z12h:S5n[BPSl89[KjHXPQblPj0g[[Z];kYY;kkZK`0X<7CbmSf k83fk?Y83ZSQn_Wf;164KR0@mX3hh_J0c]<0\000~C>2P01M@0@SJm\_m?~~~mm`HPX2o`mj9j Z0obmj;oZ2obmj8Q9^:Pl?XVmB[gg2_gLB9gg0CL0;00~9P@l0L0V05;HDKbT0on8EP6B00;2` 26n`\4=8U_YjX2n>RjC0\>:;0;2`26n`\4=8Y?YjZ2nLVJC0\>:I0;2`\6?8[_Z`ZDZ`Yb\0~2 h>1RP=::6=lV5=hVgR4ngj0oeMjR8AGRZ<Ojg]m4^]nRY`6>g]iS5[5T\L5>5K4[\N12\MnbY`6> 0MoVgjPodkRZ~6k3ARkNaSkNadkC94iN6[~Lo`l0Z`J[L2VO[:J`\FKo;RH_oV:][6<XWo[mZ2nL [:>\CTV]SDZ\oC:PWoZ\od:R`:j[[2JdZ8Xi[6:0P4_0Zn:00;00~24l0BVYYVVYYV02P?o<LV al0falM3`HY\N@Z@~4]0_1]2Bd0;00e`Kkd2KGRRai0I0020o8`4k@:bK80;00KPWj3RI:KI=7 B@T1IP<Lgd[if2_Hf4]IIP=>HP<0AP3o0?00~<2PT2P@d^aSol<?<0\0He=2KoDBV`L2V]\JHe ;RH_oV:b=VJc\H=8ZO[m:2nKo::P[OZY\J@enb8^;fKT\^Jc\H=8ZOYjX2n]P:C0\N:0`;j`P2\0 ~5\OXi2<OjnBP_aORRX;?k=We2C[:D_k6TdCJTODhY\K94];6Sn]6J`;7Tbl2^\`2`dm\fdm=3 g==TBP2@04T90ND32=?ddm=;7=e:deV`hET`i00`~B5L4?W`=P3]8?n_co0?l2\_iYoBP_V_bR Z9oj\_\R`:kj3OXR@7[bnK8W\Z1>\PebKH>JX;;WOPVIP;:bn:P_Pj2^\[8V\_MbKGbBKONBKH>J `6cRKH>J~3OLH6f2oR;aQ_`LJR1PK^1RkW\bjcaRhW;[=;~38?7fl30V<O5Rk>iVm^dVf>kRk^aS 6=cj2P[^2PS_k7e0kdmYmBP_j7fR8NoRX<OkkM9:alM;~=`@oh2?0YH:2P2OZ>lol0emD06`:_ ofVQ\ZI[\BKnXIZa\G?m8Bj`\FCnXIZa\7B?\JBP\NNbNbTQ\>KnXIZ`Z2n[`:j_YT[lJR\2X2ok n[V30Z:XP?_k0;00~5OgjIPT62JGjI2K>D\`2`C3JLOPVI_@2`~~~3E[IHWMnORH0A06h9o`hV 6BdV;FPY\Bf6oSDV;FLY\Bf6;G0Y2;7h;CURI[6HaS=VPLOVo_dWao`Y\JV:a\M6nk6H=Z0_W<JR Z;7hc2f26H1TP02`P;7RN3FEP?Nj>O6:Enb:MNR:`MnJ[mZJd]BJ8P2@~:`0hcBVWn@\190I00 c0\0X0hOOB1ljbKZjb;\NbW]9F9j:2nPk^I=JIGF0K0S~2CP000?l?~@70P0L7A80U00KPWo3RHI ;BH]J2VYL:VTUZJFKbT8SOX]X6h]7gJFBRT0DP190I2Z75BHP:_nXiZ0;D8IP6_0IN:0I;V0`;km P2]5Y`ECWPE>V`D0~2K_nB3QUR;BeRJ<ZJL0ROcBfVBobIcLeJo\fJ\be26K=[`?gR\h2n\e>` a49@cD9@aP1@~i:STH00=P0?l9>XY\N@^@7dYYm5W0B@6@RAaTR^6XB_jLFDT90Gh6hCZ2Z>7h o^6HT3ZRX>7hJodbB>7ho>hVX>kWncDVo6LYhL2>>C`V?6HYhO^2^CaRRWW90`000>48^CLV^P4^ >3YTX6?Y0SGbHWjIHTb9L7iI2I2J>ZP_hF69hI2:>Z0_H@2NB_jLFDT90804P6BiP02`B_jL@TT9 0>42N92F:?[bP02`~BAdRE=]g?_jIXA1L6FTh6@U@6AQd6AEl604h03DIP7DEPG`1PjM^Ii4FH a7BIde6IcF6I[DbH~3Y`R?YK>X29odW`2`\[9Rod0^oQP_Yl1>\ZL[~3_[iRoD0^H1P_\l1>_[<[ ~3Jo`bg]iWnmhVgRPog26^9ZP_dMnRX?[be=nRZ=SjgV<i_mVj`MoVg\I:_km;~40`KP23KP24@8 :3oP0k:PiOX80cH3h2\0~>`3Kl4lK?6ZD?02P?\XNV:hR@~2D829_?lg=_h:9PXX?kG;YP[<=P[= =P[>=Z3nhl72IY^P9Z8:Xl:PI<6OBPXX?kW:YX7m`_bbV\Xh9_eR:H2oBXW:`PP:lb4ghSOkIHkj Xh4Pch>0Y800\000~~~40P1EAd]7105E0:P?YSNbR2]YR004080;Qo4V`IUXVL62Y_62oj0_S8RT >8E:\@2PRO73Gd@>`@H^1\7VlJHhlIU;084<15S^?GD2:;?jGW<PP814P?:bZ;7joZHV[P2PB<Kj ?@l6R@o2`@2`^L1>PKW;P3ORk?eWjo4V`O67lITVlL58lL5h1PK^GiT3V@mb2P[^25oPlO4glO52 oj0_c86\>0Q?^B^iR0240<<:oNaDbP2P~@5PRa07\0?@;8SOX?MB:PVo:XSOYNHbVGoj?nX2n; ?:::NLT4B0D0R0n0>TJ00K00<`:PZo[m:2Kl9BKk9RKj8BHOnFVLB[U`AU190I2878B^W:]nK9Q< L9En2IVn28nLW4\0n0VPmnVnd;[f29o1BZT0A2190I1n78C:_Z_em3:XgOY:0994B@T1P`PLedZn GKWnF\2n_[^n_T\0~HCN4fP1M>TQQn8`0]<@00lLMI@@Q>C@P0F@1MCX1J081I=0Q><@P0F@0d 0800BPWdDl190I2O78BFTZ^V`HhcTVBBFK2LCX2I0800o`8doV9AJi?moR9PP?kl8Bhbnf9@YY_0 0^H>nR8P`oYMdIQJ00h0nNW?n::PcoYMoYa200j0>^:PHOV0mn9ZA;3o0?00~d2?m<mOhfo0[L 3oHQl00P3hF0Xh0dAVfB:800\22>nXV9=3CoHY:9R`2O1SBP9Z2P=4RMnYo0WYK0[Y80\0000=Pa hS4`HaR\nPX:kPX8kc1m@:40\2QllWam87bh9kR_B`00030aI_jh9_gA9TlPWjoAQ<3lXZoTS]5? JB2_n=79BZ2hikT0\000~m;_X?L;YA080>KKDVP<XfP3i2G<PVRL[32P[^2YGXRL[3ULZ4RP2P PGg0:83kbLURobP_ZFbRZ:gjbG`PZ<SbbKDYUE^b]F2BYcjRX9Gkb24^o\PVU@2`P;GRP?eRP`2P alMRN\0_a7jY8W62afdY^`2`~~0;X1X=\?06h9OQ>H@FTYORRHOSBHOS:Hk45Rj?mYoT>B:4Cb X=;joI^Jo0ROnn^Bk:P_XOfYaOZYaOVYaNfVkGLP8NoVk:P_\nnRN6:JZ<;j0nnb@J0_^Z2^a>bV jjP__nfRnnfBn<FJK?\Yk01^moJImOBITH2TP02nmoJImOBIoLfJlb4nlZ0ocD>RZ=kjO_fHA:P_ S7jYSXbJ@d\:Hd\:03T:~6d`0@~3m_FZhIn[U2F[P82jU\:j0=RjGLFk0?P28OWRZ97jnN4VPOWR MeX2nHU\hH4l2:OhP81;0:L829CkROS7PH7>n7LPF_PVn24^nJP_@iA;Y02P6L3:7TS?@`Q?[7>P hD9RZ;cjhGLPFBP__WBRZ;ojhJL[f?OVYjM;0>46mB4^m_LRX<kjhOlYc\:[hHT\mH5lPOGRMeP2 mL9[084>mB4^mWLPX=Sdf02`mj0_hOFb8OKRZ>7kROK3POo9hH6nmWLPF?HVh@2`~=_P\0jP8Q jn:XX_[[k2J1jn9go`;[RFc\PCc\@V:XX?[HA^:PX?[Z8Bk[G22PX?ZPA^K\22o2P8B00;3228nU RKcZPGb1j^9go`;ZjV8Qjn8XA?@8]OYLG22X@_:XYO]6Z2m6YD\00@gK1Ze8A?@8aoYck0I2Z2oG k:9gF@8XfOYdZ2oJk:;2f;i5`VC20;1GAbIGB2KojRKojbI5AVI4gF\0~O1`2O1TLQ;TQ58Z2< nYoo:Hb0Zin9;4N1O857hWMG0TN0J`213TLQ;TQg8:2Fm9H0\4I4;ZR[n_h@;gCo:J\H[TI5HZ2O ndLQ;TRX;in9_4R1??nOVh58hWMG0TROJ`0Q3<<V[;j0C[h0\5Sm9eSl9e[k9e[j9oU3M\D0\0Qb lPWHfPkAe83Ajh0Ai]7AB`00~Vm`[in:[fmJXAd@]3C`1>CP15@`1Do`l0AZ19CP19D`18o`mH AC1HB@1Do`moDo15CP14o`l0Ae15E03oP?EBA@13A@19EP15o`ncB515C01@o`ncodl0~~~q0@00 ~~~rORl08400;B<0CS408200o`3`09X83BP_PH2[0?l2:8gjd\@XQWbba0^2K:0?SHJ[0?463?5R QYB;0;H8::_joRP_[@6^:;3joJ0_V[Jho:0_Y`fVV_^bj42;n^PXf0cR3:]Z080>6KK;77O03NI^ 3JP_?aZl3KH[0?46VPb2b<gjlMdXaYZXlE`PX0_d2O42nBP_2oQRZ:3n2`\Va02`8Mg;9X3>gMe; mnPX6WW;0?46m]dXjo6RgNj:j02`~6GT<01O<?Ce00kocol?Oo`2K\P7TWonRFj?hRZ;cj3PKM P7kYR7i9IGi9YWi9_7i9G>Q2A^SRoIdVOP2@OR2DXgjYIgi92GjI07i9[NQ2A_cR2?]Rg3>9j4H^ j?XR2?URg3>8R_S927T;moIgmOEER_@RX<SjRo<RZ=SjF@3>GP3>WLa:Gm?:X8]\lUVlRZ2VRo7; X?1RXXYZ0>T6g0Tfg8U<20TgjN9:PMc;~<NH]0P2X38SXmIT7M`?_ok_a?_R94m@3n0<0>0<8V o`0V`P0Vk?kRZ9cji?gRX;kjPocRZ:OjX7O\P7W\0JS__KnZX87_X;_jH@o00P4>Z;[j_0j^:;7j nbP_^OZRZ;Sj`Hf^nJP_][NZ0@7^0@7^0@7^0@7^0@7^0H3[~~~4n0oVl_700_02?hh0~~~~~~~~ ~wRM;5cLoDaJ_Cd=;9c]B[eM?5dXV9[m?5e:3BaLg?e<FPc<W>aJ39cmBP`lo4aHf:SHZ9bLKJ aM;?RM;5cLoDaHVla<GF];2mRK6nRHV_a<G6`MG<e:3Dcj34aMK9`lFP];2_];6Pe\GBdlW?cXf: SHZ_RLC5e[>`X=31d\7=aMC5d]>^SHZ=RXW9a\kJd\n9a<GF\k29RHVlSHZ=RXW9a\k4aLJ9d\G3 RKcBaL>mRK>`_XV9[lC5e\W3aJ2c\:39 |
Added src/kermit-12/k12mit.bwr.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 | Date: Fri, 1 May 1992 17:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: DECmate I problems and more patching problems DECmate I problems. Attempts to use the distributed Kermit-12 Version 10g on a DECmate (I) system will certainly fail. The coding specific to the DECmate I was never tested until recently. Two key routines wait for status flags that never raise because the affected registers do not generate flag changes/interrupts. This is unrelated to general serial data handling which works as originally coded. There is a simple patch to the program to alleviate the problem: .LOAD SYS:KERMIT.SV/I$*$ [load the file in image mode and then ask for more input. The $ which is printed signifies the use of <ESC> as the command terminator. The * is printed by the system command decoder requesting further input. The second $ signifies the use of <ESC> to end input to the command decoder. The loader program terminates and control returns to the keyboard monitor.] .ODT [call in ODT to patch the program] 7/ 0007 0012 [change default baud rate to 2400; this is optional] 353/ 5352 7000 [make a JMP .-1 into a NOP] 10302/ 5301 7000 [make a JMP .-1 into a NOP] 12243/ 3607 3610 [bump the version number] ^C [^C to exit to monitor] .SAVE SYS KERMIT [save patched file] This also updates the release revision from 10g to 10h. Future versions will eliminate the overhead of the now defunct routines. The only DECmate versions remaining to be tested are: DECmate I with DP278B (the system used for testing has DP278A) DECmate III without internal modem DECmate III with internal modem DECmate III+ Patching problems. The restrictions placed on patching apparently stem from a bug going back at least as far as OS/8 V3D (likely further). Apparently, when a JSW value of 1 is used (as Kermit-12 does), the GET command doesn't work. Apparently, the system confuses the need to save the contents of 10000-11777 with the need to load it in the first place. Kermit-12 operates by first placing once-only code in the affected area, then discarding it in favor of a locked-in copy of the USR routine. To avoid overhead, the JSW value of 0001 is set to indicate there is no need to save this dead code when the USR is swapped in over it. Apparently, the GET command sets the =1 too early in the load process, so the code that uses the USR to carry out the actions of the GET operation doesn't properly load the Kermit-12 code. Consequently, the warnings documented in previous chapters of the .BWR file (below) apply in all cases. The interaction with CCL sited below may not apply in all versions, but the GET command problem is apparently universal. cjl ------------------------------ Date: Mon, 28 October 1991 20:00:00 EST From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Kermit-12 patching restrictions revisited yet again Even more operating system ills (will it ever end?): Still further investigation into operating system bugs in OS/278 V2 on DECmates reveals that the problem in even worse that realized two weeks ago (see previous .BWR article): When a SAVE command is executed from OS/278 involving a loaded handler, the SAVE operation fails! The contents of the files will be corrupted in general and will likely become (at least partially) all zeroes! The exact scope of the problem has not been ascertained, but certain loading tests reveal that the command fails even when accessing additional memory beyond field zero and one. All operations to SYS: or any device co-resident with SYS: (or when DSK:=SYS: which is typically the case in many systems but not a rule) are unaffected beyond the restrictions reported previously. Until recently, SAVE commands were of little interest to the casual user of OS/278, since program execution and ordinary file creation are unaffected. Since there are now several programs to be loaded and saved by users, the problem is more significent. Users of the direct loading method of acquiring KERMIT-12 are also in the affected category. Clearly all developers and anyone assembling any part of the KERMIT-12 package should be aware of this problem. As a precaution, all persons using the SAVE command for any reason are advised to use the form involving SYS: only to avoid this problem. (Advanced users can determine which handlers are possibly co-resident and are thus acceptable as well.) The resultant file can always be copied to any device as required after the fact. cjl ------------------------------ Date: Thu, 10 October 1991 05:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Kermit-12 patching restrictions revisited and .BOO problems More operating system ills regarding file loading: Further investigation into operating system bugs in OS/278 V2 on DECmates reveals that the problem is worse than first realized: When using GET or LOAD (ABSLDR) commands, especially when loading image files such as FIELD0.SV, FIELD1.SV (the partial load files from direct memory loading of K12MIT), or K12MIT.SV with /I, the JSW and starting field/address can become "mangled" into unusable values. One particular case achieved the impossible value of 6303 for a starting field change instruction (legal values are 6203 through 6273 by 10s). Consequently, the general recommendation for SAVE commands as used in various utilities throughout KERMIT-12 configuration etc., is to use explicit starting address and loading locations and JSW values. In short, always give a complete description of the SAVE operation under OS/278. For example, when direct-loading K12MIT through the printer port into the DECmate, the following commands should be used: }LOAD FIELD0.SV/I,FIELD1.SV/I$*$ }SAVE SYS K12MIT.SV 00000-07577,10000-17577;00200=0001 As discussed earlier, the CCL form of the ABSLDR LOAD command works even though other seemingly equivalent forms don't. The complete SAVE command forces all parameters to be taken explicitly from the command; no reliance on system "assumptions" or loading artifacts. Always use the complete values for loading taken from the relevant program documentation. Most users of KERMIT-12 are running OS/8 V3D, etc., where this sort of system bug isn't seen. In the future, all KERMIT-12 documentation will give the "verbose" form of the command to contain this OS/278 V2-specific problem. Regarding .BOO format encoding: The newest release of KERMIT-12 includes .BOO format encoding of all binary files and TECO macros as an alternative to ENCODE format. ENCODE format is still the preferred method of distribution, but .BOO format allows for use with other systems, such as MS-DOS. For example, TECO macros used with OS/8 TECO can be interchanged in .BOO format with similar files used with MS-DOS TECO. Intermediary sites, such as unix systems will not destroy the "delicate" nature of such files, etc. The KERMIT-12 .BOO utilities are NOT totally compatible with existing .BOO utilities on other systems! Just like OS/8 ENCODE and DECODE, ENBOO and DEBOO do a perfect encoding/decoding of OS/8 files into their original form. When used with "foreign" .BOO decoders, some unpredictable things might occur. Certain other .BOO encoders are known to throw in extraneous null bytes at the end of the file. Further, there is a design weakness in the original .BOO format that causes more null bytes to possibly appear. The KERMIT-12 programs utilize a superset of the original format to ensure correct encoding/decoding. When passing these files which now contain "correction bytes" to older decoders, the files are decoded with inflated lengths because the older decoders don't recognize the length correction. When passing files created by older encoders to the PDP-8, the resultant decoded files will also have inflated lengths because the older encoders failed to place correction bytes into the file. The general rule for dealing with .BOO files originating from other systems is that they may have incorrect lengths. The resultant files may be (falsely) padded out with extraneous null bytes. In any case, since the files generally have no blocking structure, the files will be padded by OS/8 up to the nearest whole record or multiple of 384 bytes anyway. Unless the file is ASCII and has a ^Z at the end, there is no way to determine the original intended file length. Files may be padded by null bytes introduced by other systems' bugs, the inherent weakness of the original .BOO format, or ultimately by OS/8 padding requirements. ASCII files from other systems may be adjusted by using an editor such as TECO which stops at the ^Z. A second generation of the transferred file may be somewhat shorter when processed this way. Should a file originating in OS/8 be intended for OS/8 use only (such as an encoding of a .SV file), it should not be decoded on an intermediate system, because a re-encoded version may differ from the encoded original because of ignored correction bytes, bugs, or the inability to insert correction bytes. Violating any of these rules could lead to OS/8 files corrupted into being too long. It is conceivable that these altered files are even dangerous to use under OS/8 because of their inflated lengths. (Certain files are validated by their restricted size, such as .HN files which must be exactly two or three blocks long depending on whether they are for one or two page handlers. If a one-page handler became three pages in file length, it could conceivably be confused with a two-page handler, etc.) cjl ------------------------------ Date: Sun, 7 October 1990 12:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Kermit-12 patching restrictions All Kermit-12 configuration done according to the documentation works "as advertised." Users are tempted to patch the distributed image file K12MIT.SV as a "quick and dirty" method to make small modifications such as changing the default baud rate, etc. There is "conventional wisdom" that this can be accomplished using GET, SAVE commands to allow the use of ODT; this method is ordinarily used with other OS/8 family programs. It has been reported that this does NOT work on OS/278, the usual operating system for the DECmates. The following method should be avoided (a work-around is offered later): .GET SYS KERMIT [setup current image for patching] .ODT [call in ODT to patch the program] 7/ 0007 0012 [change default baud rate to 2400] ^C [^C to exit to monitor] .SAVE SYS KERMIT [save patched file] This method follows the exact procedure described in virtually every OS/8 document regarding patching of image files. The cited example changes the default baud rate from 1200 Baud to 2400 Baud by replacing the value chosen from the DEC standard table for 1200 Baud with the applicable value for 2400 Baud. This value is stored within Kermit-12 as the corresponding twelve-bit word with all high-order bits zeroed. (The location used is 000007; this is valid for Version 10g, but could change in later versions.) This attempt to make changes the "conventional" way produces a corrupted image file of K12MIT.SV (renamed to KERMIT.SV in the above example) when using OS/278 Version 2, the usual operating system on the DECmate II, etc. This method probably works in earlier (OS/8 V3D, etc.) systems, however no attempt has been made to trace this bug in prior systems. A "fool-proof" method is required that works in spite of bugs in the operating system. A work-around was attempted using OS/278 V2 on a DECmate II hard disk system: .LOAD SYS:KERMIT.SV/I [load the file in image mode] .ODT [call in ODT to patch the program] 7/ 0007 0012 [change default baud rate to 2400] ^C [^C to exit to monitor] .SAVE SYS KERMIT [save patched file] This also fails! For reasons not understood yet, the following seemingly equivalent command DOES work: .LOAD SYS:KERMIT.SV/I$*$ [load the file in image mode and then ask for more input. The $ which is printed signifies the use of <ESC> as the command terminator. The * is printed by the system command decoder requesting further input. The second $ signifies the use of <ESC> to end input to the command decoder. The loader program terminates and control returns to the keyboard monitor.] .ODT [call in ODT to patch the program] 7/ 0007 0012 [change default baud rate to 2400] ^C [^C to exit to monitor] .SAVE SYS KERMIT [save patched file] This allows ODT commands to patch the file as intended, and also causes the subsequent SAVE command to work properly. All OS/8 family systems support this command (as long as CCL is enabled), so it will "always" work. For those users who run with CCL turned off, the following sequence will also work: .R ABSLDR [run the loading program directly] *KERMIT.SV/I [load Kermit in image mode] *$ [<ESC> is typed to terminate the loading process.] .ODT [call in ODT to patch the program] 7/ 0007 0012 [change default baud rate to 2400] ^C [^C to exit to monitor] .SAVE SYS KERMIT [save patched file] The newer OS/8 family systems generally can't turn off the CCL mechanism. Since the R and RU commands are typically disabled on newer releases, only the CCL command work-around applies. Users opting to disable CCL are likely running "older" systems, such as OS/8 V3D on DECtapes. On these systems, ANY of the above methods should work, because the problematic bug didn't exist on those systems. Had DEC not gone "backwards" we could have avoided this entire discussion! It is assumed the user will make "correct" patches to KERMIT-12; at least there is a "safe and proper" mechanism available to accomplish it! cjl ------------------------------ Date: Thu, 6 September 1990 12:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Kermit-12 potential problems A newly implemented ENCODE/DECODE method should eliminate the reported problems with regard to passing encoded binary files through problematic "paths." The method chosen is a variant on the 5-bit encoding algorithm suggested. Encoded files now pass right through all of the WPS-related utilities. It is necessary to acquire virtually all files of this re-release of KERMIT-12 since all ENCODed files are different, as well as the source programs for the ENCODing/DECODing utilities themselves. Due to the file being "bare", the TECO macro K12GLB.TEC is possibly defective when it arrives at a user site; it will now be ENCODed as K12GLB.ENC to avoid this problem. The KERMIT-12 source files are different due to maintenance work, requiring the user to obtain the re-released files. The sources now include a file to "pre-clear" memory. This aids in reducing the size of the ENCODed binary file K12MIT.ENC since undefined areas are no longer "relics" of random values, rather they are all set to 0000 octal. The long strings of identical words will be eliminated since the new encoding format does repeat compression. KERMIT-12 has still not been tested on any DECmates other than the DECmate II, as no volunteers have come forward with the proper hardware: DECmate I with DP278A DECmate I with DP278B DECmate III without internal modem DECmate III with internal modem DECmate III+ A tentative volunteer for the DECmate I with DP278A configuration has been contacted, but testing has not yet started. cjl ------------------------------ 26-Jul-90 1:15:43-GMT,15259;000000000001 Return-Path: <lasner@cunixf.cc.columbia.edu> Received: from cunixf.cc.columbia.edu by watsun.cc.columbia.edu (5.59/FCB) id AA26223; Wed, 25 Jul 90 21:15:41 EDT Received: by cunixf.cc.columbia.edu (5.59/FCB) id AA11871; Wed, 25 Jul 90 21:16:19 EDT Date: Wed, 25 Jul 90 21:16:18 EDT From: Charles Lasner <lasner@cunixf.cc.columbia.edu> To: fdc@cunixf.cc.columbia.edu Subject: This was sent out to PDP8-LOVERS Message-Id: <CMM.0.88.648954978.lasner@cunixf.cc.columbia.edu> I thought you might want to see this; it refers to the encoding problem I reported for a user with the problem (he has no net capability) in the programs using that encoding scheme we discussed... From: Charles Lasner (cjl) To: PDP8-LOVERS Subj: Feedback on encoding issues regarding archived files. I have written a pair of OS/8 programs to ENCODE and DECODE binary files into an "ASCII-fied printable" format. Those of you familiar with either uuencode/uudecode or .BOO format will understand my intentions. They were originally written for the purpose of distribution of binary (.SV) files of KERMIT-12 by Columbia University in NY as part of the standard KERMIT collection (K12*.*). Columbia imposes a restriction on all files: they must be distributed in ASCII only. This is to ensure proper distribution regardless of the "path" taken between Columbia and the end user. Be advised that various problematic E-mailers, ASCII-EBCDIC EBCDIC-ASCII translations, filters for reserved codes, known problematic character substitutions, etc. are lurking out there! Consider yourself lucky if you get your sender's copy intact without some form of "cosmetic" reformatting. By encoding the binary files into an appropriate subset of ASCII, these problems hopefully are avoided. While we can't prevent ALL problems, we can usually tackle the most likely ones. My original design was based on a discussion I had with Frank da Cruz of Columbia University (of KERMIT fame) regarding what to restrict ourselves to in a robust format. He was "unhappy" with some of the vulnerabilities of the uuencode and .BOO formats, which while popular, are not impervious to some "real" problems that have come up. We essentially designed an archiving format that was PDP-8 oriented, but not limited to -8s only. Some of the highlights of the format are: a) File format restricted to "printable" six-bit subset of ASCII only. All else ignored; this was to minimize the "garble" factor, yet maintain a fairly high rate of efficiency: two ASCII characters equal one PDP-8 12-bit word. (This has proved to be problematic and is why we are here!) b) The archive file contains imbedded commands, not implied ones. By validating the commands, you can "trust" the contents. Commands are available for whatever purpose arises. Already implemented are commands to start ("(FILE filename.ext)") and end ("(END filename.ext)") the imbedded file, and an official comment command ("(REMARK anything)") to help document the contents of the rest of the file. This is of course expandable. My OS/8 programs create all three types of commands. The start and end commands also theoretically allow multiple files in an archive, but I ignore the end command in the decoder and only allow one file per archive. I do support the start command completely, which includes a suggested name for the file. This name can be used at the user's option, or can be locally overridden. The encoding program inserts the original file name in this field, as this is of course the most likely name for the file at the other end. c) The archive contains a checksum for its contents to ensure the validity of the file. d) All "white space" character considerations are ignored; imbedded extraneous space characters, formfeeds, extra CR/LF, etc. are harmless. The CR/LF must be present at appropriate intervals, but this is only a problem with files passed through unix systems that delete the CR. Since OS/8 requires the CR and LF to be considered "printable", this is not a problem; the use of programs such as c-KERMIT will insert the CR if configured properly (SET FILE TYPE TEXT). Programs such as Rahul Dhesi's FLIP program are available to correct the problem easily if necessary: FLIP -m *.* or equivalent will remedy this. e) There is an internal record length of 64 characters with framing characters, to ensure the validity of each record. This prevents the file from getting "out of sync" with its original. This causes each line to be 68 characters including CR and LF, which is usually reasonable to most systems. Unfortunately, this scheme has proved to be flawed in an important way that "matters." This format must deliver files to OS/278 systems by the prevailing paths of existent systems connected to DECmates containing only the normally present DEC release software. This could include sending the files via DEC-DX through WPS8, or acquiring the files on either DECmate CP/M-80 or DECmate MS-DOS, possibly using KERMIT-80, or KERMIT-MS as appropriate. If a file is received in the CP/M-80 environment, it can be converted to WPS8 format using a DEC-supplied program called WPSCONV. If a file is received in the MS-DOS environment, it can be converted to WPS8 format using a DEC-supplied program called CONVERT. Incidentally, CONVERT can also convert CP/M-80 files as well, using MS-DOS format as an intermediary; WPSCONV is known to have bugs, which were corrected in CONVERT (which requires the MS-DOS hardware, not just the CP/M-80 hardware). These CP/M-80 and MS-DOS files can also come to the DECmate directly from a Rainbow as well, since the corresponding Rainbow systems are format compatible with the DECmate. DECmate MS-DOS additionally supports IBM-PC diskettes (160K or 180K single-sided only and read-only) as yet another source. Thus there are many paths to WPS8 versions of our files. The problem with these methods is that apparently there is a bug in OS/278 WPFLOP, the only distributed conversion program a user would already have on his OS/278 system. (We haven't actually isolated the problem to WPFLOP, as the complaining user was taking the files from MS-DOS via CONVERT then to OS/278 via WPFLOP; conceivably the problem is in CONVERT, but in any case the problem exists somewhere in this supported path.) The internal encoding used is to break the 12-bit word into two six-bit halves. Each half is in the range 00-77 octal. Adding 041 to the value yields characters in the range of ! through ` or 041 through 140 octal. The codes for 101-132 are A through Z and can be replaced by 141-172 for a through z if desired. This prevents case-sensitivity which is another possible network anomaly. We identified the DECmate problem as an anomaly regarding @ and `. The character codes for 100 and 140 are not treated uniquely, so the resulting OS/278 file is an inaccurate representation of the file. The decoding program correctly failed the conversion on a checksum error, so at least the user was aware of the problem! As the PDP8-LOVERS, we will hopefully acquire an archive site for our files, so all of these considerations will apply. We need a file format that is "bullet-proof" to avoid problems like this one. I am soliciting suggestions for improvements on this encoding scheme (and any other overall file format suggestions as well) to provide an effective solution. The resultant programs will be added to the KERMIT-12 collection freely distributed by Columbia as well as other sources (DECUS, etc.). Some suggestions have already been made: 1. Just "quick-fix" the problem by providing an alternate character to the ` to make it non-anomalous with @. The available choices are { | } and ~ only. The DEL character (octal 177) is unsuitable for other reasons; all other characters are either already used, or unprintable, or lower-case. This has the advantage of being most compatible with the existing programs, since the original character code can be supported as well; the "preferred" character would be generated by all future versions of the ENCODE program, and existing files could be trivially edited for compatibility as needed. This would have to be tested -- it is possible that the bug would persist. The choice is further narrowed to { and | only, since 175 and 176 are sometimes treated as alternates to ESC. It is likely that systems which "mangle" the case of a character which is alphabetic could also do the same to { | } and ~ making them [ \ ] and _ respectively. This makes the entire suggestion unworkable. 2. Change the format to "Hexafied-ASCII" where each PDP-8 12-bit word becomes represented by three characters from a 16-character set such as 0-9,A-F or A-P. The alphabetic codes would be immune to case conversion, and virtually every system supports this subset of ASCII. Instead of 64 characters on a line representing 32 12-bit words, each line would be 72 characters on a line representing 24 12-bit words (not counting framing characters and CR/LF). This also allows for many additional codes if needed. This scheme has the drawback of making the encoded file more inefficient, as the file will generally be 50% longer than those created by the original six-bit scheme. This robust scheme is workable. 3. Modify 2. to include some form of compression. The easiest is to incorporate repeat compression. One simple scheme is to use an indicator character (R was suggested) as a prefix for an encoded count. It could be followed by three characters encoding the value of the 12-bit word and two characters encoding the value of the repeat count. Since this occupies six characters, as does two adjacent 12-bit encoded words, this scheme saves space when used for repeat compression lengths greater than two. The compressed field is the same length as two compressed "triplets", so overall file validation techniques wouldn't require special-case checks, as long as trailing "fill" characters were allowed for the last record before the short checksum record (which is signalled by its length). (T was suggested for this trailer character to be used to pad the last line with 0-69 characters.) This allows for compressing 3-258 repeated 12-bit words into six characters. This would benefit files containing large areas of zeroes or HLT instructions, etc., as this can be the actual contents of binary files. If a .BN file created by PAL8, etc. is loaded and saved, then "junk" areas are created in the .SV file. Unfortunately, this is the norm, and the junk increases the size of the encoded version of the file. If the .BN file is loaded AFTER loading an all-zeroes file such as the binary output of: *0 ZBLOCK 7600 $ or equivalent as necessary (extended memory zeroed if required, etc.), then the file has all-zeroes gaps in it. These would repeat compress out using this scheme. Incidentally, an additional advantage of this method is that the resulting "cleaner" core-image file is slightly easier to disassemble, in case the source is lost. (Anyone who ever disassembled a .SV file or equivalent understands what I mean!). This also makes a binary papertape file (such as a diagnostic) loaded into a .SV file a little easier to follow when consulting the write-up, as memory is zeroed in between the locations referenced in the listing. The .SV file is smaller when encoded than the .BN file due to elimination of the paper-tape encoding overhead. OS/8 files of diagnostics could therefore be more efficiently archived as .SV files (encoded) than .BN files. 4. Change to a 5-bit encoding with compression. This would use 32 codes chosen from A-Z, 0-9 to encode the file five bits at a time per character. Five PDP-8 12-bit words would be encoded in 12 characters. Since PDP-8 binary files are always multiples of 128 12-bit word pages, there would need to be 4.8 "junk words" at the end of each block to encode the implied length of 130 words/block. Each line would be 78 characters (plus framing characters and CR/LF) so that four lines encodes a PDP-8 page, just as in the original six-bit scheme (the original scheme used 64 characters per line!). The last line of the file would contain 0-77 padding characters as necessary to maintain the line width as before. Repeat compression schemes can be expressed in any way that is a multiple of 12 characters; perhaps one or two adjacent expressions of repeat compression similar to above. Expected efficiency of this scheme is similar to the original six-bit method, or possibly slightly better; if compression is NEVER useful, then the file is 1.2 times as large. There is an implementation restriction placed on the DECODE program: it should be relatively short, since it must be distributed in source form. It must also be written in a subset of PAL8 compatible with the original PAL8 of the PS/8 days (ugh!) to ensure viability on any OS/8 family system. PAL8 Version B0 from OS/278 is distributed in ENCODed form, so this restriction need not apply to any other programs such as the ENCODE program or KERMIT-12, etc. It has been determined that PAL8 Version B0 and the companion CREF Version B0 will correctly function on any OS/8 family system on any PDP-8 member suitably configured to run the operating system the user already has running. (There is a minor anomaly when using input files from the TTY: handler; see K12MIT.DOC for a detailed explanation.) CPU extensions such as BSW and IAC RAL are not present in these programs, as was the original intention of OS/8 (which eventually was lost as newer members of DEC's programming staff were ignorant of this problem!). It is acceptable to have a "bare-bones" subset of the DECODE program distributed in "old" PAL8-compatible source form, along with a "fancier" version written in a more modern PAL8 language, as the binary could then be DECODed with the subset DECODE program, or the source could be assembled with PAL8 Version B0 to "bootstrap" the "full" version of the DECODE program as necessary. For those of you who can't wait, and want these utilities as they stand (using the fallible six-bit method), they are available via anonymous FTP from Columbia University (watsun) as /w/kermit/d/k12dec.pal and /w/kermit/d/k12enc.pal for the DECODer and ENCODer respectively. More information is available in /w/kermit/d/k12mit.doc or /w/kermit/d/k12mit.pal regarding use of PAL8 Version B0, other assemblers (such as PAL10 or P?S PAL) or other KERMIT-12 issues, etc. Charles Lasner (lasner@cunixf) cjl ------------------------------ Date: Fri, 4 May 90 13:55:02 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: Kermit-12 problems If the release files of KERMIT-12 are brought to DECmate MS-DOS via any of the various paths that can be used (such as from a Rainbow in either CP/M RX50 or MS-DOS RX50 format, etc.; in this particular case the reporting user obtained them using IBM-PC SSDD 180k 5-1/4" PC-DOS format.) then the files are available as DECmate II MS-DOS or CP/M-80 files on one of its standard devices (a:,b:,c:,d: floppies or e:,f:,g:,h: hard disk volumes). The ultimate goal is to get these files (un-scathed!) to DECmate II OS/278 for KERMIT-12 installation. The standard DEC CONVERT program alledgedly can convert any combination of MS-DOS or CP/M-80 or WPS/8 from/to each other. By converting the files to WPS/8 documents, the files can be translated to OS/278 later (using the OS/278 WPFLOP utility). There is a problem with DEC's CONVERT.EXE: it only CORRECTLY supports Rainbow/DECmate RX50 MS-DOS and CP/M diskettes, so the other formats (8" CP/M-80 diskettes and one-sided PC diskettes) have to be pre-converted with the appropriate copy commands to a supported diskette or hard disk volume first before using CONVERT. This is not a big problem, as we are merely using standard procedures, but the point is that much of this is undocumented or obscure. (I had to help the reporting user to copy his files to a "friendlier" device for CONVERT's benefit which only delayed our discovery of the REAL problem!) The CONVERT program alledgedly supports ASCII/WPS format conversion from/to any of MS-DOS, CP/M-80, or WPS/8 (but only on a:,b:,c:,d:,e:,f:,g:,h: logical drives, not on the other hardware or media possibly hooked up to the DECmate!). Our purpose is to move the K12MIT files to WPS/8 format. This can be attempted with standard commands of CONVERT, but there apparently is a bug: When you boot to OS/278 and retrieve the WPS/8 documents (via WPFLOP) which are the ENCODed files of KERMIT-12 as OS/278 files, there is a character anomaly between two encoding characters (specifically @ and `) that destroys the integrity of the affected file. This is possibly due to a bug in OS/278 WPFLOP, but more likely is a problem with MS-DOS CONVERT. Regardless of the perpetrator, this path is not viable to obtain the ENCODed files of the KERMIT-12 release. Fortunately, the source files are not affected, as the anomalous characters are not part of the PDP-8 assembly language, and only comments could be affected. (As far as I can tell, there aren't any affected characters even in the comments!) It is therefore necessary to assemble KERMIT-12 directly from the sources when installing it on the DECmate II if obtaining it via any path which includes CONVERT/WPFLOP. The other ENCODed files are for PAL8 Version B0 and CREF Version B0 which are already present on the DECmate II as part of the standard release of OS/278 for the DECmate II and are thus superfluous. All ENCODed files can be recreated from OS/278 itself using the sources, etc., so the intended release files can be recreated for distribution to other OS/278 sites (bypassing the CONVERT/WPFLOP path). Future versions of the DECODE program will obviate this problem when an appropriate alternative format is supported properly which is immune to DEC's glitch. A related problem surrounds the GLOBAL TECO macro K12GLB.TEC (aka GLOBAL.TEC). Due to the "delicate" nature of TECO macros, they could get "mangled" by the time they get to a user site. Future releases of KERMIT-12 will "protect" the macro by ENCODing it into K12GLB.ENC. It has also been reported that there are problems running the macro on certain releases of OS/8 family TECO and on other TECOs for other machines, and also problems running certain versions of OS/8 TECO on the DECmates. The author will investigate this problem eventually, but the main usage of the macro is for KERMIT-12 source maintainence on an OS/8 V3D system using the corresponding version of TECO; it is beyond the scope of KERMIT-12 development to investigate the myriad releases of TECO and their hardware and operating system dependencies; perhaps some TECO hackers can assist us! An obscure problem indeed! Users give good feedback... Can you suggest a fix for the CONVERT/WPFLOP-induced corruption? One is to allow the current format as a subset, but use a substitution character for the garbled character. Our character set is the 64 characters from ! through `, so the anomalous occurrences of @ are problematic. If we change the preferred character for ` to a lower-case letter (only octal 141 up is available, so let's assume the use of a) we avoid the CONVERT/WPFLOP problem. Newer released ENCODed files would then be immune to the treachery, but would require the newer DECODing program (or use TECO to change all occurrences of a to ` and then use the old DECODE program). Should we abandon this inner format altogether? We could use an even more robust format like ASCII hex: 0-9 and A-F (allowing a-f as well!) at the expense of longer files (currently 2 characters=12 bits, but would become 3 characters=12 bits). This would also hold up better through EBCDIC network conversion... cjl |
Added src/kermit-12/k12mit.doc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 | / KERMIT FOR DEC 12-BIT MACHINES / LAST EDIT: 06-SEP-1990 11:00:00 CJL XLIST OFF IFNDEF OFF <OFF= 1> /TURN LISTING OFF IFNDEF ON <ON= 0> /TURN LISTING ON XLIST ON; IFZERO 1 < *** **** *********** ********* *** *** *** *********** ***** **** *** **** *********** ********** **** **** *** *********** ***** ****** *** **** *** *** **** **** **** *** *** *** *** *** *** **** *** *** *** ***** ***** *** *** *** ** **** *** **** *** *** *** ***** ***** *** *** *** ** *** ******* *** *** **** ************ *** *** *** ** ****** ********** ********** *** **** *** *** *** ***** *** ** ******* ********** ********* *** **** *** *** *** ***** *** ** *** **** *** *** **** *** ** *** *** *** *** ** *** **** *** *** **** *** ** *** *** *** *** ** *** **** *** *** **** *** *** *** *** *** ** *** **** *********** *** **** *** *** *** *** *** ********* *** **** *********** *** **** *** *** *** *** *** ********* > XLIST ON / COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF / NEW YORK. / PERMISSION IS GRANTED TO ANY INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS / DOCUMENT AND THE PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL / PURPOSES. / EDIT HISTORY. /014 CJL / 052 06-SEP-1990 BUG FIX. CHARLES LASNER (CJL) / SENDING A FILE WHICH EXACTLY FILLS THE LAST DATA PACKET AT THE / END OF THE FILE WILL CAUSE THE PACKET TO BE SENT TWICE. THE / ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF. / 051 29-AUG-1990 BUG FIX. CJL / PDP-8/A NOT IDENTIFIED CORRECTLY IN CPUID ROUTINE. THE UPDATED / PC IS WHAT IS LOADED INTO THE AC WHEN 7016 IS EXECUTED ON THE / KK-8/A CPU. THE ROUTINE WAS CHECKING FOR THE NON-UPDATED VALUE. / ALSO NEW DOCUMENTATION FOR PRE-CLEARING MEMORY FOR BENEFIT OF / ENCODED BINARY FILES. / 050 06-SEP-1989 DECMATE I SUPPORT, ETC. CJL / THIS EDIT IMPLEMENTS DECMATE I SUPPORT USING THE DP278-A OR -B. / A NEW CONDITIONAL 'PORT' SELECTS WHICH PORT IS TO BE USED. IF / KERMIT-12 IS RUN ON DECMATE I (WHILE NOT CONFIGURED FOR SERIAL / PRINTER PORT COMMUNICATIONS; SEE EDIT 048.) THEN REMOTE / COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT ASSEMBLY TIME / ('PORT=0' OR 'PORT=1'). ADDED BAUD RATE PARAMETER 'BRATE' TO / SELECT REMOTE COMMUNICATIONS BAUD RATE FROM THE STANDARD TABLE; / DEFAULTS TO 1200 BAUD ('BRATE=7'). / 049 30-AUG-1989 REMOTE FLOW CONTROL, ETC. CJL / THIS EDIT IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW CONTROL IS / ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO THE REMOTE / KERMIT REGARDLESS OF STATE. PREVIOUSLY, FLOW CONTROL ONLY / APPLIED TO CONNECT MODE. LOCAL FLOW CONTROL (TOWARDS THE REMOTE / KERMIT) IS UNNECESSARY AS LOCAL BUFFERS FOR REMOTE INPUT ARE / ALWAYS AVAILABLE. CERTAIN ROUTINE CHANGES MADE FOR BENEFIT OF / DECMATE I SUPPORT IN A SUBSEQUENT EDIT. / 048 24-AUG-1989 DECMATE II, ETC. SUPPORT. CJL / ONCE-ONLY CODE ADDED TO IMPLEMENT DECMATE II, ETC. REMOTE LINE / SUPPORT ON SERIAL COMMUNICATIONS PORT. SELECTED PORT IS / INDICATED ON OPENING BANNER IF OPERATING ON DECMATE. / THIS EDIT PROVIDES BASIC SUPPORT OF THE DECMATE II COMMUNICATIONS PORT AS AN / AUTOMATIC FEATURE OF THE STANDARD RELEASE OF K12MIT. AUTOMATIC DETECTION OF / DECMATE II, ETC. HARDWARE IS PERFORMED UNLESS THE PDP-8-TYPE REMOTE LINE / SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS THE REMOTE LINE ('SPRINT' IS / SET OR EQUIVALENT). / THIS EDIT INCORPORATES ALL OF THE INFORMATION TAKEN FROM VARIOUS SOURCES / REGARDING DECMATE PORT INITIALIZATION, ETC. EVERY ATTEMPT HAS BEEN MADE TO / COMPLETELY SET ALL APPROPRIATE REGISTERS, ETC. FOR DECMATE II, III, III+ / OPERATION. NO SUPPORT EXISTS FOR THE DECMATE III BUILT-IN MODEM OPTION, AS / EXPLICIT DOCUMENTATION IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE IS / APPARENTLY USED TO DISABLE THE MODEM). THESE ROUTINES ARE ONLY KNOWN TO WORK / ON THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND THE III+ / HAVEN'T BEEN AVAILABLE TO THE AUTHOR FOR TESTING. THE INITIALIZATION CODE / WILL BE UPDATED LATER TO INCLUDE PANEL REQUESTS, ETC. TO CORRECT ANY / PROBLEMS, ETC. DECMATE-SPECIFIC FEATURES (SUCH AS SETUP COMMANDS) WILL BE / ADDED LATER AND ENABLED FROM THESE ROUTINES. / THIS EDIT INCORPORATES NON-INTERRUPT ROUTINES WHICH HAVE BEEN TESTED AT THE / MAXIMUM COMMUNICATIONS SPEED OF THE DECMATE II (19200 BAUD). THEY WILL / SUFFICE FOR ALL KERMIT IMPROVEMENTS SHORT OF SLIDING WINDOWS AT WHICH TIME / INTERRUPT-DRIVEN I/O WILL BE REQUIRED. (INTERRUPT-DRIVEN I/O IS ILLEGAL ON / CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL TO THE SYSTEM OR NON-SYSTEM / HANDLERS.) / 047 21-AUG-1989 CODE CLEANUP. CJL / STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS. THIS / IS IN PREPARATION FOR EVENTUAL DECMATE II OPERATION, AND TO / MINIMIZE K12PCH PATCH FILE SIZE. CERTAIN NON-CONNECT ROUTINES / MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION. / 046 15-AUG-1989 CODE CLEANUP. CJL / ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL / DECMATE USE. ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR / OF 'COMIN'. ELIMINATION OF 'OREM' IN FAVOR OF 'COMOUT'. ADDED / STATUS UPDATE ROUTINE ('UPSTATUS') FOR EVENTUAL DECMATE II, ETC. / USAGE. ELIMINATED PDP-8, DECMATE I, DECMATE II CONDITIONALS. / REORGANIZED SERIAL LINE CONDITIONALS AND ADDED NEW 'SPRINT' / PARAMETER FOR SERIAL PRINTER PORT USAGE AS COMMUNICATIONS PORT. / ADDED ONCE-ONLY CODE ADDED TO AUTOMATICALLY RECOGNIZE DECMATE I / AND II OPERATION UNLESS ASSEMBLED FOR REMOTE COMMUNICATIONS ON / SERIAL PRINTER PORT ('SPRINT' SET). UPDATED K12PCH.PAL TO / CORRESPOND TO NEW DEFINITIONS. DEFINED EVENTUALLY NEEDED / COMMUNICATIONS PORT INSTRUCTIONS FOR DECMATE II; ACTUAL DECMATE / II OPERATION WILL BE DEFINED IN A SUBSEQUENT EDIT. DOCUMENTED / NEW LOADING AND SAVING INSTRUCTIONS FOR K12MIT TO ALLOW FOR / ONCE-ONLY CODE IN 10000-11777 WITHOUT SWAPPING THE CODE OUT FOR / THE USR. THIS ELIMINATES OVERHEAD WHEN LOADING K12MIT, BUT IS / DIFFERENT FROM THE FORMER INSTRUCTIONS WHICH ASSUMED NO OTHER / USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR. / THIS EDIT PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION / OF K12MIT ON ANY MEMBER OF THE DECMATE FAMILY (I, II, III, III+). WHEN / 6120-TYPE CPU DETECTION OCCURS, THE DECMATE I OR II-TYPE COMMUNICATIONS PORT / INITIALIZE CODE IS AUTOMATICALLY SELECTED AS NECESSARY UNLESS THE PDP-8-TYPE / ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET OR EQUIVALENT USER SETTINGS, ETC.) / FOR THE VT-78-TYPE PRINTER PORT (32/33), IN WHICH CASE THE COMMUNICATIONS IS / DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND / IS ACCOMODATED AS SUCH). / SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL THE PORT / SELECTION, AS THERE ARE AT LEAST TWO VARIANT OPTIONS BOARDS (DP-278A AND / DP-278B) EACH CONSISTING OF TWO PORTS. / 045 12-AUG-1989 BUG FIX. CJL / FINISH, GET, AND RECEIVE COMMANDS FAIL TO ABORT PROPERLY / (ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT / OPERATING MODE ('KMODE') IS NEVER PROPERLY SET, OR IS SET AFTER / SEVERAL PACKETS HAVE BEEN SENT. EACH COMMAND NOW SETS ITS OWN / OPERATING MODE BEFORE INITIATING ANY PACKETS. / 044 11-AUG-1989 CODE CLEANUP. CJL / CHANGED 'CCMSG' TO 'ABMSG' WITH CLEARER MESSAGE. CHANGED / 'CCFLAG' TO 'ABFLAG' FOR CONSISTENCY. CHANGED ABORT CHARACTER / FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR CONSISTENCY. ELIMINATED / 'ITTY' AND 'ITTYW' ROUTINES BY USING 'CTLCTST' AND 'INPUT' / ROUTINES ALREADY AVAILABLE A/O EDIT 043. ELIMINATED 'TCHAR' IN / FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043. / 043 07-AUG-1989 CODE CLEANUP, ETC. CJL / REWRITE OF CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT / AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING / USER-INTERFACE REWRITE. 'SCRIBE', 'LININP', AND 'ESCPRNT' / ROUTINES NOW CALL "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL / MESSAGES. / 042 13-JUN-1989 CODE CLEANUP. CJL / FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN K278 / (SOME OF THE K278 STUFF IS DEFICIENT!). CALCULATION OF PROPER / SEQUENCE NUMBER FOR NAK CORRECTED OVER FORMER (K08MIT AND K278) / VERSIONS. ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM. / 041 12-MAY-1989 BUG FIX. CJL / VARIOUS VERSIONS (DECMATE) WON'T FUNCTION REMOTELY WHILE KL-8 / VERSIONS WORK FINE. ADDED REMOTE LINE READ IOT TO INITIALIZE / REMOTE LINE AT STARTUP TIME FOR VERSIONS REQUIRING THIS. / CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT / IN TWO PLACES. / 040 07-MAR-1989 COSMETIC CLEANUP. CJL / CLEANUP OF EDIT HISTORY AND OTHER COMMENTS. / 039 21-MAY-1988 CODE CLEANUP. CJL / ADDED VARIABLE 'INIECHO' TO ALLOW DEFAULT CONNECT-MODE STATE TO / BE HALF-DUPLEX ("SET LOCAL-ECHO ON"). MODIFIED INPUT SERVICE / ERROR ADDRESSES TO SIMPLIFY ERROR TABLES. / 038 19-MAY-1988 CODE CLEANUP. CJL / ELIMINATED TRAILER FILES DURING ASSEMBLY BY CREATING VARIABLES / 'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER FILE (PARAM.PA) TO / CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY (WHICH / WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY). OVERLAY / BY K12PCH.BN WILL DEFAULT TO CREATION OF A DUMMY USER MESSAGE / (WITHIN K12PCH) ENCOURAGING LOCAL CUSTOMIZATION. K12MIT.BN WILL / CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA. / 037 21-JAN-1988 BUG FIX. CJL / RESET OS/8 DEVICE CONTROL WORD TABLE TO DELETE TENTATIVE FILE IN / CASE OF PRIOR INPUT SERVICE ERROR. / 036 20-JAN-1988 BUG FIX. CJL / RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE / THE FLAG SET. / 035 14-JAN-1988 USR RESIDENT CODING. CJL / CALLS TO USR NOW USE 10200 INSTEAD OF 17700. NO SWAP OVERHEAD / WHEN OPENING OR CLOSING FILES. / 034 13-JAN-1988 CODE CLEANUP. CJL / ALL EIGHT-BIT ORIENTED CONSOLE CODE ELIMINATED; NOW IGNORES / PARITY (JUST SEVEN BITS). / 033 12-JAN-1988 CODE CLEANUP. CJL / 'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED; NOW USES 'P7CH' FOR ALL / CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE). / 032 12-JAN-1988 CODE CLEANUP. CJL / VARIOUS ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE / BEYOND THE CLASSIC PDP-8. / 031 11-JAN-1988 CODE CLEANUP. CJL / ELIMINATED 'RTDISP' AND CHANGED CALLING CONVENTION FOR DISPATCH / ROUTINE. ALL CALLERS NOW LOCAL OR VIA LOCAL POINTERS. ADDED / SEVERAL CONDITIONAL PARAMETERS AND LABELS FOR BENEFIT OF / K12PCH.PAL. / 030 05-JAN-1988 CODE CLEANUP. CJL / CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE / EFFICIENT CODE. / 029 21-DEC-1987 CODE CLEANUP. CJL / CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND / REWROTE 'COMMAND' ROUTINE. / 028 15-DEC-1987 CODE CLEANUP. CJL / COMPLETE REWRITE OF FILE LOOKUP ROUTINE. 'LUKUP' NOW USES FIELD / ONE BUFFER AND ITS OWN AUTO-INDEX REGISTER CONSERVING PROGRAM / SPACE. / 027 05-DEC-1987 CODE CLEANUP. CJL / CHANGED DISPATCH ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE. / ALL CALLS MADE COMPATIBLE. ELIMINATED 'SCANC' CODE. ELIMINATED / CODE WITHIN 'DPARS' ROUTINE. 'LUKUP' ROUTINE NOW DOES ITS OWN / DISK I/O. ELIMINATED 'BLKIN' ROUTINE. / 026 27-NOV-1987 NEW CONNECT MODE CODE. CJL / TOTAL REWRITE OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT AND / OUTPUT TERMINAL ROUTINES. CONNECT IS NOW FULLY BUFFERED IN ALL / DIRECTIONS. IF FLOW CONTROL IS OBEYED, ANY BAUD RATE CAN BE / ACCOMODATED BOTH LOCALLY AND REMOTE (UP TO 9600 BAUD TESTED, / SHOULD WORK TO AT LEAST 19200 BAUD BY INSPECTION). TESTED WITH / FAST VT-100 EMULATOR CONSOLE TO PROVE ESCAPE SEQUENCES ARE NOT / DROPPED WHEN LOCAL TERMINAL IS FASTER THAN REMOTE LINE. LIMITED / USE OF SUBROUTINES TO IMPROVE HIGH BAUD RATE OPERATION. ADDED / TABLE-DRIVEN ERROR EXIT ROUTINE FOR SEND ROUTINES. / THIS EDIT PROVIDES FULLY BUFFERED INPUT/OUTPUT ROUTINES FOR BOTH LOCAL AND / REMOTE PORTS. NO INTERRUPTS ARE USED FOR MAXIMUM COMPATIBILITY WITH OS/8 / DEVICES (SOME OF WHICH ARE INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E). REMOTE / FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER / IS 3/4 FULL. WHEN THE BUFFER REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1> / TO ALLOW FURTHER OUTPUT. REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS; / LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY. / WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE BUFFER WILL FILL WITH OUTPUT / CHARACTERS. WHEN THE USER RELEASES THE CONSOLE WITH <DC1>, THE BUFFER WILL / RAPIDLY EMPTY (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE). THIS / ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE LINE UP TO / THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS. / 025 24-NOV-1987 NEW FEATURES AND CODE CLEANUP. CJL / PROPER INTERRUPT SETUP FOR <^C> AND <^P>, ECHO STATE. ALL / MESSAGES IN NEW FORMAT, (SOME NEW ONES HAVE BETTER CONTENT). / ELIMINATED 'PRI6B' AND 'REM6B' ROUTINES. NEW AND IMPROVED INPUT / SERVICE ERROR CODE MOVED TO PROPER PAGE. REWROTE CONNECT / ROUTINES TO ALLOW NON-INTERRUPT BUFFERED I/O LATER. CREATED NEW / VARIABLE 'ESCHAR' AND PARAMETER 'ESCAPE' TO SET DEFAULT ESCAPE / CHARACTER. ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE / USED CORRECTLY BY ALL ROUTINES. ADDED 'ESCPRNT' ROUTINE TO / HANDLE ALL CASES (INCLUDING NON-CONTROL CHARACTERS). DEFAULT / ESCAPE PARAMETER VALUE COMPATIBLE WITH K08V2, BUT IS A USER / PARAMETER, CONFIGURED AS OTHER PARAMETERS DEFINED IN EDIT 017. / CREATED ESCAPE FUNCTION TABLE FOR EXPANSION LATER. NOW SUPPORTS / ESCAPE C(LOSE) IN UPPER OR LOWER CASE, ESCAPE ESCAPE (SEND ONE / ESCAPE CHARACTER). ALL BAD ESCAPE COMMANDS WILL ISSUE <BEL> / CHARACTER TO WARN USER THAT COMMAND IS ILLEGAL AND OTHERWISE WAS / IGNORED. CREATED NEW VARIABLE 'ECHOFLAG' TO ALLOW LOCAL ECHO IN / CONNECT MODE. / 024 19-NOV-1987 NEW FEATURES. CJL / NEW STARTUP MESSAGES AND HELP METHOD VIA COMMAND. CPU TYPE / IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK FOR QUIRKS AND / MODEL DEPENDENCIES. THE DEFAULT PROMPT REFLECTS THE ACTUAL CPU / TYPE (THUS "KERMIT-12>" ON PDP-12). VERSION, REVISION, AND DATE / NOW EQUATED SYMBOLS. / 023 18-NOV-1987 NEW CONSOLE I/O PACKAGE. CJL / NEW CONSOLE I/O ROUTINES WITH DC1/DC3 SUPPORT FOR CONSOLE / TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO / BE USED DURING CONNECT MODE). USES FIELD ONE FOR MESSAGE TEXT TO / ALLOW FOR MORE PROGRAM SPACE. THE MESSAGES ARE NOW GIVEN IN / UPPER/LOWER SIXBIT FORMAT. SUPPORT FOR <^P> RESTART AND <^O> TO / FLIP ECHO. UPPER-CASE CAN BE FORCED BY CHANGING A VARIABLE / ('UPONLY'). / 022 17-NOV-1987 BUG FIX. CJL / EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM; NOW CHECKS FOR AND / IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE. / 021 17-NOV-1987 CODE CLEANUP. CJL / REWROTE TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE CONSISTENCY. / RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE"). / FORMER CODE REGARDING THE TENTATIVE FILE MAXIMUM LENGTH WAS ACCEPTABLY / ORGANIZED FOR ORIGINAL PS/8, OS/8 CONVENTIONS. WITH THE EVOLUTION OF THE / OPERATING SYSTEM INTO OS/78 (VERSIONS 1-4) AND OS/278 (VERSIONS 1-2), THE / ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES. / THE ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL LENGTH / OF THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM). IF RECORD 7777 IS PART OF / THE ACTUAL LARGEST EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON / THE DEVICE), THEN THE LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING / BUG). SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS / ASSUMED TO BE CORRECT. / TESTS WITH THE DECUS VERSION OF OS/278 (DM-101) REVEAL A DANGEROUS CHANGE: / THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS! / TO COUNTERACT THIS, EDIT 010 INSERTED A DECREMENT OF TWO INTO THE LENGTH / BEFORE PASSING IT BACK TO THE KERMIT FILE WRITING ROUTINE. THE FILE WRITING / ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S / COMPLEMENT NOTATION, THIS IS THE AMOUNT THAT WILL INDICATE FILE OVERFLOW / SHOULD IT REACH ZERO. / THIS HAS NOW BEEN REORGANIZED TO ALLOW THE ENTER ROUTINE TO SET THE DANGER / COUNT DIRECTLY. OS/8 USERS MUST ALLOW FOR THE EXTRA ROOM (WHICH MUST BE / PRESENT BUT WILL NOT BE USED), SINCE NO CHECK FOR SYSTEM VERSION WILL BE / PERFORMED. / 020 16-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL / REWROTE ENTIRE OUTPUT FILE PACK ROUTINE. NOW SUPPORTS / ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES OUTPUT / BUFFER IN FIELD ONE (SAME DEFINITIONS AS INPUT BUFFER) TO ALLOW / MORE PROGRAM SPACE. END OF FILE CONVENTION IN ASCII MODE NOW / INCLUDES ENSURING <^Z> CHARACTER PACKED INTO FILE (OR NOT). / REWROTE ENTIRE OUTPUT FILE CLOSE ROUTINE TO IMPLEMENT <^Z> / SCHEME. ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE; USE / SPECIAL ROUTINE CALL INSTEAD. FIXED PACKET WRITE BUG. / 019 15-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL / FIXED UNPACK <^Z> BUG. REWROTE ENTIRE INPUT FILE UNPACK ROUTINE. / NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES / INPUT BUFFER IN FIELD ONE TO ALLOW MORE PROGRAM SPACE. BUFFER / FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE. END OF / FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER / OR NOT. ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE; USE / SPECIAL ROUTINE CALL INSTEAD. / 018 09-NOV-1987 BUG FIX AND CODE CLEANUP. CJL / FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE. / 017 05-NOV-1987 NEW FEATURES. CJL / CONDITIONAL ASSEMBLY PARAMETERS ADDED FOR MACHINE TYPE (PDP-8, / DECMATE I, DECMATE II/III/III+), REMOTE LINE AND LOCAL TERMINAL / INTERFACE DEFINITIONS. / 016 05-NOV-1987 CODE CLEANUP. CJL / OPTIMIZATION OF CODE, LITERALS, CONSTANTS. / 015 04-NOV-1987 BUG FIX. CJL / INPUT SERVICE ROUTINE ERROR DOES JMP INSTEAD OF JMS WHEN CALLING / COMMON ERROR HANDLER. / 014 02-NOV-1987 SOURCE FILE CLEANUP. CJL / SOURCE FILE COSMETICALLY CLEANED UP AND RENAMED TO K12MIT.PAL / WHICH CONFORMS WITH CUCCA NAMING CONVENTION. NO ACTUAL BINARY / CODE CHANGES BEYOND K08V2. THIS EDIT HISTORY ADDED. ENTRIES / PRIOR TO 014 TRANSCRIBED BY CJL. / SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES) IS THE INTENDED ENVIRONMENT / FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12. / ASSEMBLING THE SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA CONFIRMING / THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE). / 013 01-OCT-1987 CHANGE TO VERSION 2.0. R. SCHLERF (RICH) / CHANGED 'RKIOT'/'RTIOT' TO 43/44 REMOTE LINE IOT (LOCAL / PREFERENCE). CHANGED 'ESCAPE' CHARACTER TO ^] ('CONX1') FOR / GENERIC CONFORMITY. ADDED VERSION/COMMAND BANNER AT STARTUP FOR / MINI-HELP. INCORPORATED K278 CHANGES 003-006, 009-010 (NO / INTERRUPTS). DELETED 'ERRMSG.' NOW USES 'STXERR' AT 'CLOOP9'+2 / FOR PROGRAM SPACE. TO CONFORM TO GENERIC KERMIT, "BACK ON PDP8" / MESSAGE DELETED AND REPLACED WITH BEEP <^G>. MESSAGE "SENDING / FILE XXXXXX.XX CREATED ON DD-MM-YY" REDUCED TO "SENDING FILE / XXXXXX.XX" TO CONFORM TO GENERIC KERMIT. PARITY BIT IS IGNORED / ON BOTH REMOTE AND TTY LINES. OUTPUT PARITY IS SET TO SPACE. / PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY: / RICHARD SCHLERF (RICH) / AMERICAN CYANAMID COMPANY / MEDICAL RESEARCH DIVISION / LEDERLE LABORATORIES / BUILDING 190 ROOM 115H / PEARL RIVER, NEW YORK 10965 / (914) 732-2186 (09:00 TO 16:00) / SINCE PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS NOT / SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION. FUTURE / VERSIONS WILL INCORPORATE THE DECMATE FEATURES AND THUS OBSOLETE ALL OTHER / VERSIONS AT THAT TIME. / 012 04-JUN-1986 PROGRAM FIX. SEPP STADELMANN (SSTA) / RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC. / 04-JUN-1986 VERSION RELEASED TO CUCCA BY MARTYN HEMMINGS (DEC GERMANY) AND / SEPP STADELMANN (DEC SWITZERLAND) OF: / DIGITAL EQUIPMENT CORPORATION (DEC) / 146 MAIN STREET / MAYNARD, MASS 01754 / (617) 897-5111 / CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH / DOESN'T REALLY CONFORM TO THE NAMING CONVENTION). / CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE. FILE REPAIRED BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA. / PROGRAM IS NOW THE DECMATE II/III (III-PLUS) KERMIT ONLY. HOOKS WERE LEFT IN / FOR PDP-8 VERSION, BUT NOT IMPLEMENTED. K278 DOES WORK WITH ADDITIONAL / IMPLEMENTATIONS OF KERMIT, BUT RECEIVE COMMAND DOES NOT WORK. PROGRAM YIELDS / RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO FLOPPY-BASED DECMATE II SYSTEM. / CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS. K278 DOES / NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND. / 011 04-JUN-1986 NEW FEATURES. SSTA / 'PRQ3' CODE CONDITIONALS. ROM SETUP COMMAND IMPLEMENTED FOR DMII/III. / AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT. / 010 13-MAR-1986 BUG FIX. MARTYN HEMMINGS (MART) / FULL DISK HANDLED WELL. / 009 13-MAR-1986 BUG FIX. MART / CLEAN UP BREAK AND GET. / 008 12-MAR-1986 BUG FIX. MART / CLEAR INPUT CHARACTERS FROM COMMUNICATIONS PORT WHEN IN IDLE / LOOP. / 007 11-MAR-1986 NEW FEATURES AND BUG FIX. MARTYN HEMMINGS AND / SSEP STADELMANN / (MART+SSTA) / INTERRUPT DRIVEN AND BUG FIX. / 006 10-MAR-1986 NEW FEATURE. MART+SSTA / DEVICE PARSE ON GET. / 005 10-MAR-1986 BUG FIX. MART+SSTA / NO DATE IN FILE WITH <^Z> INTACT. / 004 10-MAR-1986 NEW FEATURES AND BUG FIX. MART+SSTA / MAXIMUM RECEIVE BUFFER FIXUP ('RTERMI'), 15 SECOND TIME-OUT / DURING CONNECT. / 003 10-MAR-1986 BUG FIX. SSTA / TWO PAGE HANDLER FIX. / K08MIT.PAL COPIED TO DEC ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO / EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL. / KERMIT.PAL AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO PRODUCE / THE RUNNING KERMIT-8. *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.* / 002 18-JUL-1985 ORIGINAL RELEASE. RANDY HIPPE / 18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF: / BUREAU OF ENGRAVING, INC. / 3311 BROADWAY N.E. / MINNEAPOLIS, MN 55413 / (612) 623-0900 X218 / CUCCA RENAMED FILE (KER8.PAL) TO K08MIT.PAL WHICH CONFORMS TO NAMING / CONVENTION OF KERMIT FILES. / K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY. / PROGRAM PRONE TO GETTING "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS / 'CAPAS' BYTE FEATURE AND ASCII TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF / FILE DATA. COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY. <^C> / ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!). MANY KERMITS WILL NOT / WORK WITH K08MIT; HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20. / 001 30-JUL-1984 FIRST VERSION (KER8.PAL). JERRY SANDS / HARDWARE HINTS AND KINKS. / KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION: / PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY. / OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT). / KL8-COMPATIBLE CONSOLE INTERFACE. / 7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:). / KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT. / NOTE: ASSEMBLY PARAMETERS OF KERMIT-12 ALLOW FOR LOCAL KERMIT CONTROLLING / TERMINALS TO BE OTHER THAN THE PRIMARY OS/8 CONSOLE DEVICE. THE ACTUAL / HARDWARE MUST STILL CONFORM TO THE SAME REQUIREMENTS (THE DEVICE CODES WOULD / THEN BE USER-SPECIFIED AND DIFFER FROM THE STANDARD 03/04) AS THE STANDARD / CONSOLE INTERFACE AND TERMINAL. / SPECIAL DECMATE CONSIDERATIONS: / DECMATE USAGE IS USUALLY OBTAINED BY ASSEMBLING FOR THE STANDARD CONSOLE / DEVICE (03/04), AS THE BUILT-IN FIRMWARE/SLUSHWARE OF THE DECMATES IS / SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S REQUIREMENTS. / (THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.) / DECMATE REMOTE COMMUNICATIONS PORTS ARE *RADICALLY* DIFFERENT FROM / KL8-COMPATIBLE PORTS. THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH / DETECTS THE USAGE OF KERMIT-12 ON THE SPECIFIC DECMATE SYSTEM, AND / SELF-CONFIGURATION AS APPROPRIATE. THERE IS ONE EXCEPTION TO THIS, NAMELY IF / THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER PORT (32/33), THEN / THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED. THE STANDARD / ASSEMBLY OF KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS PORT. / THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE. / CONFIGURATION RESTRICTIONS: / WHEN INTERRUPTS ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T WORK. / THE NON-INTERRUPT VERSION SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU, SO / THIS SHOULD NOT BE A PROBLEM. INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE / RUN ONLY ON SYSTEMS WHERE *ALL* INTENDED DEVICES CAN HAVE THEIR HANDLERS / INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS. WHEN IN DOUBT, / THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION). / IF FLOW CONTROL IS DISABLED (DUE TO XON/XOFF BEING UNAVAILABLE) THEN THE / CONSOLE BAUD RATE MUST MEET OR EXCEED THE REMOTE LINE RATE. THE USER MUST / TAKE MINIMAL CARE NOT TO OVERLOAD THE INTERNAL BUFFERS OF KERMIT-12, AS THIS / WILL YIELD THE ERROR MESSAGE: KEYBOARD INPUT ERROR! / THIS IS NOT LIKELY TO OCCUR UNLESS ONE "PLAYS" WITH A KEYBOARD WHICH CAN / GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE QUITE ADEQUATE FOR ALL / REASONABLE TERMINAL APPLICATIONS. SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY / XON/XOFF PROTOCOL (WHILE KERMIT-12 HAS IT ENABLED), THEN INTERNAL BUFFER / OVERFLOW WILL YIELD THE ERROR MESSAGE: REMOTE LINE INPUT ERROR! / THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY MISUSE OF FLOW / CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12 WITH THE / CONSOLE BAUD RATE SLOWER THAN THE REMOTE LINE BAUD RATE WITH FLOW CONTROL / DISABLED). IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE / LINE INPUT WILL OCCUR WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE / USER FREEZES/UNFREEZES THE DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS / FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY. / FLOW CONTROL IS NOT YET SUPPORTED DURING KERMIT TRANSFERS. SINCE KERMIT-12 / DOES NOT SUPPORT SLIDING WINDOWS, KERMIT-12 WILL NEVER GENERATE OUTGOING / XON/XOFF SEQUENCES. FUTURE REVISIONS WILL SUPPORT INCOMING XON/XOFF FROM THE / REMOTE KERMIT. XON/XOFF PROTOCOL DURING CONNECT MODE IS COMPLETELY AVAILABLE / AT THE USER'S OPTION. / CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:" FEATURES, I.E. THE / PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS / <CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS ONLY). TERMINALS / LACKING LOWER-CASE SUPPORT SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE / AUTOMATICALLY. TERMINALS SUCH AS THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE / ENABLED, AS KERMIT-12 SUPPORTS OPTIONAL OUTPUT FOLDING. THE UPPER-CASE ONLY / OPTION SHOULD BE ENABLED FOR TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE / HOST, AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE MESSAGE CHARACTERS (WHICH / BECOME UPPER-CASE IF THIS OPTION IS SET). THE <BS> CHARACTER IS REQUIRED FOR / VISUAL RUBOUT (<BS> <SPACE> <BS>) ONLY. FUTURE VERSIONS WILL SUPPORT / HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT. ALL TERMINAL FEATURES (SUCH / AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST DURING CONNECT / MODE; THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL / BE TREATED AS A SEVEN-BIT CHARACTER ONLY. IF THE USER PRESSES THE ESCAPE / CHARACTER TWICE, THEN THE SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT / ONCE; THERE IS NO WAY TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET. / SINCE THE ESCAPE CHARACTER ITSELF CAN BE SET TO ALMOST ANY SEVEN-BIT VALUE, / THIS SHOULD NOT BE A SERIOUS LIMITATION. TERMINALS THAT DON'T "BEEP" WHEN THE / <BEL> CHARACTER IS SENT SHOULD NOT OUTPUT A PRINTABLE RENDITION OF THE <^G> / CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT / DURING VARIOUS MESSAGE SEQUENCES, ETC. / KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS: / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA. / FUNCTIONAL BAUD RATES INCLUDE 110, 150, 300, 600, 1200, 2400, 4800, 9600, / 19200, 38400 AND 76800. 2400 BAUD REQUIRES A REVISION "B" OR BETTER M8650 / MODULE (IF ONE USES DEC'S DOCUMENTATION OF AVAILABLE SPLIT-LUG OPTIONS). / ACTUAL BAUD RATES UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN KERMIT-12 / BECOMES INTERRUPT-DRIVEN. RATES OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ / BAUD-RATE OSCILLATOR. / THE BAUD RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE / A SINGLE SOLDER JUMPER TO IMPLEMENT THE PROPER BAUD RATE ABOVE 2400 BAUD. / CHANGING BAUD-RATE GENERATOR CRYSTALS WILL PRODUCE OTHER RATES AS NECESSARY. / (SEND INQUIRIES TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS / INCLUDING UPGRADED BAUD-RATE OSCILLATORS, ETC.) KERMIT-12 HAS BEEN TESTED TO / 9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION). / KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS: / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY. / FUTURE VERSIONS OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED PARITY / OPTIONS. THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE / SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT INTERACTION / WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION). / ALL BAUD RATES ARE SUPPORTABLE: / 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200. / 19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER "W5" AND THEN / SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD. A WESTERN DIGITAL TR-1602-B / OR EQUIVALENT UART IS REQUIRED TO SUPPORT 19200 BAUD; MOST OF THE RECENT / PRODUCTION DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS / THIS REQUIREMENT. EARLY M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH / *CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!). / RECEIVE BAUD RATE SHOULD BE IDENTICAL TO TRANSMIT BAUD RATE. (DO NOT SET THE / RECEIVE=150 BAUD SWITCH!) / OTHER INTERFACES: / DKC-8/A (8/A OPTION BOARD #1) INTERFACES SHOULD BE SETUP AS PER THE KL8-J/A / SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART. SOME DEC DOCUMENTATION / INDICATED A PROHIBITION ON THE USE OF 19200 BAUD, BUT THIS IS OBVIATED BY THE / USE OF THE SAME UARTS AS IN THE KL8-J/A. / EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD / WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES DO NOT SUPPORT OPTIONS / KERMIT-12 WOULD REQUIRE TO BE DISABLED ANYWAY. THESE INCLUDE PARITY / GENERATION, FRAMING ERROR DETECTION, ETC.). TO UTILIZE THESE DEVICES, THE / ASSEMBLY PARAMETERS FOR USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES / SHOULD BE GIVEN DURING ASSEMBLY (SEE ASSEMBLY INSTRUCTIONS). PROPER DEVICE / CODE VALUES MUST BE OBTAINED FOR THE SELECTED INTERFACE, AS THERE ARE MANY / ACTUAL POSSIBILITIES. (DP-12 DEVICES ARE GENERALLY DEVICE 40/41; PT08/DC02 / INTERFACES ARE GENERALLY DEVICE 11/12, ETC.) / ASSEMBLY INSTRUCTIONS. / KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS: / P?S/8 METHOD: / ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS THE SOURCE FILE, THE FOLLOWING / COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING: / .PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8) / OPTION SWITCH BREAKDOWN: / /A ALL SYMBOLS IN SYMBOL PRINTOUT. / /C OPTIMIZE CORE DURING ASSEMBLY FOR MORE SYMBOLS, LESS BUFFERS. / THIS OPTION SHOULD BE DELETED IF MORE THAN 8K IS AVAILABLE FOR / ASSEMBLY. / /E FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE. / /J *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD. / /L PERFORM SECOND-PASS LISTING. / /M CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY. / /N ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT. / /P ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT. / /Q ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS. / /S ENABLE SYMBOL TABLE PRINTOUT. / /X ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY. / /8 ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY. / THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS TO BE DETERMINED / AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED. / P?S/8 PAL IS THE PREFERRED METHOD OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE / TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED. K12MIT COULD GROW TO A SIZE / BEYOND THE CAPABILITIES OF OS/8 CREF. THIS LIMITATION CANNOT APPLY TO THE / P?S/8 DEVELOPMENT ENVIRONMENT. / P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE / ASSEMBLY MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS / SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY. / NOTE: P?S/8 IS *NOT* A DEC PRODUCT; IT IS SOLD COMMERCIALLY AND IS AVAILABLE / FREE OF CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED / INSTITUTIONS. CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8. / OS/8 FAMILY OF SYSTEMS METHOD: / K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM DECUS / AS PART OF THE OS/278 RELEASE. PAL8 VERSION B0 WILL RUN ON ANY OS/8 FAMILY / SYSTEM, AS IT HAS NO HARDWARE DEPENDENCIES BEYOND THE ORIGINAL PDP-8 / REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED). / THIS ALSO APPLIES TO CREF VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE / IS REQUESTED. PAL8 VERSION B0 AND CREF VERSION B0 ARE AVAILABLE AS PART OF / THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY. SEE THE / DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV AND CREF.SV FROM / THESE ENCODED FILES. / ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY / ORNAMENTED LISTING: / .PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW) / DEV: IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE. STANDARD EXTENSIONS / ARE ASSUMED (.BN FOR BINARY, .LS FOR LISTING, .PA FOR PAL SOURCE). THE / KSCR.TM TEMPORARY OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO / SYS:CREFLS.TM IF NOT EXPLICITLY GIVEN. MANY SYSTEM DEVICES ARE TOO SMALL TO / SUPPORT THIS TEMPORARY FILE, THUS THE FILE MAY BE DIRECTED TO ANOTHER / AVAILABLE DEVICE WITH SUFFICIENT SPACE. / THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC. TO / THE ASSEMBLY. / OPTION SWITCH BREAKDOWN: / /C CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE. / /E GENERATED LINKS ARE ERRORS. / /F *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD. / /M USE MAMMOTH SYMBOL TABLE OPTION FOR CREF. / /W FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE. / LOADING INSTRUCTIONS: / .LOAD DEV:K12CLR,K12MIT.BN THIS LOADS THE BINARY CLEAR AND KERMIT / .SAVE DEV K12MIT.SV=1 THIS SAVES THE CORE IMAGE / THE JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT / SHOULD NOT BE SAVED/RESTORED WHEN THE USR IS LOADED OVER THIS AREA OR / DISMISSED (THE USR IS ACTUALLY NEVER DISMISSED IN NORMAL K12MIT OPERATION). / OTHER BITS MAY BE SET AT THE USER'S OPTION, BUT ARE UNNECESSARY; THE BIT / INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD REGARDING THE DISPOSITION OF / 10000-11777. THE BINARY FILE K12CLR.BN (CREATED BY ASSEMBLING K12CLR.PA) / LOADS ZEROES INTO ALL OF MEMORY TO CREATE A "CLEAN" CORE IMAGE FILE, WHICH / MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION. / PASSING SHORT PARAMETER FILES. / WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM (PARAM.PAL) / THE FOLLOWING SHOULD BE NOTED: / ALWAYS PUT THE SHORT PARAMETER FILE (CONTAINING EQUATED SYMBOLS SUCH AS / USER=1, ETC.) IN FRONT OF K12MIT.PAL. / IF TTY: IS USED FOR DIRECT TYPE-IN OF THESE PARAMETERS, THE INFORMATION NEED / ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1. SUBSEQUENT PASSES REQUIRE THE / ENDING <^Z> ONLY. IF THIS METHOD IS USED, A LISTING WITHOUT THE USER INPUT / WHICH DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED. NOTE: IF BINARY IS / GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT / MESSAGE, ETC.), THE INFORMATION MUST BE TYPED IN DURING PASS 2. THE PASS 3 / LISTING MAY CONTAIN THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF / THE INPUT. PASS 1 INPUT OF THE INFORMATION IS EFFECTIVELY IGNORED, AS NO / DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.). / EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE: / DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED / DURING PDP-8 PAL8 B0 OPERATION. THE KL8E TTY: HANDLER WILL NO LONGER BE ABLE / TO BUFFER <^Z> DURING THE ASSEMBLY; YOU MUST WAIT UNTIL THE HANDLER ACCESSES / THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY. / CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE. / IF SO DESIRED, A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING THE / FOLLOWING INTO THE PARAMETER FILE: / BUFFLD= 10 /THESE PROBABLY / FILBUFF=2000 /WON'T CHANGE! / GENMSG= 0 /DON'T GENERATE STANDARD (NULL) MESSAGE / UMSG= 0 /DON'T GENERATE STANDARD (DUMMY) USER MESSAGE / FIELD BUFFLD%10 /FIELD FOR TEXT MESSAGE / *FILBUFFER /LOCAL MESSAGE LOADS THERE /LCLMSG,TEXT "%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%" / ZBLOCK LCLMSG+40-. /ZERO REST OF MESSAGE AREA / TEXT IS IN UPPER/LOWER-CASE SIXBIT WITH '^' MEANING SHIFT CASE (INITIALLY / LOWER-CASE) AND '%' MEANING <CR>, <LF>. / OTHER METHODS: / KERMIT-12 *CANNOT* BE ASSEMBLED BY PAL10 (LAST KNOWN VERSION OF PDP-8 / CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES: / DOES NOT SUPPORT 'RELOC' PSEUDO-OP. / DOES NOT SUPPORT PAGE ZERO REDEFINE (CAUSES "Z" ERROR ON SOURCE FILES WHICH / DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8). / INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO "Q" ERROR ON SOURCE FILES / WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8). / DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION / /W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC. / DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8 / OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES. / P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10. PAL10 SUPPORTS MACRO-8 MODE AS AN / OPTION AND AUTOMATIC FIELD DUMP BITMAPS; ALL OTHER KNOWN PAL10 FEATURES EXIST / IN P?S/8 PAL INCLUDING THE SUPPORT OF THE AUTOMATIC FIELD DUMP BITMAP / PSEUDO-OPS ('ENBITS' AND 'NOBITS'). / OS/8 PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS SEVERAL SYNTACTIC / QUIRKS (WHICH ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8 / PAL AND PAL10 IN CERTAIN MINOR WAYS); REGARDLESS, PAL8 LACKS THE / COMPATIBILITY PROBLEMS OF PAL10. / MAINTAINING SOURCE COMPATIBILITY. / KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8 / PAL AND OS/8 PAL8 (VERSION B0). CERTAIN FORMS OF STATEMENTS SHOULD BE / AVOIDED: / TAD /NOT LEGAL IN PAL8 / 0+TAD /NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8 / TAD (3)+1 /GENERATES SAME AS "TAD (3+1)" IN PAL8 / -A!-B /UNARY OPERATOR HANDLED WRONG IN PAL8 / I+N /NOT LEGAL IN PAL8 / N+I /NOT LEGAL IN PAL8 / I I /NOT LEGAL IN PAL8 / THIS REQUIREMENT IS EASILY MET BY KERMIT-12 AS MOST OF THESE CASES ARE / ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY. / THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT HAS OTHER DESIRABLE FEATURES, MOST / OF WHICH IT SHARES WITH P?S/8 PAL) ARE TOO SEVERE TO ALLOW USABLE ASSEMBLY OF / THIS PROGRAM. BETTER CROSS-ASSEMBLERS MAY EXIST ELSEWHERE WHICH ARE / SOURCE-COMPATIBLE WITH KERMIT-12. / USE OF P?S/8 LANGUAGE EXTENSIONS. / P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL / FOR ASSEMBLY DEVELOPMENT OF KERMIT-12. THESE INCLUDE LANGUAGE ELEMENTS SUCH / AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE / VALUE OF 'EXPR' WILL BE DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY / WHEN THAT POINT IN THE ASSEMBLY IS REACHED. TO ACCESS THESE FEATURES AND / STILL PROVIDE COMPATIBILITY WITH PAL8 (VERSION B0), THE FOLLOWING CODING / TECHNIQUE IS SUGGESTED: / IFNDEF PQS <PQS=0> /WILL BE 0 ON PAL8, PAL10 / IFZERO PQS < /DO PAL8, ETC. STUFF HERE / FOO= (TABLE) /DEFINE POINTER TO ADDRESS OF TABLE / TAD FOO-1 /GET (POINTER TO ADDRESS OF TABLE)-1 / DCA XR1 /SETUP AUTO-INDEX REGISTER / WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8. / > /END OF PAL8, ETC. VARIANT / IFNZRO PQS < /DO P?S/8 PAL STUFF HERE / TAD (TABLE)-1 /GET (POINTER TO ADDRESS OF TABLE)-1 / DCA XR1 /SETUP AUTO-INDEX REGISTER / IFNDEF PASS <PASS=0>/DEFINE PASS VARIABLE / PASS= PASS+1 /BUMP EVERY ASSEMBLER PASS / PAUSE PASS /DISPLAY PASS NUMBER / IFNZRO .&4000 < / ERROR 1234 /DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS / > / > /END OF P?S/8 PAL VARIANT / THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR PERMANENT ELEMENTS WHICH MAY BE / MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT CODING, WHILE THE PAL8 (VERSION / B0) VERSION CAN STILL BE USED (VIA DIRECT OCTAL, MULTIPLE EQUATE STATEMENTS, / CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC. AS NECESSARY) FOR STANDARD / ASSEMBLY OF KERMIT-12. / ASSEMBLY PARAMETERS. / SEVERAL PARAMETERS MUST BE CHANGED WITHIN K12MIT.PA (OR PASSED TO THE / ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE THE MAIN / FILE): / SETTING KEY= [RECEIVE IOT CODE FOR CONSOLE KEYBOARD] DEFINES THE CONSOLE / KEYBOARD IOT CODE (DEFAULT IS 03). / SETTING TTY= [TRANSMIT IOT CODE FOR CONSOLE OUTPUT] CHANGES THE CONSOLE / PRINTER IOT CODE (DEFAULT IS 04). / THE FOLLOWING DEFINITIONS ARE ESSENTIALLY FOR KL8-TYPE DEVICES ONLY, AS THE / CODE DEMANDS KL8 HARDWARE COMPATIBILITY. MODELS OTHER THAN PDP-8 (SUCH AS / DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON AVAILABLE INTERFACES (OTHER / SOFTWARE DESIGNATES A SERIAL INTERFACE AS A LOGICAL PRINTER PORT; DECMATES / SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES THIS.), OR DON'T ALLOW / USABLE PLUG-IN OPTIONS. / IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE: / SETTING DEV30= 1 CREATES DEVICE 30/31 REMOTE LINE IOTS. / SETTING DEV40= 1 CREATES DEVICE 40/41 REMOTE LINE IOTS. / SETTING LEDERLE=1 CREATES DEVICE 43/44 REMOTE LINE IOTS (AND A CUSTOM / HEADER). / SETTING ORIGNAL=1 CREATES DEVICE 33/34 REMOTE LINE IOTS (ORIGINAL / SETTINGS). / SETTING SPRINT= 1 CREATES DEVICE 32/33 REMOTE LINE IOTS (SERIAL PRINTER / PORT). / SETTING USER= 1 CREATES DEVICE XX/XY REMOTE LINE IOTS. / IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT. / SETTING USER= 1 REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES: / XX= [RECEIVE IOT DEVICE CODE] (DEFAULT IS 40). / XY= [TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41). / SETTING SPRINT= 1 INHIBITS THE BUILT-IN CHECK FOR DECMATE OPERATION AND / USES THE SERIAL PRINTER PORT FOUND ON ALL / WPS-8-CONFIGURED PDP-8/E, PDP-8/A CONFIGURATIONS, / VT-78, AND ALL DECMATES (VT-278, DECMATE II, III, / III+) FOR REMOTE COMMUNICATIONS. / THE USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY BE / PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER / IS A MODEM (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC. REQUIRES A / GENDER CHANGER.), OR THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY / *ONLY* FOR A PRINTER, SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN" / KEY AS A SCREEN DUMP TO THE SERIAL PRINTER PORT, ETC. THESE ISSUES ARE NOT / RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY / KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE VERSIONS COULD REDEFINE THE / "PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.). / SETTING BRATE= NN SETS THE DEFAULT BAUD RATE (FOR SYSTEMS THAT SUPPORT / THIS FEATURE) FROM A TABLE OF VALUES (0-15) AS / FOLLOWS: / NN BAUD RATE / 00 50 / 01 75 / 02 110 / 03 134.5 / 04 150 / 05 300 / 06 600 / 07 1200 / 08 1800 / 09 2000 / 10 2400 / 11 3600 / 12 4800 / 13 7200 / 14 9600 / 15 19200 / SETTING ESCAPE= NNNN SETS THE DEFAULT ESCAPE CHARACTER TO NNNN. / SETTING FLOW= 1 ENABLES FLOW-CONTROL BY DEFAULT. / SETTING FLOW= 0 DISABLES FLOW-CONTROL BY DEFAULT. / SETTING FMODE= 0177 SETS THE DEFAULT FILE MODE TO ASCII. / SETTING FMODE= 4377 SETS THE DEFAULT FILE MODE TO BINARY. / SETTING GENMSG= 0 CAUSES NO BINARY TO BE GENERATED WHERE 'LCLMSG' IS / DEFINED. THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR / SUBSEQUENT OVERLAY BY K12PCH.BN TO DEFINE THE LOCAL / HEADER MESSAGE. THIS PARAMETER SHOULD NOT BE SET / UNLESS ONE OF THESE METHODS IS USED, ELSE THE HEADER / MESSAGE WILL BE UNDEFINED. (NOTE: IF K12PCH.BN / GENERATES A HEADER MESSAGE, THEN THIS PARAMETER IS / UNIMPORTANT, AS K12PCH.BN OVERLAYS THE BINARY OF / K12MIT.) / SETTING GENMSG= 1 CAUSES A HEADER MESSAGE TO BE GENERATED. THE CONTENTS / OF THE MESSAGE ARE CREATED BY SETTING LEDERLE=1 OR / UMSG=1. IF EITHER IS ZERO, A DEFAULT (NULL) MESSAGE / WILL BE GENERATED. / SETTING ICLOSE= 1 ENSURES A <^Z> AT <EOF> OF ASCII INPUT FILES BY / DEFAULT. / SETTING ICLOSE= 0 CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT. / SETTING INIECHO=0 CAUSES A FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL / CHARACTER ECHOING BY DEFAULT. / SETTING INIECHO=1 CAUSES A HALF-DUPLEX CONNECT MODE STATE WITH LOCAL / ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT. / SETTING LOWER= 0 ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT. / SETTING LOWER= -40 FOLDS LOWER-CASE CONSOLE OUTPUT TO UPPER-CASE BY / DEFAULT. / SETTING OCLOSE= 0 PREVENTS DEFAULT SENDING OF <^Z> AT <EOF> OF ASCII / FILES. / SETTING OCLOSE= 1 CAUSES <^Z> TO BE SENT AT <EOF> OF ASCII FILES BY / DEFAULT. / SETTING PORT= 0 CAUSES THE DP-278 PORT 0 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING PORT= 1 CAUSES THE DP-278 PORT 1 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING RETCNT= NNNN SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT. / SETTING UMSG= 0 PREVENTS THE LOCAL USER HEADER MESSAGE FROM BEING / GENERATED. / SETTING UMSG= 1 CAUSES THE LOCAL USER HEADER MESSAGE TO BE GENERATED. / THE PARAMETER GENMSG=1 IS REQUIRED TO BE SET. THE / SOURCE MUST BE MODIFIED LOCALLY TO CHANGE THE MESSAGE / TEXT FROM "INSERT LOCAL USER MESSAGE HERE!," AS THIS / IS THE DEFAULT CONTENTS. / KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES. / BRIEF USAGE DESCRIPTION. / KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT / DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE. / AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE: / 1. CONNECT (TO REMOTE SYSTEM AS TERMINAL). / 2. SEND FILESPEC (TO REMOTE RECEIVER OR SERVER). / 3. RECEIVE FILESPEC (FROM REMOTE SENDER). / 4. GET FILESPEC (FROM REMOTE SERVER). / 5. FINISH (SERVING). / 6. SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED **** / 7. EXIT (TO OPERATING SYSTEM). / 8. HELP (DISPLAYS HELP MESSAGE). / FILESPEC MAY BE ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION, / WHERE THE FILENAME AND EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2 / ALPHANUMERICS RESPECTIVELY, AS NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME / FORMAT). THE DEVICE: FIELD IS OPTIONAL; ALL COMMANDS USING THE DEVICE: / FIELD FOR LOCAL DEVICE SPECIFICATION WILL USE THIS DEVICE AS THE SOURCE OR / DESTINATION AS NECESSARY FOR THE LOCAL FILES. IF THE DEVICE: FIELD IS / OMITTED, THE DEFAULT DEVICE DSK: WILL BE USED. THE ACTUAL DEVICE USED MAY BE / SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND: / .ASSIGN DEV DSK / WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE. / KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT: THE ACTUAL DEFAULT PROMPT / TEXT IS PARTIALLY TAKEN FROM THE ACTUAL MACHINE KERMIT-12 IS CURRENTLY / EXECUTING ON. FOR EXAMPLE, IF KERMIT-12 HAS DETERMINED THE CPU TYPE AS / PDP-8/E, THE PROMPT WILL BE: / KERMIT-8/E> / THIS ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH / MESSAGES ORIGINATING FROM THE RESPECTIVE SYSTEMS. FUTURE VERSIONS WILL / SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES. / THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE / ESCAPE CHARACTER. / COMMAND RESTRICTIONS. / THE SEND COMMAND ALLOWS DEVICE:FILENAME.EXTENSION (6.2) WITH WILD-CARD / SUBSTITUTION. A * MAY BE GIVEN FOR AN ENTIRE FIELD (EITHER FILENAME OR / EXTENSION OR BOTH) ONLY. A ? WILL MATCH ANY SINGLE CHARACTER WHICH MUST / EXIST IN THE ACTUAL FILENAME OR EXTENSION, UNLESS RIGHT-MOST IN THE FIELD. / ALL MATCHING FILES WILL BE SENT. NO OUTBOUND FILENAME (AS-NAME) FACILITY / EXISTS AT THIS TIME. / THE RECEIVE COMMAND ALLOWS OPTIONAL DEVICE: ONLY. *THE FILENAME AND / EXTENSION ARE NOT ALLOWED*. NAMES OF RECEIVED FILES WILL BE MODIFIED IF / NECESSARY TO CONFORM TO THE 6.2 FORMAT. *IMPLEMENTATION RESTRICTION* : / CERTAIN REMOTE FILENAMES CONTAINING NON-ALPHANUMERIC CHARACTERS MAY CAUSE / KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL. / THE GET COMMAND ALLOWS OPTIONAL DEVICE: TO DETERMINE DESTINATION OF THE / INCOMING FILES. THE OUTBOUND FILESPEC MUST CONFORM TO LOCAL CONVENTIONS / (FILENAME AND EXTENSION ARE NOT LIMITED TO 6.2 FORMAT; THE DEVICE: FIELD / WILL NOT BE SENT TO THE REMOTE KERMIT UNLESS IT IS ILLEGAL WITHIN OS/8 / SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS. IN THIS CASE, THE DEFAULT / DEVICE DSK: APPLIES, AND THE ENTIRE "DEVICE" FIELD IS SENT ALONG WITH ANY / FILENAME AND EXTENSION). CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE WITH THIS / IMPLEMENTATION, AS IMBEDDED SPACES OR NON-ALPHANUMERIC CHARACTERS ARE NOT / ALLOWED, EVEN THOUGH THEY MAY BE REQUIRED ON THE REMOTE SYSTEM. WILD-CARD / CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE. / <^X> OR <^Z> CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT IS / NORMALLY A SLOW PROCESS, SINCE THE CHECKING IS DONE BY A SOFTWARE TIMEOUT / SCHEME. AT THE PRESENT TIME, THERE IS NO DISTINCTION BETWEEN THESE THO / CHARACTERS, SO IT IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF / FILES INVOLVED IN THE TRANSFER IS ABORTED. / DECMATE II/III/III-PLUS CONSIDERATIONS: / FUNCTION KEYS SEND <ESC> SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE. ALL SOFT / FUNCTION KEYS ARE THEREFORE INEFFECTIVE (EXCEPT FOR HOLD SCREEN WHICH ALWAYS / WORKS). / CONNECT MODE RUNS IN 8-BIT MODE. / THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE. / ANY VALID DECMATE II/III/III-PLUS CHARACTER SET IS ALLOWED WHILE IN CONNECT / MODE (MCS TCS LINE, ETC.). ALL <ESC> SEQUENCES ARE PASSED TO THE / SLUSHWARE/FIRMWARE UNMODIFIED. / KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM / CONNECT MODE. / DEFINITIONS. /017 CJL *200 /FOR DEFINITIONS /047 CJL / REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY. /046 CJL IFNDEF DEV30 <DEV30= 0> /USE DEVICE 30/31 VALUES IFNDEF DEV40 <DEV40= 0> /USE DEVICE 40/41 VALUES IFNDEF LEDERLE <LEDERLE=0> /USE LEDERLE LABS VALUES IFNDEF ORIGNAL <ORIGNAL=0> /USE ORIGINAL VALUES IFNDEF SPRINT <SPRINT=0> /USE DEVICE 32/33 VALUES IFNDEF USER <USER= 0> /USE USER-DEFINED VALUES REMOTE= DEV30+DEV40+LEDERLE+ORIGNAL /SET REMOTE LINE IOT CODE REMOTE= REMOTE+SPRINT+USER /SET REMOTE LINE IOT CODE IFZERO REMOTE <DEV40= 1> /DEFAULT TO DEVICE 40/41 VERSION / DEV30 PARAMETERS. IFNZRO DEV30 < IFNDEF REC <REC= 30> /DEVICE 30 INPUT IFNDEF SEN <SEN= 31> /DEVICE 31 OUTPUT > / DEV40 PARAMETERS (DEFAULT). IFNZRO DEV40 < IFNDEF REC <REC= 40> /DEVICE 40 INPUT IFNDEF SEN <SEN= 41> /DEVICE 41 OUTPUT > / LEDERLE PARAMETERS. /038 CJL IFNZRO LEDERLE < IFNDEF REC <REC= 43> /DEVICE 43 INPUT IFNDEF SEN <SEN= 44> /DEVICE 44 OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 0> /DON'T GENERATE USER MESSAGE > / ORIGNAL PARAMETERS. IFNZRO ORIGNAL < IFNDEF REC <REC= 33> /DEVICE 33 INPUT IFNDEF SEN <SEN= 34> /DEVICE 34 OUTPUT > / SPRINT PARAMETERS. /046 CJL IFNZRO SPRINT < IFNDEF REC <REC= 32> /DEVICE 32 INPUT IFNDEF SEN <SEN= 33> /DEVICE 33 OUTPUT > / USER PARAMETERS. IFNZRO USER < IFNDEF XX <XX= 40> /DEFAULT TO DEVICE 40 IFNDEF XY <XY= 41> /DEFAULT TO DEVICE 41 IFNDEF REC <REC= XX> /DEVICE XX INPUT IFNDEF SEN <SEN= XY> /DEVICE XY OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 1> /GENERATE USER MESSAGE > / REMOTE LINE IOT DEFINITIONS. / RECEIVE DEFINITIONS. RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG / TRANSMIT DEFINITIONS. RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11] RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG / CONSOLE TTY: DEFINITIONS. /017 CJL / KEYBOARD DEFINITIONS. /017 CJL IFNDEF KEY <KEY= 03> /KEYBOARD DEVICE CODE KCCIOT= KEY^10+6002 /CLEAR CONSOLE KEYBOARD FLAG, AC KRBIOT= KEY^10+6006 /READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG KRSIOT= KEY^10+6004 /READ CONSOLE KEYBOARD BUFFER STATIC KSFIOT= KEY^10+6001 /SKIP ON CONSOLE KEYBOARD FLAG / TELEPRINTER DEFINITIONS. /017 CJL IFNDEF TTY <TTY= 04> /TELEPRINTER DEVICE CODE TLSIOT= TTY^10+6006 /PRINT CHARACTER, CLEAR FLAG TSFIOT= TTY^10+6001 /SKIP ON TELEPRINTER FLAG / DEFAULT ESCAPE CHARACTER DEFINITION. /025 CJL IFNDEF ESCAPE <ESCAPE="]&37> /DEFAULT IS CONTROL-] / DEFAULT LOWER-CASE ENABLE DEFINITION. /030 CJL IFNDEF LOWER <LOWER= 0/-40> /LOWER-CASE IS ALLOWED AS IS /CHANGE TO -40 IF LOWER-CASE /SHOULD BE FOLDED TO UPPER-CASE / DEFAULT RETRY COUNT DEFINITION. /031 CJL IFNDEF RETCNT <RETCNT=5> /DEFAULT IS FIVE RETRIES / DEFAULT FILE MODE DEFINITION. /031 CJL IFNDEF FMODE <FMODE= 0177> /DEFAULT IS ASCII FILE MODE /4377 IS BINARY FILE MODE / DEFAULT FLOW-CONTROL MODE DEFINITION. /031 CJL IFNDEF FLOW <FLOW= 1> /DEFAULT IS FLOW-CONTROL ENABLED / DEFAULT ASCII INPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF ICLOSE <ICLOSE=1> /ENSURE <^Z> AT ASCII <EOF> / DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF OCLOSE <OCLOSE=0> /<^Z> NOT SENT AT ASCII <EOF> / DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS. /038 CJL IFNDEF GENMSG <GENMSG=1> /DEFAULT IS TO GENERATE A MESSAGE IFNDEF UMSG <UMSG= 0> /DEFAULT IS NO DUMMY USER MESSAGE IFNDEF LEDERLE <LEDERLE=0> /DEFAULT IS NO LEDERLE MESSAGE / THE NULL MESSAGE WILL BE GENERATED BY DEFAULT. / ECHO DEFINITION. /039 CJL IFNDEF INIECHO <INIECHO=0> /DEFAULT IS NO LOCAL ECHO / DEFAULT DECMATE I PORT DEFINITION. /050 CJL IFNDEF PORT <PORT= 0> /DEFAULT IS PORT ZERO / DEFAULT BAUD RATE DEFINITION. /050 CJL IFNDEF BRATE <BRATE= 7> /DEFAULT IS 1200 BAUD / STATE DEFINITIONS. STDAT= "D&137 /DATA STACK= "Y&137 /ACK STNAK= "N&137 /NAK STSIN= "S&137 /SEND-INIT STBRK= "B&137 /BREAK LINK STFIL= "F&137 /FILENAME HEADER STEOF= "Z&137 /END OF FILE OR REPLY STERR= "E&137 /ERROR PACKET STATT= "A&137 /FILE ATTRIBUTES STRIN= "R&137 /RECEIVE-INIT STEOT= "B&137 /BREAK TRANSMISSION STGEN= "G&137 /KERMIT GENERIC COMMAND / DEFAULT INIT PARAMETERS. DEFCK= "1&177 /DEFAULT 1 CHARACTER CHECKSUM /014 CJL DEFEOL= 15+40 /CR IS DEFAULT <EOL> DEFQCTL= "#&177 /"#" IS DEFAULT QCTL / BUFFER DEFINITIONS. /014 CJL DECIMAL /MAKE IT EASIER /014 CJL DEFMAXL=94 /DEFAULT MAXIMUM PACKET SIZE LINSIZ= 32 /KEYBOARD LINE BUFFER SIZE OCTAL /BACK TO NORMAL /014 CJL BUFSIZE=200 /128 CHARACTER RING BUFFERS /026 CJL /FOR NO-INTERRUPT CONNECT MODE / CONTROL CHARACTER DEFINITIONS. /023 CJL CNTRLA= "A&37 /<^A> DEFAULT MARK CHARACTER /023 CJL CNTRLB= "B&37 /<^B> /046 CJL CNTRLC= "C&37 /<^C> PROGRAM EXIT CHARACTER /023 CJL CNTRLD= "D&37 /<^D> /046 CJL CNTRLE= "E&37 /<^E> /046 CJL CNTRLF= "F&37 /<^F> /046 CJL CNTRLG= "G&37 /<^G> BELL CHARACTER /023 CJL CNTRLH= "H&37 /<^H> BACKSPACE CHARACTER /023 CJL CNTRLI= "I&37 /<^I> HORIZONTAL TAB CHARACTER /043 CJL CNTRLJ= "J&37 /<^J> LINEFEED CHARACTER /023 CJL CNTRLK= "K&37 /<^K> VERTICAL TAB CHARACTER /046 CJL CNTRLL= "L&37 /<^L> FORM FEED CHARACTER /046 CJL CNTRLM= "M&37 /<^M> CARRIAGE RETURN CHARACTER /023 CJL CNTRLN= "N&37 /<^N> /046 CJL CNTRLO= "O&37 /<^O> ECHO FLIP CHARACTER /023 CJL CNTRLP= "P&37 /<^P> PROGRAM RESTART CHARACTER /023 CJL CNTRLQ= "Q&37 /<^Q> OUTPUT RESUME CHARACTER /023 CJL CNTRLR= "R&37 /<^R> /046 CJL CNTRLS= "S&37 /<^S> OUTPUT WAIT CHARACTER /023 CJL CNTRLT= "T&37 /<^T> /046 CJL CNTRLU= "U&37 /<^U> /046 CJL CNTRLV= "V&37 /<^V> /046 CJL CNTRLW= "W&37 /<^W> /046 CJL CNTRLX= "X&37 /<^X> FILE ABORT CHARACTER /044 CJL CNTRLY= "Y&37 /<^Y> /046 CJL CNTRLZ= "Z&37 /<^Z> ABORT AND <EOF> CHARACTER /044 CJL DELETE= 177 /<DEL> DELETE OR <RO> CHARACTER /034 CJL LOWERC= "C&177+40 /LOWER-CASE C (CLOSE CHARACTER) /025 CJL UPPERC= "C&177 /UPPER-CASE C (CLOSE CHARACTER) /025 CJL / I/O AND FIELD DEFINITIONS. /019 CJL BUFFLD= 10 /I/O BUFFER FIELD /019 CJL DIRFLD= 10 /DIRECTORY LOOKUP BUFFER FIELD /028 CJL DMIFLD= 10 /DECMATE ONCE-ONLY CODE FIELD /046 CJL MSGFLD= 10 /TEXT MESSAGE FIELD /023 CJL PAGCNT= 2 /I/O BUFFER SIZE IN PAGES /019 CJL PRGFLD= 00 /PROGRAM FIELD /019 CJL USRFLD= 10 /USR FIELD /020 CJL / OS/8 MONITOR DEFINITIONS. /014 CJL SBOOT= 7600 /MONITOR EXIT LOCATION IS 07600 /014 CJL USR= 7700 /NON-LOCKED USR ENTRY POINT /035 CJL / USER SERVICE ROUTINE AND HANDLER DEFINITIONS. /020 CJL CLOSE= 4 /CLOSE TENTATIVE OUTPUT FILE /020 CJL ENTER= 3 /ENTER TENTATIVE OUTPUT FILE /020 CJL FETCH= 1 /FETCH HANDLER /020 CJL INQUIRE=12 /INQUIRE ABOUT HANDLER /020 CJL LOOKUP= 2 /LOOKUP FILE /020 CJL RESET= 13 /RESET DEVICE CONTROL WORD TABLE/037 CJL USRIN= 10 /LOCK USR IN CORE /020 CJL WRITE= 4000 /I/O CALL WRITE BIT /020 CJL / INSTRUCTION DEFINITIONS. CLCL= 6136 /CLEAR CLOCK FLAG (8/A, ETC.) /046 CJL CLSK= 6131 /SKIP ON, CLEAR CLOCK FLAG /046 CJL CLSK8A= 6137 /SKIP ON CLOCK FLAG (8/A, ETC.) /046 CJL COM= 0017 /COMPLEMENT AC DCAC= DCA . /CURRENT PAGE DCA INSTRUCTION /047 CJL IAAC= 6171 /"A" REGISTER TO AC IACA= 6167 /AC TO "A" REGISTER ISZC= ISZ . /CURRENT PAGE ISZ INSTRUCTION /050 CJL JMPC= JMP . /CURRENT PAGE JMP INSTRUCTION /047 CJL JMPIC= JMP I . /CURRENT PAGE JMP I INSTRUCTION /047 CJL JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION /047 CJL JMSIC= JMS I . /CURRENT PAGE JMS I INSTRUCTION /047 CJL LINC= 6141 /GOTO LINC MODE PDP= 0002 /GOTO PDP-8 MODE PRQ3= 6236 /TYPE THREE PANEL REQUEST /046 CJL TADC= TAD . /CURRENT PAGE TAD INSTRUCTION /047 CJL R3L= 7014 /ROTATE AC (NOT LINK) LEFT 3 /046 CJL / NUMERIC LOAD DEFINITIONS. /014 CJL NL0000= CLA /LOAD AC WITH 0000 /046 CJL NL0001= CLA IAC /LOAD AC WITH 0001 /014 CJL NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 /014 CJL NL0003= CLA STL IAC RAL /LOAD AC WITH 0003 (8/I ON UP) /046 CJL NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 (8/I ON UP) /046 CJL NL0006= CLA STL IAC RTL /LOAD AC WITH 0006 (8/I ON UP) /046 CJL NL0010= CLA IAC RAL RAR /LOAD AC WITH 0010 (6120) /024 CJL NL0100= CLA IAC BSW /LOAD AC WITH 0100 (8/E ON UP) /024 CJL NL3776= CLA CLL CMA RAR RAL /LOAD AC WITH 3776 (8/I OR 8/L) /024 CJL NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 /046 CJL NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 /014 CJL NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 /046 CJL NL6000= CLA STL IAC RTR /LOAD AC WITH 6000 (8/I ON UP) /046 CJL NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 /014 CJL NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 /014 CJL NL7777= CLA CMA /LOAD AC WITH 7777 /014 CJL / DECMATE I COMMUNICATIONS PORT DEFINITIONS. /050 CJL IPORT0= 30 /COMMUNICATIONS PORT 0 INPUT DEVICE CODE RKFL0= IPORT0^10+6000 /SET COMMUNICATIONS PORT 0 INPUT FLAG RKSF0= IPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG RKCC0= IPORT0^10+6002 /CLEAR AC RKIE0= IPORT0^10+6005 /PORT 0 INPUT INTERRUPT ENABLE PER AC[11] RKRB0= IPORT0^10+6006 /READ COMMUNICATIONS PORT 0 INTO AC OPORT0= 31 /COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE RTFL0= OPORT0^10+6000 /SET COMMUNICATIONS PORT 0 OUTPUT FLAG RTSF0= OPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG RTCF0= OPORT0^10+6002 /NOP RTIE0= OPORT0^10+6005 /PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11] RTLS0= OPORT0^10+6006 /WRITE COMMUNICATIONS PORT 0 FROM AC IPORT1= 34 /COMMUNICATIONS PORT 1 INPUT DEVICE CODE RKFL1= IPORT1^10+6000 /SET COMMUNICATIONS PORT 1 INPUT FLAG RKSF1= IPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG RKCC1= IPORT1^10+6002 /CLEAR AC RKIE1= IPORT1^10+6005 /PORT 1 INPUT INTERRUPT ENABLE PER AC[11] RKRB1= IPORT1^10+6006 /READ COMMUNICATIONS PORT 1 INTO AC OPORT1= 35 /COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE RTFL1= OPORT1^10+6000 /SET COMMUNICATIONS PORT 1 OUTPUT FLAG RTSF1= OPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG RTCF1= OPORT1^10+6002 /NOP RTIE1= OPORT1^10+6005 /PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11] RTLS1= OPORT1^10+6006 /WRITE COMMUNICATIONS PORT 1 FROM AC PCON= 36 /PORT STATUS AND CONTROL DEVICE CODE SMFL= PCON^10+6000 /SET MODEM CHANGE FLAG MFSK= PCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG WCON0= PCON^10+6002 /WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER PSR= PCON^10+6003 /READ PORT STATUS REGISTER PMR= PCON^10+6004 /READ PORT MODEM REGISTER MFIE= PCON^10+6005 /LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11] WCON1= PCON^10+6006 /WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER RACD= PCON^10+6007 /RESET ACTIVE COMMUNICATIONS PORT PER AC[0] / DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS. /046 CJL PORTIN= 30 /COMMUNICATIONS PORT INPUT DEVICE CODE IFL= PORTIN^10+6000 /SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG ISF= PORTIN^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG ICF= PORTIN^10+6002 /NOP (CLEAR THE AC?) INOP1= PORTIN^10+6003 /(NOP?) IRS= PORTIN^10+6004 /READ COMMUNICATIONS PORT RECEIVE BUFFER IIE= PORTIN^10+6005 /COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11] IRB= PORTIN^10+6006 /READ COMMUNICATIONS PORT RECEIVE BUFFER INOP2= PORTIN^10+6007 /(NOP?) PORTOUT=31 /COMMUNICATIONS PORT OUTPUT DEVICE CODE DUMBFL= PORTOUT^10+6000 /SET COMMUNICATIONS PORT DUMMY FLAG DUMBSF= PORTOUT^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG DUMBCF= PORTOUT^10+6002 /NOP (CLEAR THE AC?) ONOP1= PORTOUT^10+6003 /(NOP?) OPC= PORTOUT^10+6004 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER DUMBIE= PORTOUT^10+6005 /COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11] OLS= PORTOUT^10+6006 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER ONOP2= PORTOUT^10+6007 /(NOP?) PORTCON=36 /COMMUNICATIONS PORT CONTROL DEVICE CODE MFL= PORTCON^10+6000 /SET MODEM CHANGE FLAG MSF= PORTCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG MLC= PORTCON^10+6002 /LOAD MODEM CONTROL REGISTER MSB= PORTCON^10+6003 /LOAD BAUD RATE REGISTER MRS= PORTCON^10+6004 /READ MODEM STATUS REGISTER MIE= PORTCON^10+6005 /MODEM CHANGE INTERRUPT ENABLE PER AC[11] MPSCC= PORTCON^10+6006 /ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER / MISCELLANEOUS DEFINITIONS. /014 CJL / STATIC DATE CALCULATIONS. /024 CJL / THESE EQUATIONS CAUSE PRINTABLE TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN / IN OS/8 INTERNAL FORMAT. PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION, / REVISION, REVDATE, AND REVDGRP. REVDATE AND REVDGRP SHOULD BE OBTAINED FROM / THE SYSTEM WHEN RELEASING A NEW VERSION AFTER FIRST CORRECTLY INVOKING THE / SYSTEM DATE COMMAND. / VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)] / REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77] / REVDATE=[THE CONTENTS OF 17666 (DATE WORD)] / REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)] IFNDEF REVDATE <REVDATE=4464> /REVISION DATE (LOCATION 17666) IFNDEF REVDGRP <REVDGRP=0400> /REVISION 8 YEAR DATE GROUP (LOCATION 07777) IFNDEF REVISIO <REVISIO="G&77> /REVISION OF KERMIT-12 IFNDEF VERSION <VERSION=12> /VERSION OF KERMIT-12 DAY= REVDATE&370%10 /REVISION DAY DGROUP= REVDGRP&600%20 /REVISION DATE GROUP (WHICH 8 YEARS) MONTH= REVDATE&7400%400 /REVISION MONTH YEAR= REVDATE&7+DGROUP+106 /REVISION YEAR (SINCE 1900) |
Added src/kermit-12/k12mit.dsk.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 | KERMIT-12 Release Disk Information File a/o 11-Jul-1992. Description of files on RT-11 format double-density (RX02) diskettes. Diskette #1 Source Files Name Size Block Date K12MIT.PAL 453 14 6-Sep-90 K12PCH.PAL 50 467 6-Sep-90 K12ENC.PAL 71 517 8-Jul-92 K12DEC.PAL 69 588 8-Jul-92 K12PRM.PAL 3 657 6-Sep-90 K12CLR.PAL 2 660 30-Aug-90 K12ENB.PAL 47 662 1-Oct-91 K12DEB.PAL 45 709 22-Oct-91 K12IPL.PAL 19 754 6-Oct-91 K12IPG.PAL 23 773 8-Oct-91 <Unused> 192 796 10 files in 782 blocks, 192 free blocks. Diskette #2 Documentation and Support Files Name Size Block Date K12MIT.ANN 48 14 11-Jul-92 K12MIT.UPD 3 62 11-Jul-92 K12MIT.DOC 135 65 6-Sep-90 K12MIT.NOT 56 200 11-Jul-92 K12MIT.ENC 24 256 6-Sep-90 K12PL8.ENC 24 280 30-Aug-90 K12CRF.ENC 17 304 30-Aug-90 K12GLB.ENC 6 321 5-Sep-90 K12MIT.LST 30 327 6-Sep-90 K12MIT.DSK 52 357 11-Jul-92 K12ENC.DOC 24 409 31-Aug-90 K12MIT.BWR 74 433 1-May-92 K12MIT.BOO 18 507 1-Oct-91 K12PL8.BOO 18 525 1-Oct-91 K12CRF.BOO 12 543 1-Oct-91 K12GLB.BOO 4 555 1-Oct-91 K12IPL.DOC 9 559 6-Oct-91 K12FL0.IPL 18 568 8-Oct-91 K12FL1.IPL 18 586 8-Oct-91 K12IP0.ODT 4 604 6-Oct-91 K12IP1.ODT 4 608 6-Oct-91 <Unused> 376 612 21 files in 598 blocks, 376 free blocks. Description of individual files. K12MIT.PAL This is the current release of KERMIT-12 in source form. The beginning of this file contains much information about setting up various hardware (KL-8, etc.) and software settings for KERMIT-12 internal operation; the first 30-35 pages of the listing file created by PAL8 are available as a stopgap user guide in the form of K12MIT.DOC. It is extremely important to read the section on assembly instructions for K12MIT, as non-default switches must be set for proper assembly. Due to the sorry state of the predecessor source (K08MIT) this file is based on, it has taken an extreme amount of effort to overcome many former limitations on many levels; there are still many problems which only development time (when available) will overcome. There is also a lot of inconsistency of implementation, i.e., some features are totally finalized (or are so written in such a way that only a non-existent section of code could "wake up" the feature), while others are bound to be "bodily replaced" (such as the low-level protocol implementation which can "blow up" when dealing with certain atypical (though perfectly reasonable) KERMIT implementations which pass data such as lower-case file name characters, etc.) when time is available. Approx. 2/3 of the source code and 80% of the current file contents have been written by Charles Lasner taking advantage of over 20 years of PDP-8 hacking and "cook-book" methods, etc., including some never-before-seen techniques "borrowed" from P?S/8 (P?S/8 is an alternate PDP-8 operating system and is copyright CLA Systems). Every new piece of code added to KERMIT-12 usually represents an exemplary method for handling a given task, often producing "quantum leap" improvements over the former code; see the built-in edit history for details. It should be noted that KERMIT-12 runs on the minimum OS/8 family configuration of 8K 12-bit words total main memory (including the operating system; this could change in future versions!) and is probably the smallest known (in terms of total executable binary code) KERMIT implementation. (If a P?S/8 KERMIT is written, it will run on a smaller machine, only 4K 12-bit words!) A rough table of improvements (wish list?) includes: a) 100% rewrite of the command parser to conform to accepted guidelines of most KERMITs. b) 100% rewrite of the protocol-related features to allow for a robust (though minimal) KERMIT implementation that should work in all cases. c) Adding in local feature improvements (Connect mode parity support, VT-100 terminal support, command files, etc.) which depend on the better command processor to implement efficiently. d) Adding in protocol improvements such as negotiated parameters (eight-bit, repeat-count compression, file attributes, server mode, etc.) and session statistics (internally and visually on-line). e) Additional "frills" such as scripting language, macros, etc., as well as anything else someone can add to this list. K12PCH.PAL This is the official "patch" file for K12MIT.PAL. All relevant customizing can be accomplished within K12PCH.PAL, as all conditional parameters and their consequences have been copied to K12PCH.PAL, leaving only the "pure" code behind in K12MIT.PAL. A standard assembly of K12MIT.PAL producing K12MIT.BN (or K12MIT.SV via ABSLDR.SV) can be overlaid by K12PCH.BN to accomplish any relevant changes to configure a custom version. If any parameter causes this convention to be violated, please notify Charles Lasner, as this specification must be met to support the ability for a minimal system to configure KERMIT-12 from K12MIT.SV and K12PCH.BN on modest hardware (such as one pair of RX01 only). Use of K12PCH.PAL mandates a local banner message for the running KERMIT.SV which should be locally modified as necessary. The default message is "Insert Local User Message Here" to encourage customization. K12ENC.PAL This is an encoding program (aka ENCODE) to convert OS/8 files in any format to a "printable" ASCII format suitable for transmission through any medium which doesn't "mangle" the printing ASCII characters from 0 through 9, and A through V (or a through v). Several binary files are distributed in ENCODE format (see elsewhere). All characters outside of the printing ASCII character set are ignored except for the necessity for "white-space" to exist between the two fields of the optional (FILE XXXXXX.XX) command, which specifies the name of the original (un-encoded) file. Several other optional commands are supported; see K12MIT.ENC as an example of all of them. When properly decoded (see K12DEC.PAL description below), the original file is totally restored except for additional information words from the directory (not really in the file itself!), thus only the creation date (if the directory is setup to support it) is lost. Users of ENCODE are encouraged to use the (REMARK .....) command to help in the restoration of the file. Assembly instructions as well as usage examples are provided in the source file. NOTE: output files created by this program can overwrite existing files with identical names; use this utility carefully! The format used by ENCODE (and DECODE) was designed by Charles Lasner and Frank da Cruz to allow seven-bit ASCII transmission of arbitrary binary files (any file where the eight-bit representation must be maintained, such as OS/8 files unpacked/packed as strings of eight-bit bytes) through "hostile environments," such as seven-bit ASCII-only KERMIT (alas, the current sorry state of KERMIT-12), or various network E-mailers. An optional checksum feature (supported on the PDP-8 version) will ensure against data corruption. The format is robust enough to allow extraneous "white-space" (<space> <HT> <VT> <FF>, <CR>/<LF>, etc.) to be introduced by various intermediate "editors" with no loss. It is hoped that this format is adopted on many systems, as it was designed to overcome some of the limitations of the former (albeit extremely popular) UUENCODE and .BOO formats used elsewhere. K12DEC.PAL This is an auxiliary utility (aka DECODE) to decode the encoded binary files created by ENCODE into their original form. (See description of K12ENC.PAL.) The files can be recreated with any arbitrary file name including the original file name if embedded within the encoded file (embedded file name commands are optional to the encoded file format.), and can be directed to any OS/8 file-structured device. Since this utility is potentially to be used on systems with "ancient" assemblers, the source file has been restricted in the use of "frill" features, so it can be assembled by virtually any known standard released version of PAL8 associated with any release of PS/8, PS/12, OS/8, OS/12, OS/78, OS/278, etc., and should be used to decode K12PL8.ENC and K12CRF.ENC into PAL8.SV AND CREF.SV respectively, which will then allow further assemblies with the latest PAL8 and CREF (Version B0). Assembly instructions as well as usage examples are contained within the source file. NOTE: output files created by this program can overwrite existing files with identical names; use this utility carefully! K12PRM.PAL This is an example of a custom parameter file ("PARAM" in the documentation) for use with either K12MIT.PAL or K12PCH.PAL. It sets most of the common parameters to their likely (possibly default) values. VT-78-specific parameters are given for SLU2 support; a VT-78-specific banner message is created as an example of a user-defined banner message. K12CLR.PAL This file is a simple memory-clearing file. All KERMIT-12 loading memory is pre-cleared by loading K12MIT.BN over the binary file K12CLR.BN derived from this file. This yields "cleaner" core-image files which will compress better when encoded with ENCODE (K12ENC) or ENBOO (K12ENB). K12ENB.PAL This file is a utility program to encode any OS/8 file into .BOO format for distribution via any "ASCII" path much the same as the ENCODE utility. While not as robust as ENCODE format, .BOO files are generally smaller, which may be desirable. This implementation uses length correction bytes at the end of any file requiring it. The ultimate decoding program must support this aspect of the format to ensure reliable file recreation. This utility, as well as the companion K12DEB (see below) use the standard OS/8 unpacking scheme internally to ensure proper file representation on other systems. This allows ASCII (albeit "delicate") files to be encoded/decoded between systems. This allows exchange of such files as TECO macros without loss. K12DEB.PAL This file is a utility program to decode .BOO format files back into their original (binary) form. Length correction bytes are supported to ensure proper file decoding. Any file encoded with ENBOO (aka K12ENB) will decode perfectly back into the original form as long as the file's contents are intact other than white-space and other insignificent "cosmetic" considerations. Files not originating from OS/8 (not an exact multiple of 384 bytes) will be padded with null bytes to fill the rest of an entire OS/8 record. Files stored this way and then encoded again will reflect these extra null bytes. This implementation doesn't check for line terminations, so files delivered without proper <CR>/<LF> line termination are acceptable. K12IPL.PAL This file is a utility program to load portions of KERMIT-12 directly into memory without any error checking or recovery method. It is used to create K12MIT.SV "from the ground up." Once K12MIT.SV has been created, this utility should be abandoned in favor of K12MIT.SV to acquire all further files. Use this utility only if no other method is available, as it is inherently unreliable. The safest way to use it is with a local dedicated connection to another machine via null modem. K12MIT.SV is available split into single-field encoded files to be loaded by this program. Documentation on the entire loading process is contained within the source file. The binary version(s) of this program can be directly keyed into ODT if desired as the shortest way to load K12MIT.SV if desired. (See K12IP0.ODT and K12IP1.ODT description below.) K12IPG.PAL This file is a utility program to generate the .IPL format files (K12FL0.IPL and K12FL1.IPL from K12MIT.SV) meant to be loaded with IPL0.SV and IPL1.SV as created by the user from K12IPL.PAL. It is primarily a development tool and must be modified if K12MIT.SV is enlarged to occupy an additional memory field. K12MIT.ANN This is the release announcement file for KERMIT-12. K12MIT.UPD This is the release update file for KERMIT-12. K12MIT.DOC This is a collection of hints and kinks, etc. regarding KERMIT-12, including hardware-specific recommendations for customizing and assembling KERMIT-12 for a variety of configurations. The edit history of KERMIT-12 is also included. (This file is the beginning of the file K12MIT.PAL. It is intended for those who do not obtain K12MIT.PAL, the main source code, which is much longer and beyond the filing capabilities of some of the smaller (though supported) systems. By using the information in K12MIT.DOC, KERMIT-12 can be created by merely obtaining all of the files except K12MIT.PAL.) K12MIT.NOT This is a collection of release notes for the latest version. New issues raised or solved by this release will be collected here. Old, but open issues may be retained in this file also. K12MIT.ENC This is the standard assembly of the distributed K12MIT.PAL (using PAL8 Version B0) into K12MIT.BN which is then loaded (using ABSLDR.SV) over K12CLR.BN to produce K12MIT.SV which is then converted to ENCODE format (using ENCODE.SV (aka K12ENC.SV) as described above). All parameters are set to their normal defaults including those parameters which cause the local banner message to be generated as a valid null message (in case K12PCH.BN is not loaded over K12MIT.SV). This file should first be decoded with DECODE.SV (aka K12DEC.SV) into K12MIT.SV and then overlaid by K12PCH.BN to create a customized local version. The resultant customized version should be named KERMIT.SV (or any other appropriate file name), and not be named K12MIT.SV, to avoid confusion with the standard release file of KERMIT-12; it is likely all future releases will use this naming convention. K12PL8.ENC This is PAL8 Version B0 from the "official" release of OS/278 Version 2, i.e., the version available as DECUS DM-101, in ENCODE format. It has no actual dependencies on any cpu hardware extensions beyond the classic PDP-8 (as was originally intended). PAL8 Version B0 and its companion CREF Version B0 (see below) will run on any OS/8 family member system. There is a minor quirk of PAL8 Version B0 documented in K12MIT.PAL regarding interaction with the TTY: handler of operating systems prior to OS/278, but in all other respects this should be treated as a replacement for all prior PAL8 releases. This version supports 128k assembly as do several prior versions; the listing format will truncate one column earlier on wide source file input lines. K12MIT.PAL requires the use of PAL8 Version B0 (or essentially any 2-digit release just prior to Version B0; in any case no versions prior to Version 10A) for proper assembly. PAL8 Version B0 is distributed as a convenience to KERMIT-12 users. K12CRF.ENC This is CREF Version B0 from the "official" release of OS/278 Version 2, i.e., the version available as DECUS DM-101, in ENCODE format. It has no actual dependencies on any hardware extensions beyond the classic PDP-8 (as was originally intended). Besides fixing several long-standing bugs of CREF, this version is the required companion to PAL8 Version B0. This is the only known CREF version that will format 128k-capable assembly output correctly, which was a major sore point for three prior releases, preventing their proper use; many users have had to stick with PAL8 V10A and CREF V3 until this release. CREF Version B0 is distributed as a convenience to KERMIT-12 users. K12GLB.ENC This is a TECO macro K12GLB.TEC (aka GLOBAL.TEC) which maintains the concordance between K12MIT.PAL and K12PCH.PAL. It is distributed in ENCODE format to protect the rigid format requirements of a TECO macro. All global symbols required by K12PCH.PAL are equated within K12MIT.PAL in a special format required by GLOBAL.TEC. The OS/8 MUNG command is used to update K12PCH.PAL whenever KERMIT-12 development (within K12MIT.PAL) dictates. KERMIT-12 developers must fully understand how to use this utility. K12MIT.LST This file is a symbol-table listing of K12MIT.PAL minus the code listing. It is needed by K12GLB.TEC for the maintenance of K12PCH.PAL. K12MIT.LST can be created from K12MIT.PAL merely by assembling K12MIT.PAL as documented within K12GLB.TEC; it is provided in the distribution for those unable to obtain the main source (K12MIT.PAL) due to its size. K12MIT.DSK This file, which explains the KERMIT-12 distribution files as they appear on the RT-11-format RX02 release diskettes. K12ENC.DOC This is a description of the encoding format used for the ENCODed binary files (.ENC) in the KERMIT-12 release. Related issues and file considerations are also discussed to foster future encoding formats, since the format is subject to possible change. K12MIT.BWR This file documents known problems with the current release of KERMIT-12 and related utilities. Possible workarounds are also discussed. K12MIT.BOO This is the standard assembly of the distributed K12MIT.PAL (using PAL8 Version B0) into K12MIT.BN which is then loaded (using ABSLDR.SV) over K12CLR.BN to produce K12MIT.SV which is then converted to .BOO format (using ENBOO.SV (aka K12ENB.SV) as described above). All parameters are set to their normal defaults including those parameters which cause the local banner message to be generated as a valid null message (in case K12PCH.BN is not loaded over K12MIT.SV). This file should first be decoded with DEBOO.SV (aka K12DEB.SV) into K12MIT.SV and then overlaid by K12PCH.BN to create a customized local version. The resultant customized version should be named KERMIT.SV (or any other appropriate file name), and not be named K12MIT.SV, to avoid confusion with the standard release file of KERMIT-12; it is likely all future releases will use this naming convention. It is conceivable that distribution "paths" may be "hostile" to .BOO format thus making K12MIT.SV (or other files) undeliverable when encoded in .BOO format. For example, some users acquire KERMIT-12 via a path including WPS and WPFLOP.SV. .BOO files cannot reliably pass through this process. In this or any other "troublesome" case, the ENCODE format equivalent file is recommended for distribution. K12PL8.BOO This is PAL8 Version B0 from the "official" release of OS/278 Version 2, i.e., the version available as DECUS DM-101, in .BOO format. It has no actual dependencies on any cpu hardware extensions beyond the classic PDP-8 (as was originally intended). PAL8 Version B0 and its companion CREF Version B0 (see below) will run on any OS/8 family member system. There is a minor quirk of PAL8 Version B0 documented in K12MIT.PAL regarding interaction with the TTY: handler of operating systems prior to OS/278, but in all other respects this should be treated as a replacement for all prior PAL8 releases. This version supports 128k assembly as do several prior versions; the listing format will truncate one column earlier on wide source file input lines. K12MIT.PAL requires the use of PAL8 Version B0 (or essentially any 2-digit release just prior to Version B0; in any case no versions prior to Version 10A) for proper assembly. PAL8 Version B0 is distributed as a convenience to KERMIT-12 users. K12CRF.BOO This is CREF Version B0 from the "official" release of OS/278 Version 2, i.e., the version available as DECUS DM-101, in .BOO format. It has no actual dependencies on any hardware extensions beyond the classic PDP-8 (as was originally intended). Besides fixing several long-standing bugs of CREF, this version is the required companion to PAL8 Version B0. This is the only known CREF version that will format 128k-capable assembly output correctly, which was a major sore point for three prior releases, preventing their proper use; many users have had to stick with PAL8 V10A and CREF V3 until this release. CREF Version B0 is distributed as a convenience to KERMIT-12 users. K12GLB.BOO This is a TECO macro K12GLB.TEC (aka GLOBAL.TEC) which maintains the concordance between K12MIT.PAL and K12PCH.PAL. It is distributed in .BOO format to protect the rigid format requirements of a TECO macro. All global symbols required by K12PCH.PAL are equated within K12MIT.PAL in a special format required by GLOBAL.TEC. The OS/8 MUNG command is used to update K12PCH.PAL whenever KERMIT-12 development (within K12MIT.PAL) dictates. KERMIT-12 developers must fully understand how to use this utility. K12IPL.DOC This file is a description of the encoding format for .IPL files as used in the direct loading method of acquiring K12MIT.SV. K12FL0.IPL This file is the field zero data of K12MIT.SV encoded into .IPL format for use with IPL0.SV (from K12IPL.PAL). K12FL1.IPL This file is the field one data of K12MIT.SV encoded into .IPL format for use with IPL1.SV (from K12IPL.PAL). K12IP0.ODT This file is a sample of an ODT session used to create IPL0.SV using manual entry into ODT and a SAVE command only. Some values shown are default and may need to be customized according to parameters documented in K12IPL.PAL. Using IPL0.SV (and IPL1.SV from K12IP1.ODT as described below) is the shortest way possible to obtain K12MIT.SV when no other method is available. K12IP1.ODT This file is the field one companion to K12IP0.ODT used to create IPL1.SV using similar means to those described for IPL0.SV. Both IPL0.SV and IPL1.SV are required to directly obtain K12MIT.SV. [end of file] |
Added src/kermit-12/k12mit.enc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | (REMARK Image File Created by PDP-8: 06-Sep-1990) (REMARK File Date: 06-Sep-1990) (FILE K12MIT.SV) (REMARK Standard core-image binary distribution copy of KERMIT-12.) (REMARK 06-Sep-1990 Version 10g.) (REMARK File decodes into K12MIT.SV.) (REMARK Use DECODE.SV [aka K12DEC.SV] to decode into K12MIT.SV.) <VVM862000400FI000V02280P2191407G289VA7G1S470098C087H80G52CGE0102R0G00> <50E2310A4G20K8I43OG1OVG2NGU00E0442K408F6800AG7103HV05F1S00S0885880GU8> <G00L8302AHC8G05K8480802KG02BOI64GG1090G24010480200J800X001GHIMSP25AHN> <DF92ESGF4SK2E6LJ0CBB4GQF6GVKMDCJ4QOK64LL0CVJALQEMI1KTCU33DPCM5RJACJEM> <IM750VL6A1J0TPHUFR82S7J9VQJEDLIDCA32DQOM5PKVSJB70QEMK1JSC5N2OHADFPJ1S> <VJ0SPJ6P786D472SQH65P84TFJAFP2ML1L6CQJ7TP6E6PIBSTIG8QJ65R86C3R4SK3UJP> <L9T5B2OK2UB5CESQJ4SLOEGLJ7AJ26THA4AJBUC6N9CO6EKLJGCFN5IONED9IDQQAOTK0> <M6LJOCRJA5P3D09KUC2J700000X003UJVPFT28CG4VTVA58IBU8I343NUSVKBSOI343NU> <O00O4CH4O8UA5P0QDJ1341F6T9400000NVPSN812MKM95S9FAC2J1KOQL15VUFDRC8LMS> <S006FEJ3QLVK0PI1FH30CG4VNP29FD302UM60PHMCHQ0BLK00PIDC3J7EG2U0VO000000> <0000X001AE5AJ003L9O9M206OQ73018BV17001JRIVV41PTM8JJRCG7MMPTHFTJRCH7MM> <PTN81JRCG7M7PTHFRJRCH7M7PTHFRJRCG7K1PTHFPJRCH7K1PTHFPJRCG7K1PTHFPJREQ> <N7M5UUFCBTCUONPPTNDBJPEG3K0N00893A0GR7J371106FAKOCVC40Q1J31LQ6J3DCD66> <V8MGE5448SDUK1OUMD3I31274IJ0EAPJL4B7NA9MFEMGP11D2FL2Q5LMTKCO8B8V66NL3> <CBFAI26UMVA5TFF8RR0M5NMECS0000000X00070OVK82V02K2003G1G228QG46S00DABO> <0QR7I1LV803CCUS6P9RODLBCGRD7F1N5DM3ESP06U5SGDV3KGS0G71O9F23H8T4735SOE> <93KGSN661PMCG3LCP47CPJGPTJ0HK3663FKB872SP4E6LJ8SG1PHPB6EMGUC3D2SOQQ6U> <25T41PRQJ69NLMCS000QR7M1LVDG3EST075PPGEDJK0TB791R6ES6FCS4D0PPGSBJKHPB> <7EMGUE3D2SSQUKPQDTDJN00000X000PX0000X0000XF7GBX000LF7BO0UANHOME7LPO0U> <8121TDQNJO0U8121TDS7JO0U8121TDSBQC0U629O6UMU3O0U8121TDSBP40U8121TDSBP> <G0U8121TDOSJO0U8121TDSBOK0U8121TDSBO41MOS61SUF7JO1MOSM1S0INJC6U85C18P> <81C0IJT8031MG041SRANICIE3O3O6U7J9LAE4GO5897JIE0U87HT4KF7820UDLBP6971S> <1SGF4H4SK2KK1SGF3Q98UENG2AU84TVH084TV3IG3QEVOG3QEVHP81T7FRU40UJNSMVH0> <G2ROAI6IAIRHP841SMOS3OF0G801SJF1A1856GGL50F04LSKF6A0B0F20KOGU0QBSUG1H> <T50419H15F067JPO7G3VVFFJPSU0DBRSUF7JO1OFFJPSUF071TF9VJPS0629O7DSFG3GU> <NIFPSU0E3QUCV7JO1HP7NPSUF071TF2VJPS0S7LS3UF7G3FOFFJPSU0CMVGUV7JO0UANH> <OME7LPO0U8121TDQNJO0U8121TDS7JO0U8121TDSBQC0U629O6UMU3O0U8121TDSBP40U> <8121TDSBPG0U8121TDOSJO0U8121TDSBOK0U8121TDSBO40UB53QRNS7JO0U218DSD0L0> <K00000000X006IX0000X0000INGPS961C1S1F0HT4KING3UU4NHPC1628I037J9K2E27G> <2B8F0ROUE718D8971S18FG21T6KM82HIG2O01S3F3PP8I7J5LS0G7GDT0A3S145A5A8T0> <A3S1S0KPBO0000000000001VF1BP4I7KK0IEG10LC91HC0S16H83UU27H56BG1IKOCGG7> <TS5F4I8UIG0PGUJ4JGU064J0K1VF1BP4I7KK0IEG1H4O5G3G4Q507I9S51H95C971S0C9> <61FA0U07IDS57114S7G1H4O5T83O1VF1JOIC2O1O2D2O2DIEA0B20594HT40INIDSL841> <T4K2H406F6J84S49O0545T9CLS37JHOA3A7K2GK7O28AD7L0M0JCKQGADKO4LSJ2JGI04> <2LN8C963G4RE2M3Q15F4GK654LGM042LN9T0K1H4O5709KB00JGI05C50KSJ4JPQ0U73Q> <HT00J1GUN2H56AU3HAI042LN8C963G4RE2M3QAU329OIJ47K2GJ2KIOAIKPBOAO4L3Q18> <A3S0UG2KG58971S16P9L0KR9G9BOG5643Q18A215706HAD613HD6B5F1BP630K0M0340A> <823A1ABL009BOMU2M88U19140IE85AI0594HT51IG7TSLF3G44C2O2GV0A19GP043QD90> <A205909HAD697JK0IJG1H4S99I0K80VNILSE0GHGB0A3S0OF1GAGB0329GAU07HDS5939> <59DF00000X000HVNI9S51H95C5G1G4ICAKGLS0VNGLSI93QA097828A32IAOA4G1H4O5G> <3G4Q5F03PAU7088O5G51U0I2GOKIM2O5M080JGGO59040AI93Q9S0VNILSE0GHGB0A3S1> <451H95C5GBC0IE9L8OC91I8KSKG115451L1T4PG4Q0232G4LSIF19KUK2O1GIE2O14SGA> <L40AI93QA35F07TSLF3G44C2O2GV0918CA9B1C0O1A1AD90808CM5A7G3UUANHO2261C1> <8FG4OKS4GBC089918D8F96C0AI93Q81VF5BOS1130M0K7O2CAE285M080JGGO5980L4I7> <KG3UUANHO2261C18FG4OKS40FRPAU7088O5G51U0I2GOKIM2O5M040L060594HT40X000> <KX0000X0000X0000X0000X0000X0040PKOS7B80ON633I6D4F0TQGM5P87T9IGEPQMETJ> <K8RM58HADFRKQCBJAEP767D86SOV7RNKC9P2FCBJ0SOAM51KUCDV6CQSTDRJQCTJ9CPVD> <0JGMA0N2DOPE1LJ7D9A6VHB49BKUD97AAPO67PHNSP3BPNN5G92ECI79SO9ECPKRA1N67> <PV5DVGUSSBAAPS6CLGGDJJ26ON61PLCD9MN8HAKDRBPOJN2KQJ69FJMA1N3CPTE4NF88J> <EONMV49BKTD839SQHE8P82S9N35O6MC1L6CDJ4SOND0PJQS9IGFQJD07GEC774G02O0X0> <00501O000000000X000FVUO0000000000007S00000000B8260006400X000J0VO01U0D> <5C0TVVO00000000000000400K140I04GIGPP44N127O000000000003O0Q0FTLG003860> <F9G3BO002K014SNN55TI8HKGE0302DR15U3603T2G8O52P9I101007V00NUDVPGFTN010> <7U0590401VJ00H1FVPFTG2CHF0083T1EBUI2CNT4NPVONTC61FP7TQJMK0C6CHDABI36K> <FUA580QDPFO00L04NT04QG000TG1Q0R8KK0T0FUIA0BSMQ8NOFTRD68FGFKJSFTHT3T4A> <NGMJDKPT2V95UT6H9KLB3R02QCVN7THVL5TNQ96I4997LSKAP9UI9KNA0V923DGS87V01> <EG0000000000JNQQL7FLLUC20KCORK05MMFCBQSUONLPTJ12O8BQJ68T05T800CP6NAPJ> <N81FKG004SAC2KSSAG0008P56960HSIR4L5CATFG0403C0004KRI93G140VA5O155JG14> <0UA5O0Q78L800N0001R061GNVCFP7IP0BI000H41FSOVIVLI0N6000QK26HL9FAAAIIKA> <KESVX0003T01QKIL6M8VSS8CNG00FL2TAM0O017TQNPMC49JSQJ6IPHUD9JFA0V6I44NQ> <S89CRV4APA6ENDIBDER000G0001FIR6RPO00DN9DRO5E1BGA1U1DQ1UIFIUIX000R00P0> <07E2BJ1LQAUK3LI0024ON007EBVVK2K1905O0008J2S9D5P9EFV7VOKN4TNQHE4IIT49N> <280000EG0JMDD7GHUKD06L6Q1G7EO9I2D4ON64VQ9QV40JKVA205S4ALFG09EL9OIQAJI> <SO007017UEG0I5ND000QC2EPN9T8045UKAOM5KV85C5K4QNOKOU2175K7EG2TQ9QLBSJK> <QNQFRLF001J0RQFMOPTN81JR0VBI8VA5E2BSSUPGHT17I0O8EG0NOPTN81F9G0000X000> <D0E02G02GQIQ2QDIB5VVG0000X002RDTP21UGAU0NN0UNQHBP2USNVVA5F4BRU44H6V85> <F08JAUKNNNN1FE9OGET6SNN0000000000X0004V08015OBG1GK454MVO02VTGL905O000> <6M3O89C1R1T4AIOJQV858SI5UO0LGN2O00QOF115G7C7KHAI2FBT8L729JR02M2SP003B> <0EOFP2LE9C5AIAOBKS00003E0BG8G2MI463DU8A6ROUUS89TVUGAQKMUS891BUKAOT6U9> <NTBKBFOKVG1DNHTSOB4M55HTG91BEOKM4N0NC9DV2JU07G1DNPTVUKAQELOX0004DR138> <RMJTHVD9R2EQGPASMV1X000JVVO00QLILEBGL7RAOQO6M4NVCBJ2UBV6LKTCUA59UBUVL> <2KS7B2AP574LMKD7B1FRUGAJT5C5VTA5R02LDLCHD5AGOSILH40N07C0ALRG000000004> <9IO1KQXD6G3007IGBU6OSU7DG2CEF3MO74AIU80K0000000ND1C2IQBMG00003DEBTMQ0> <MNP2KNI00G03O89I7C0B865EU8000015N2V9GEIIHMQ13P94016PI1PBFIV6UO9M5TG1C> <JCO2E6OG0013FVS00X0009I2G05M0J5RU6VV1J0006M0HLCD1FV58IM2BGLBBB28QM5PH> <F5VJB4OR8MCTHUI5AIBUV52KR5V7Q1AMQL55H4D9FMON65VN4DCKB6EOV92L94UNQ1AMK> <G3M05CDO1R02M2S0X00047CCVLS4AOSNPUA5CABSFK2TJ8DH7R574MALV9CDD2GR2FMAE> <9CAB5AQ3M6FQLKFC0IOQPFM0NCO00F9MRD6J7KRDOJ9P9800004KI00JSNO89KQD7F9K3> <IMTNKO5IFGGB4V4X000D05FS2QFG0C0EVKNVLVU000NVDCKVSBUV52KQ5V7QHAFIM8NRV> <G5AS86IVBQ04UHFIUP4MBL0FCH0R5MQGFL0FCKNT44RG0LI5U7QHA1UK0LIDCJR4BRPDK> <JSIR9FF5MQGFM04R4MRA1G00000VBCDRC25THFU65C2B3E0RG6S1JITEPJ5OM6EBI2TEP> <G0000U83F2BO661HH5SBEORN2UPNDTM1ESRN3TJOOLN70LO5E1BO89R07QRNP9SNLUA5E> <G9UU44NFV85SEJMQQ967NHO000000000X0005VGFVG04A5430V850JU7FUF80BLO008DM> <LUFVL8BB49LMM6FUL8BR2EOIVNH1DC2B37VAK5TH9C58UIOUK1TH5CKNNOGMM2FUL89B1> <UKALFM09BTACBUBD8G2V85VN7TAGCG2VA5O1FTG0000X0003IVSNT21286B9IVKGIIPRM> <C00IJ63D5V916TTX001NALKBD6EVRSC9300015N2VTGE46B2Q8MPD25HCB9FSOQI5MB7H> <CB2Q8MPE3O8HCB2Q8SPCQ5HDHJ37Q0MOSNUFV9CF7U8M6L99HJCF7TOM4HMV859OB3FL2> <5HHJ12QOCKG2S000780AOPF19LN05FF0SQU62NLR47BBK9O6MVJBTDL79AQI92X0008TG> <33755CVO22II80200BPG00T811U1UIFHNB5QHEMBM9FDND4997LSKEK1NEIJAMJFB0041> <30004S00003VVX000BG73G0HO59002004MSBVM1OGPCB92R5KAL6BGL939CAB9DVO8L3B> <2RQG75LGV55KKK000AAA900AQKGEAJ2S0JVLA6I025LGPN07C09IRG2B4N07C0BURG025> <B9O56MF09PCR000015N2VTGE46B2Q8MPD2MAIS7GHB6M5MABJV2SRB6PVQMD9CP2QOCRM> <FM05VDR7Q0BMC2JBH044N6G89E6X00172AK3IO000C00JVR3LI59F40BC7SKLJQ0B6A90> <0B8IGEAHA71IIMFS1CP9401CVKE28TFL271JVKE3A827BT0HO9MMBUV92715V3ETQG7TO> <NRCD9FP5JOS7M04EB3O8U9CQ715URBI8UCHABP00O00008S4LPCDPBLO0M711QT84M7S1> <26MB2IVK65565E2BUI2D908TFL271IOCE3A827BT0IOF0155CVO2PII800I0BG2B4N000> <155CVO22II800BGPF1KGUA1FLE000000X000BIHQKHGRFRLLVH9G48OBGB9IE0GJ58136> <3K25CNO001761K26C784APFG02F9JMSU912POIBKJKSL376PC6DDGJ000008KVO8L9CB7> <S44JUSV003B4AP2VVI05VNHGIJUO0LIN9O00006NOLU5VF409GF315JTG1BTEPG00006Q> <PFORF7RONRDNHTTSKARJH149NQHB8IRVT05ULD8BFVL2MO7NKM7EVQR7M1DNQDTB34NUT> <VX0003C0PU0O44S108627IHFG20FT0LP9GGO1I0EV0X000AVG63DG9VOO0QV9801SKAM9> <K7IAO8GK0002S0P29VUORIVPGA62NIHAQMPCOADJ1GKR6J19MET81VSR0MO8KRD85A4C5> <6O9509GD9UC5F52LPDIM82BUPVILI5IJ3GBUPC940LFU8IB5F10OAS893EORLVEKE7UM8> <3SGAGD40N00000000000X001LA0IG0H3N9D84A0801UKBKOHND24IM2440000N018EROM> <O64PH69C32J2U4NVV858OI4472K5LC801I4JU42VSH1C3O3E0PM17SCACJORJ400P0F09> <PC07KJLUA5B69F0ED40905O0BPFL2LH5VJADAN003Q8LHG3QO7SH4GFNG800ISUO341NE> <F808RMTHVT5QRF330NU4NHD6AF330NU661S1N0C1FJJ5SP43V0LO5E102V7SBV2JOIU4N> <VV85CPI0K73O8NECIN2440000LGQVQJMAP800X000BG5JR3C0000HTVI58Q87IENT056V> <QHA6IBQB3L5PVUBVFK2KB4F68L5SG0HA8007OGI067AS0008008PVK2LB5VB2GBU64KNR> <C9HFKOGM3UFPN74KKLO08QA900C8GGEALQSSIVK6P565E2BUI2CBTS44JISS004VHQG9U> <UTULK4VDS4AO6AA4004954G063U875CLEV3UKNKVA5DR5520024II80321K3IMNNFKLRJ> <V0BATUNFIBTEV00000X000ES00KQ4R7G0AEH4G7S0HG5K1HO03V21CO842EGJ8001COBK> <2EGMG001CO6G2EGC8001CO6G00004KLJQ0AEA900C9UGEAIQSIH9NC2OPKIASI0MC9O17> <8J400001FUOQ2VQAH6QPFQBVFC3K05V722OP2VEAGN9NC0O121ONQU85C75EOQ42QS070> <17SQPSNOV85CV5ESVO22S07808TFK2B1T01FFDL08JVVX0014G07VUL6FVR1M02NTPVR0> <4400U858AE04G1HK4RC95E0003P0L3HOII4M6GNVH4LOI006JSHKD81Q0IGF92KTJ7VC1> <ABEO2SIX0003TM132OOJ63OOLB70LO5E1BO88C07REGG03P84V17O1UIFHTO9E5QU0000> <1HGCC9FSQS2VLMHIJVI12NKQ6M05V4AVRI6Q6AFU84AUJ8QP7L0FE5RI0000000X00180> <BNVKLO1N800T016QQQJG1MA9013S9E6P3497IN0LO5E1A4LP29SL2AKPAKA006821UV52> <S0DI9CIBVV52L94R7QHAMIP43SVA1CGB4PMMSL4MSRA9GAKSHUV85PAB4E44NUDI5PA00> <EG0LLD01FRA1G01M75HP7LV0AOIBUG8H72B3PDMTRX001M3EGA1VDG02BEIVK1690PD6B> <UGA4NT0Q9FQ1IDR142RK9VUFU4GVIG92FK2MIJVD9N7UF12FR5QPEPUKAK6FTLHCVLB2P> <V6M5DR9EQ1RU45NF5R7QHAPITUBOKONQHB1B0CNF4GFQ1ATEK2M4DR1ENUKANSNDJUPER> <7SAOKJCJUREPO09UUFMJTCV9A8KG2S0S04VF7R9UMFKJVDCQFPU44VIV85CQ91VL2MUIV> <KFQ92FL2KCIVKOTA608EIB0OT4M00A7400X00033KO0000002NMLTDE3EFQIIP5N0581E> <BAOAO0LM5LRF2G00NOS89FJUKAI4NPDOF82BSGESIQDUE8IFGSG7O8H9Q81E000257U25> <P9I4NV341T09FG1RIB9NO5U722BSVL123N55A800C36M0O7NKGH1V12LC0SRE291FL2LS> <5O87E9CV52LU4T7QHAVIS6T7TM3FEIJRKS00DO9FBOGIUONNV85CSBGPVUMENGHE3I4NU> <N41T09FA1RIB1NLNGG01Q0IUNH15TG7FUG4R2UO001FFUGBS4NLS89FDUKBS7497TM837> <VRS7K15TG7E9C6UQV1X000ANFG00BLE44NBVA5A4BLMTJK15QO7EBVMTF497R682RM28B> <T8L87DG93FK2L05QN22BLGBJT0L87A0P32TJO8HGI81E000262U25QBI4NTB41T09EK1R> <IVTNA5QN22BLV5124U25BA9E0BJT84GNQHEII8RT88HLQA00D06MRQ1NKGH2F12M70SRE> <O91FL2MN5R07E9CV52MP4T7QHBD2TIU2TM34AJ1BO8004LR4E9BM90NVDQHFURLM8LI6C> <H5TQ0000000X000IE0000QFI8VH14I14BUGAHGKVJVT8PE02JV49EHU83Q0I8S3N4LR4F> <E0003K14HV22940EVT095LPC0028RI4VA5AMBVF20JKJVTANOC68OI5V85PU93U44I8VA> <5PVI4J9341JVTPVQ0I903N4LR4HEFG0311LGU2CIVEG2TU0015GVUIB1VS4MJVM9D7V9V> <PCGTSA00F10JIQ2DDHK74Q7K0NKF80O8KQ6UHX000RLTTFJBSAUQNL04DT211G9S2E0JG> <4A11GAJVVK004C14G9O290KO4HVVJB0250M04I1AFVVRV0KO4A1708JVVA004E12GAJVV> <B005412G8C250I85C12VVTDJ0I04A160A3VV9CVVU0000000X002T008000000000X002> <T0VG2U0G0801D08O4S0OG4010VVO00008J8GDUA583E0000NVUA58QB98OIS64V4C885G> <DJT0L3DOC006U5GC5SC8DEA0025MUA5AMBVF52LDS0FIHAO2VNT0N6KBCBUFK2L7C3DPK> <BTOT2Q05UKEHRC21HGCLAO01Q0C36TMO707EO6USOGDVA5JVGD21MTM003F32D21JU8LJ> <9F33EQOQ4Q5S85PUG41C095S9FJSK61CNOVA7A085M1EU400623FES4RK09NDTQBROT30> <QMU800ROIUQ6TLQPF33EQTQV8X00050NG4602VUC2F0K7UVVUFU3VNTG62CA07F6FVDQ1> <EGBVFL2LSQ3MGDQ09FP48IVI6B5V4KQBU9F4NSHE2T3I65Q1FQQEPFO00IVI21AHPFP37> <IVKGJ5V402BU9B9EHP32VHG85USDP4PIT3I65Q1FKO42V66SGCU8L7S012RPFTRVCNQLU> <KKA5T7Q1B42HCNJVA5DHHCU032US029RB6CBUMJD868NFPCB6KAD868NFOMK0NGD8L8K0> <06T4USC2ADPI4J11O99QDE5I0RRG00X00078U88M20358P2QEMMDL0VO3VR9RNVOIV44B> <VLS0001R0201M25VR00B1603NC5VNQHAEESGNTV85BTQ1IVJT8L9VA1HRUG33PS0FQHAU> <QNVL0V0FQ1ATSC40F00N03UKANALSS3NIHAOIVFP8LE9FLUKAN2M1T39FJUKAMQLNXS08> <BN00000000000X001JVU7UC7PFO002G0N3U0000000X003TX0040P2AT5N6KPVE57AUD1> <79APQUKPLAT7399H75FBKUT8AGCONUDLL0CBJ6EP765J85CU3ACOD6FHHD8R26PHBE9LH> <MCBV9CH5EIRJACVF2SH7E4DHDR9MOBH7LHL2FOJJ26ON61PLET8IGCPT50PHCTDB1GOML> <KVC5B82OTQOM5PKVSJ37AHMKDV2M8IN2BQO5JP80T1J9DO765BL5D5R9OHNCAP2KOJN3A> <PQ6IJJUS8R2OMEDGN2E8J26THB4AJ2ECCJ78OME6PKHSBM4INIU5RGTOI2PONQC9PBQS9> <JB3P6U5786B16G00000ZFKK57VVVVVVV> (END K12MIT.SV) (REMARK End of File) |
Added src/kermit-12/k12mit.lst.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | SYMBOLS PAL8-VB0 06-SEP-90 PAGE 181 ABFLAG 0002 CNTRLE 0005 CREST2 0430 DMSEND 0351 ABMSG 4000 CNTRLF 0006 CRLF 4411 DMSER 6730 ABORT 4266 CNTRLG 0007 CSTUFF 5316 DMWAST 0357 ABORT2 4303 CNTRLH 0010 CTLCTS 6466 DM1AND 0710 ABORT3 4317 CNTRLI 0011 CURSEQ 0037 DM1AN2 5722 ABORT9 4321 CNTRLJ 0012 DATWOR 3502 DM1INI 0200 AIWCNT 3501 CNTRLK 0013 DAY 0006 DM1LIS 0600 AIWLUP 3437 CNTRLL 0014 DAYMSG 2145 DM1POR 0234 AIWNUM 2404 CNTRLM 0015 DCAC 3200 DM1SEC 0707 AIWSTO 3440 CNTRLN 0016 DCADAT 3433 DM2INI 0213 AIWTES 3442 CNTRLO 0017 DEFCK 0061 DM2LIS 0467 ALPHA 3247 CNTRLP 0020 DEFDEV 1456 DM234 0360 ALPHA1 3262 CNTRLQ 0021 DEFEOL 0055 DM2460 0361 ALPNM1 3245 CNTRLR 0022 DEFMAX 0136 DM2516 0362 ALPNUM 3237 CNTRLS 0023 DEFQCT 0043 DM3425 0363 AND377 0166 CNTRLT 0024 DELETE 0177 DM50 0332 BININP 0027 CNTRLU 0025 DEVNAM 1460 DNERMS 4071 BRATE 0007 CNTRLV 0026 DEVNUM 0071 DOTAB 6415 BRKXMT 2514 CNTRLW 0027 DEV30 0000 DOUO 6460 BUFCHE 5105 CNTRLX 0030 DEV40 0001 DOUP 6455 BUFFLD 0010 CNTRLY 0031 DFDEV 1437 DPARS 1400 BUFPTR 3761 CNTRLZ 0032 DGROUP 0020 DPAR1 1415 BUFSIZ 0200 COLUMN 0013 DIRBUF 2400 DPAR10 1453 CHKCLR 6453 COM 0017 DIRFLD 0010 DPAR11 1454 CHKUP 6432 COMIN 0630 DIRLIN 2402 DPAR13 1455 CKSUM 0522 COMOUT 0672 DIRREC 3407 DPAR2 1434 CKSUM1 0535 COMWAI 0676 DIRXR 0012 DPAR4 1442 CLCL 6136 CONBUF 3200 DISPAT 0452 DPAR8 1450 CLDMZA 0204 CONCLE 5703 DISPA2 0462 DSFLMS 4105 CLEAR 4521 CONINS 5365 DMIFLD 0010 DUMBCF 6312 CLEAR0 0437 CONNLU 5021 DMINIT 0324 DUMBFL 6310 CLEAR5 0450 CONNMS 4023 DMIOUT 0354 DUMBIE 6315 CLEAR6 0451 CONOUT 5302 DMIPOR 0400 DUMBSF 6311 CLOOP 0200 CONPUT 5676 DMISET 0346 DVNUM 1464 CLOOP1 0217 CONREM 5366 DMISKP 0352 DVNUM5 1500 CLOOP7 0227 CONRES 5705 DMI01 0325 DVNUM9 1507 CLOOP9 0235 CONSRV 5000 DMI02 0326 ECHOFL 5153 CLOSE 0004 CONTEM 5341 DMI03 0327 ECHOSW 0014 CLOSER 4027 CONTES 5330 DMI04 0330 EIGHTB 4422 CLOSIT 4015 CONTLS 5701 DMI05 0331 EIGHT1 4426 CLOSLU 4013 CONTMS 4042 DMI06 0332 EIGHT2 4435 CLOSMS 2040 CONTSF 5677 DMI07 0333 EIGHT5 4437 CLSK 6131 CONUPD 5341 DMI08 0334 EIGHT6 4440 CLSK8A 6137 CONWAI 5367 DMI09 0335 EMPENT 3465 CMDTBL 6000 CON2MS 4050 DMI10 0336 ENTER 0003 CMERMS 4011 CON3MS 4062 DMI11 0337 ENTSTR 2405 CMOUT1 0706 CORESE 5014 DMI12 0340 ESCAPE 0035 CMOUT2 0707 COUTIN 6601 DMI13 0341 ESCFLA 5154 CMOUT3 0711 CPUIDL 2357 DMI14 0342 ESCH 5150 CMOUT4 0712 CPULIS 2042 DMI15 0343 ESCHAR 0101 CMRESE 0674 CPUMSG 4064 DMI16 0344 ESCLIS 5144 CNTRLA 0001 CPUPRM 2277 DMI17 0345 ESCLOS 5113 CNTRLB 0002 CPUTEM 6750 DMPOMS 2147 ESCOMP 5102 CNTRLC 0003 CPUTMS 2134 DMPPMS 2171 ESCPRN 4673 CNTRLD 0004 CRESET 0420 DMPRZA 6640 ESCTEM 4707 SYMBOLS PAL8-VB0 06-SEP-90 PAGE 181-1 ESCTYP 5071 FSERMS 4165 IER31 3123 INPS22 3071 ESPRIN 4704 FSWIT 2134 IFL 6300 INPS30 3116 EXITKE 7577 GENMSG 0001 IIE 6305 INPS40 3124 FCLEMS 4114 GETBYT 3600 ILINK 2200 INPS50 3137 FCMP1 2160 GETCOR 3607 ILINK0 2203 INPS80 3155 FCMP2 2161 GETEND 3663 ILINK1 2217 INPS81 3156 FEND1 1251 GETEOF 3661 ILINK2 2241 INPS90 3200 FEND2 1256 GETFLO 0664 ILINK3 2246 INPS91 3213 FETCH 0001 GETFL1 0665 ILINK4 2253 INPUT 6400 FILBUF 2000 GETIR 0611 ILINK6 2257 INPWAI 6401 FILCLO 4000 GETIR1 0627 ILINK7 2260 INQUIR 0012 FILECN 2400 GETLOO 3614 ILINK8 2261 INREAD 0640 FILENG 3512 GETNEW 3605 ILINK9 2262 INSKIP 0636 FILFND 2506 GETREC 3610 IMAL8 7075 INSTAT 0656 FILMOD 0075 GETSOH 0600 IMAOMN 7047 INTPC 0000 FILN8 4471 GETSRV 2600 IMAUNK 7101 IOCLUP 0241 FILN8C 4521 GETSWT 4454 IMA12 7072 IOTCNT 0306 FINSRV 1530 GETUPZ 3656 IMA5 7100 IPORT0 0030 FIN10 1546 GET6 4517 IMA61 7061 IPORT1 0034 FIN2 1537 GET6F 0061 IMA610 7067 IRB 6306 FIN20 1550 GET6P 0060 IMA612 7066 IRS 6304 FIN5 1542 GET60 4441 IMA8 7077 ISF 6301 FLD1AD 4000 GSRV10 2625 IMA8A 7070 ISZC 2200 FLEN 0070 GSRV12 2630 IMA8E 7071 JMPC 5200 FLENGT 4026 GSRV15 2633 IMA8I 7074 JMPIC 5600 FLEXIT 3477 GSRV20 2636 IMA8IL 7034 JMSC 4200 FLOW 0001 GSRV21 2643 IMA8L 7073 JMSIC 4600 FLOWAI 0702 GSRV22 2644 IMA8S 7076 KCCIOT 6032 FLOWFL 0102 GSRV40 2647 INCHAR 0015 KCCZAP 6501 FMATC 2155 GSRV50 2651 INCHK 0741 KCCZP2 6546 FMATCH 2107 GSRV80 2654 INERTA 3222 KERRLU 5115 FMATF 2156 GSRV90 2626 INFLAG 0020 KERRMS 4375 FMATP 2154 HADR 1520 INIDAT 6364 KERROR 5122 FMATT 2157 HANDNU 1527 INIECH 0000 KEY 0003 FMAT1 2122 HELPMS 4202 INIFLG 0063 KEYBUF 3000 FMAT2 2150 HELPSR 2263 INIOPB 0516 KEYCHE 5221 FMODE 0177 HFETCH 1510 INITEN 0053 KEYDSP 0026 FNAME 3513 HNDADR 0053 INITIA 6600 KEYERR 0103 FNBLK 2510 HNDLR 6600 INITMS 2210 KEYGET 5247 FNDEND 1247 HOLDBF 1000 INITPR 6615 KEYGEX 5274 FNERMS 4127 IAAC 6171 INI612 6674 KEYGNO 5300 FNPTR 0065 IACA 6167 INLUP 0634 KEYINP 5200 FORCEP 0054 ICF 6302 INLUP1 0637 KEYINS 5370 FPACK 4512 ICLOSE 0001 INMSG2 2242 KEYLAT 5155 FPACK0 0240 ICTLZF 4033 INMSG3 2243 KEYPRS 1261 FPACK2 0261 IER02 3020 INOP1 6303 KEYREM 5371 FPACK3 0274 IER05 3027 INOP2 6307 KEYTEM 5341 FPACK4 0312 IER10 3032 INPERR 3141 KEYUPD 5224 FP1 0321 IER11 3034 INPSRV 3000 KGREAD 5252 FP2 0322 IER20 3040 INPS01 3012 KGTEST 5250 FP3 0323 IER21 3044 INPS02 3015 KMODE 0016 FRECMS 4142 IER22 3074 INPS03 3020 KP10 1270 FRSTRE 2401 IER23 3055 INPS05 3023 KP20 1272 FSBLK 0067 IER24 3063 INPS10 3027 KP40 1307 FSENMS 4154 IER30 3121 INPS20 3035 KP45 1322 SYMBOLS PAL8-VB0 06-SEP-90 PAGE 181-2 KP50 1323 MREC 0003 OLS 6316 PRMTMS 4457 KP90 1325 MRS 6364 ON 0000 PROMID 4464 KRBIOT 6036 MSB 6363 ONOP1 6313 PRQ3 6236 KRSIOT 6034 MSEND 0002 ONOP2 6317 PRSERR 0055 KRSZAP 6472 MSF 6361 OPBUF 0466 PRTINI 0255 KSERRO 5244 MSGFLD 0010 OPBUF1 0476 PSEND 0300 KSFIOT 6031 MSGOUT 4665 OPBUF2 0512 PSETF1 0262 KSFLOC 6470 NAKPAK 2551 OPC 6314 PSETF2 0275 KWATCL 5277 NAM 1663 OPORT0 0031 PSKIP 0301 KWATSE 5276 NAMBUF 2560 OPORT1 0035 PSR 6363 LATEST 0017 NAM0 1664 OPRE 1134 PTABLE 0030 LCLMSG 2000 NAM1 1677 OPRE1 1160 PUPSTA 5156 LEDERL 0000 NAM2 1705 OPRE2 1162 PUTBYT 3671 LINBUF 2727 NAM3 1707 OPRE3 1165 PUTC 3646 LINC 6141 NAM4 1713 OP1 0514 PUTCOR 3753 LININP 2000 NAM9 1721 OP2 0515 PUTERR 3703 LINSIZ 0040 NEXTSE 3403 ORIGNA 0000 PUTINI 3706 LIN1 2003 NL0000 7200 OTIME 0751 PUTLOO 3714 LIN10 2056 NL0001 7201 OUTCHA 5072 PUTNEW 3712 LIN2 2032 NL0002 7326 OUTEMP 0630 PUTNEX 3701 LIN5 2037 NL0003 7325 OUTFLA 0021 PUTONE 3631 LIN50 2062 NL0004 7307 OWAIT 0715 PUTREC 3754 LOOKLU 3416 NL0006 7327 OWASTE 0752 PWASTE 0307 LOOKUP 0002 NL0010 7215 PACKIT 2101 P7AGN 6506 LOOK1 1336 NL0100 7203 PACK6 4516 P7CH 6406 LOOK2 1337 NL3776 7354 PACK6F 0057 P7CHAR 6504 LOOK3 1340 NL3777 7350 PACK6P 0056 P7ECHO 6424 LOWER 0000 NL4000 7330 PACK6T 2106 P7OFF 6515 LOWERC 0143 NL5777 7352 PACK60 2063 P7OUT 6535 LPTR 0031 NL6000 7333 PAGCNT 0002 P7TEMP 6561 LUKUP 3400 NL7775 7346 PAKCKS 0036 P7TLS 6540 L11 6522 NL7776 7344 PAKPTR 0035 P7TSF 6536 MACHIN 7000 NL7777 7240 PCON 0036 QFLAG 0040 MACHTE 7102 NODATA 6376 PC8A 7050 RACD 6367 MESMOV 6734 NOECHO 5077 PDP 0002 RATE 0007 MESMVL 6742 NOESCA 5063 PDUMRD 0274 RCAPAS 0052 MFIE 6365 NOESEN 5104 PFNAM 1600 RCHAR 0023 MFL 6360 NOFINI 4412 PFNAM3 1633 RCHKT 0050 MFSK 6361 NOLOCA 5041 PFNAM7 1651 REC 0040 MIE 6365 NOSP 1231 PFNAM9 1655 RECSRV 2663 MLC 6362 NOSP1 1234 PFN10 1660 RECS10 2704 MMOVCN 6751 NOSP3 1244 PFN11 1661 RECS20 2706 MONMSG 2246 NOTFND 4442 PFN15 1662 RECS30 2712 MONTH 0011 NOTYET 0646 PLOAD 0303 RECS60 2715 MOVE 4520 NOWAIT 0705 PMR 6364 RECS80 2717 MOVE0 1341 NUMRC 3263 PORT 0000 RECS90 2726 MOVE1 1345 NUMRC1 3276 PORTCO 0036 REMBUF 3600 MOVE4 0062 NXTFIL 3462 PORTIN 0030 REMCHE 5653 MOVE5 1354 OCLOSE 0000 PORTOU 0031 REMCLE 5730 MOVE6 1355 OCTLZF 3762 PRETEM 1167 REMINE 5440 MOV8 4457 ODNAME 0073 PRGFLD 0000 REMINP 5400 MOV8P 4470 ODNUMB 0074 PRIPAK 2275 REMINS 0107 MPRESE 6367 ODT 0004 PRI8B 4514 REMOTE 0000 MPSCC 6366 OFF 0001 PRI8B0 4400 REMOUT 5600 MQ 0064 OFFLG 0072 PRI8B1 4405 REMPUT 5721 SYMBOLS PAL8-VB0 06-SEP-90 PAGE 181-3 REMREM 0110 RKSFIO 6401 SCRCRL 4651 SNDSV1 2434 REMRES 5535 RKSF0 6301 SCRFLI 4655 SNERTA 2467 REMTEM 5637 RKSF1 6341 SCRIBE 4600 SP 1213 REMTES 5626 RMAXL 0041 SCRLUP 4612 SPACAR 0416 REMTLS 5726 RMPTEM 5705 SCRPRL 4647 SPACK 4511 REMTSF 5724 RMPUT0 5725 SCRPRN 4625 SPACK0 0400 REMUPD 5637 RMPUT1 5727 SCRPTR 4712 SPRINT 0000 REMWAI 0105 RMPUT2 5731 SDERMS 4657 SPZAP 6642 REM8B 4515 RNPAD 0043 SEN 0041 SP1 1216 REM8B0 4411 ROUTIN 6612 SER1 2411 SP3 1226 REM8B1 4416 RPACK 4513 SER2 2417 SRCHLU 3345 REOL 0045 RPADC 0044 SER3 2424 SRCHTA 3340 REPADR 0233 RPERMS 4635 SER4 2430 SRVFIN 1555 REPLAC 0220 RQBIN 0047 SER5 2441 STACK 0131 REPLUP 0222 RQCTL 0046 SER6 2446 STATE 0032 RERRMS 4507 RRBUF 6062 SER7 2454 STATT 0101 RESET 0013 RRDTA 6066 SETBAU 0206 STBRK 0102 RETARG 0233 RREPT 0051 SETINI 4246 STDAT 0104 RETCNT 0005 RRLEN 6063 SHFEMS 4701 STEOF 0132 RETRY 0033 RRSEQ 6064 SLFLAG 2507 STEOT 0102 REVDAT 4464 RRTYP 6065 SLOOP 4076 STERR 0105 REVDGR 0400 RSBIOT 6413 SLOP01 4101 STFIL 0106 REVISI 0007 RSBUF 6222 SLOP05 4112 STGEN 0107 RFLNMS 4521 RSCREN 4603 SLOP10 4115 STNAK 0116 RHFEMS 4541 RSCRIB 4665 SLOP15 4120 STRIN 0122 RIDEMS 4564 RSDTA 6226 SLOP20 4127 STSIN 0123 RIERMS 4616 RSLEN 6223 SLOP25 4132 S00 2451 RIERTS 5136 RSSEQ 6224 SLOP35 4135 TABLEJ 0003 RINBUF 3400 RSTUFF 5614 SLOP90 4200 TADC 1200 RINCHE 5442 RSTYP 6225 SLOP92 4205 TEMP 0022 RINERR 0104 RTCF0 6312 SMFL 6360 TEMPTR 3631 RINGET 5502 RTCF1 6352 SNDEMS 4722 TENTRY 3471 RINGEX 5527 RTERMI 6221 SNDERR 2461 TESTCH 5157 RINGNO 5533 RTFL0 6310 SNDI00 4222 TESTKE 5033 RINGT0 5504 RTFL1 6350 SNDI02 4226 THIRD 3701 RINGT1 5506 RTIE0 6315 SNDI05 4231 THLPMS 2255 RINGT2 5507 RTIE1 6355 SNDI10 4234 TIMEOU 0664 RING2 5507 RTIME 0042 SNDI80 4241 TLSIOT 6046 RININI 6613 RTLSIO 6416 SNDNAK 2526 TRYDM1 6710 RININS 5552 RTLS0 6316 SNDP 1723 TRYDM2 6723 RINREA 5505 RTLS1 6356 SNDPRO 4034 TSFIOT 6041 RINREM 5553 RTRYC 0034 SNDP1 1733 TST612 6635 RINTEM 5554 RTSFIO 6411 SNDP10 4053 TTY 0004 RINTES 5503 RTSF0 6311 SNDP11 4056 UCADDR 0077 RINUPD 5445 RTSF1 6351 SNDP12 4061 UMSG 0000 RINWAI 0106 RWATCL 5532 SNDP15 4064 UPADDR 0100 RKCC0 6302 RWATSE 5531 SNDP2 1734 UPCPRT 6544 RKCC1 6342 R3L 7014 SNDP20 4064 UPERMS 4733 RKFL0 6300 SBOOT 7600 SNDP3 1735 UPONLY 0076 RKFL1 6340 SCANTP 1260 SNDP4 1744 UPPERC 0103 RKIE0 6305 SCAN1 0024 SNDP5 1741 UPRINT 6550 RKIE1 6345 SCAN2 0025 SNDP9 1747 UPSTAT 0723 RKRBIO 6406 SCNEL 1200 SNDP96 4212 UQWAIT 6447 RKRB0 6306 SCRCAS 4710 SNDP98 4217 USEP0 0211 RKRB1 6346 SCRCHA 4711 SNDSRV 2400 USER 0000 SYMBOLS PAL8-VB0 06-SEP-90 PAGE 181-4 USR 7700 USRENT 0200 USRFLD 0010 USRIN 0010 USRLOA 0000 VERSIO 0012 WASTIM 0672 WCON0 6362 WCON1 6366 WILDF 0066 WRIPAK 3277 WRITE 4000 W10 3306 W20 3321 W25 3324 W30 3330 W35 3331 W60 3334 W90 3336 W92 3337 XR0 0010 XR1 0011 YEAR 0132 YEARMS 2274 ERRORS DETECTED: 0 LINKS GENERATED: 0 |
Added src/kermit-12/k12mit.not.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 | Date: 7/11/92 15:00 EDT From: Charles Lasner (lasner@watsun.cc.columbia.edu) To: pdp8-lovers@ai.mit.edu Subj: Announcement of new Kermit-12 utilities Currently available at watsun.cc.columbia.edu via ftp in /pub/ftp/kermit/d/k12*.* are two new files: k12enc.pal and k12dec.pal. The new files have internal dates of 8-Jul-92. Several other documentation files with similar dates are also available. Anyone who last retrieved Kermit-12 files prior to Feb, 1992 should retrieve much of the current collection which has changed since then. These are the newly updated ENCODE and DECODE programs for moving around OS/8 binary files in a reliable manner. There is several new feature added to both: the ability to deal with "raw" image data sent as a single file, and also sent split into two files. Consider the following usage: .R ENCODE *BIGGY.EN<RXA1:/I=756 When the input specification is a device only AND the /I switch is given AND a non-zero equals parameter is given (and neither /1 nor /2 are given; see below), then the ENCODEd file is created containing the entire logical device for the length specified in the equals parameter. In the example, the length of an RX01 in OS/8 terms is used. Note that the device need not be an OS/8 "legal" structure, and there is no individual input file significence either. The user must set the length to whatever is appropriate. Too large a number could result in program abort due to handler-reported input error. The minimum length is 1; a zero-value is the same as leaving out the parameter. (This is a restriction of OS/8 itself.) Input data always starts at OS/8 logical record 0000. Note that the device must be definable within the scope of the selected OS/8 handler itself, since it is used for all input I/O using "raw" sequential calls. For example, an OS/8 bootable RX01 standard-format diskette would be acceptable for encoding here, while a WPS document disk would not be. The reason is that the handler does not access track zero (not a WPS issue) and also does all reads in 12-bit mode, while WPS documents are written in 8-bit mode, portions of which are lost when using a 12-bit mode handler. By using another (user-written) handler that supplies 8-bit transfers, the WPS document disk CAN be successfully transferred to ENCODE format intact. (Note: there are no current 8-bit mode handlers for RX02 and RX50, just RX01; this is a separate problem being addressed elsewhere.) Output DECODing is accomplished in a symmetrical manner: .R DECODE *RXA1:<BIGGY.EN/I=756 When used in this manner, the equals parameter need not be exact, but must be at least as large as the parameter used when encoding. A smaller value can be used to limit the transfer deliberately where appropriate. For example, using =7 will only transfer the first seven records of the ENCODEd file onto the target device. If the ENCODEd file contains a valid OS/8 device in complete image form, this amount will suffice to transfer only the directory to the target device. This effectively aborts the transfer, so the user can look at the directory with DIR, etc., to determine suitability of the larger transfer, etc. Warning: This usage writes over the output device starting at logical record 0000 (or higher; see below). The (possibly present) previous OS/8 structure will be destroyed. This is the intended function of this usage as the new data is meant to be moved to the beginning of an empty device. Image splitting: As pointed out by a user, if the only device available on a PDP-8 system is being used to acquire an image copy of the media, then this is likely to be impossible to carry out. This is the case in some systems whose only disk device is a pair of RX01, or RX02, or RX50 in the case of the DECmates. The reason is that the image of a device is likely to be larger (as an ENCODEd file) than the OS/8 capacity of the device itself! Since the repeat-compression of the encoding process isn't a reliable phenomena (it's data-dependent), it is likely that some disk-image files will be too large. Of course, if less than an entire device need be transferred, the equals parameter could be set to a shorter value where appropriate, but this prevents a complete transfer. (Alternatively, the data should be placed on a disk where the unused space has a repetitive pattern, such as that left after a format operation, or all zeroes, etc. This would allow the repeat-compression of the ENCODE process to reduce these areas to insignificent quantities in the ENCODEd file.) Of course, this still doesn't address the problem of sending an entire device, such as a fully-loaded diskette. To solve this problem, an additional option has been implemented to split the data into two nearly equal parts before encoding. Assuming the worst case of no repeat compression optimization, the ENCODEd image file representing half of the target disk data should fit on a bootable OS/8 disk. This disk would only contain the system head, the DECODE.SV program, and the ENCODEd data file. From this minimal system, the data can be written to another drive. Then the entire process can be repeated using a similar disk containing instead the second-half ENCODEd file. (There is no hope for a machine with only one disk!) Assuming our original RX01 example again: .R ENCODE *BIGGY1.EN<RXA1:/I/1=756 *BIGGY2.EN<RXA1:/I/2=756 This creates two image encoding files, each containing half of the device image. (In the case of an odd size, the second half is one longer than the first half.) Note that the size must be stated exactly so that the proper split occurs. .R DECODE *RXA1:<BIGGY1.EN/I/1=756 *RXA1:<BIGGY2.EN/I/2=756 This creates the disk image from the ENCODEd files. Note that the size must be stated exactly as it was when the original files were created so that both the length and position of the files (especially the second-half file) are correct. To aid in restoration of the disk, the (FILE statement within the ENCODEd file indicates that it is a block-image file, not an individual file with a file name. Additionally, the =xxxx value used to create the file is given to guide the decoding process. If the ENCODEd files are split files, then it is further indicated that the file is a first-half or second-half of an image file as necessary. As of this version (2.1), the ENCODE program also inserts a (REMARK indicating the program version and other useful information. Overall program operation for all other operations remains unchanged. As before, program documentation is contained in the source files. Except for the new image transfer features, the programs are totally compatible with their previous respective versions. (Note, the latest and previous versions are NOT compatible with the original "ancient" version which was "provisionally" released while the encoding format was still being formulated! Thus, there is one incompatible original version, and all following versions are compatible except for added features.) cjl ------------------------------ Date: 3/11/92 00:48 EST From: Charles Lasner (lasner@watsun.cc.columbia.edu) To: pdp8-lovers@ai.mit.edu Subj: Announcement of new Kermit-12 utilities Currently available at watsun.cc.columbia.edu via ftp in /pub/ftp/kermit/d/k12*.* are two new files: k12enc.pal and k12dec.pal. The new files have internal dates of 1-Mar-92. These are the newly updated ENCODE and DECODE programs for moving around OS/8 binary files. There is a new feature added to both, the ability to deal with "raw" image data. Consider the following usage: .R ENCODE *BIGGY.EN<RXA1:/I=756 When the input specification is a device only AND the /I switch is given AND a non-zero equals parameter is given, then the ENCODEd file is created containing the entire logical device for the length specified in the equals parameter. In the example, the length of an RX01 in OS/8 terms is used. Note that the device need not be an OS/8 "legal" structure, and there is no individual input file significence either. The user must set the length to whatever is appropriate. Too large a number could result in program abort due to handler-reported input error. The minimum length is 1; a zero-value is the same as leaving out the parameter. (This is a restriction of OS/8 itself.) Input data always starts at OS/8 logical record 0000. Note that the device must be definable within the scope of the selected OS/8 handler itself, since it is used for all input I/O using "raw" sequential calls. For example, an OS/8 bootable RX01 standard-format diskette would be acceptable for encoding here, while a WPS document disk would not be. The reason is that the handler does not access track zero (not a WPS issue) and also does all reads in 12-bit mode, while WPS documents are written in 8-bit mode, portions of which are lost when using a 12-bit mode handler. By using another (user-written) handler that supplies 8-bit transfers, the WPS document disk CAN be successfully transferred to ENCODE format intact. (Note: there are no current 8-bit mode handlers for RX02 and RX50, just RX01; this is a separate problem being addressed elsewhere.) Output DECODing is accomplished in a symmetrical manner: .R DECODE *RXA1:<BIGGY.EN/I=756 The equals parameter need not be exact, but must be at least as large as the parameter used when encoding. A smaller value can be used to limit the transfer deliberately where appropriate. For example, using =7 will only transfer the first seven records of the encoded file onto the target device. If the encoded file contains a valid OS/8 device in complete image form, this amount will suffice to transfer only the directory to the target device. This effectively aborts the transfer, so the user can look at the directory with DIR, etc., to determine suitability of the larger transfer, etc. Warning: This usage writes over the output device starting at logical record 0000. The (possibly present) previous OS/8 structure will be destroyed. This is the intended function of this usage as the new data is meant to be moved to the beginning of an empty device. Overall program operation for all other operations remains unchanged. As before, program documentation is contained in the source files. Except for the new image transfer feature, the programs are totally compatible with their previous respective versions. (Note, the latest and previous versions are NOT compatible with older versions!) There are no plans to upgrade the .BOO format encode and decode programs, since the .BOO format has no checksum protection. This is deemed a necessary feature in a complete device image transfer, due to the likelihood of a long file, etc. Since the maximum length of an OS/8 file is limited to 4088 records, the raw input will of necessity be limited to somewhat less than this size of records, depending on the efficiency of the run-length compression inherent in the data encoding. cjl ------------------------------ Date: 10/18/91 20:00 EDT From: Charles Lasner (lasner@watsun.cc.columbia.edu) To: pdp8-lovers@ai.mit.edu Subj: Announcement of additional KERMIT-12 utilities. While no changes have been made to the body of KERMIT-12 itself, several things have been changed/added. At the request of the KERMIT distribution service (KERMSRV) certain files have been slightly modified so they are acceptable to that bitnet, etc. facility. (Seems to be a problem with LRECL>80.) All files are now 80 or less. Except for the .DOC file, all it took was a little "cosmetic surgery" on a few lines. FTP'd copies are mostly unaffected. Most of the problems have to do with interpretation of the inter-page FF character being treated as the first character of the "record" in this non-stream-oriented system. At this time there is no actual doc file, as the file K12MIT.DOC is merely a truncation of the listing of K12MIT.PAL as passed through PAL8 and CREF. Anyone with a system big enough to support a 200K+ long source file can create this file themselves. In addition, due to certain quirks within PAL8 and CREF "beating" against unix line conventions, the file K12MIT.DOC at watsun.cc.columbia.edu was slightly different from the precise output of the assembly process, but again, only a cosmetic change. Since this file greatly exceeded the KERMSRV restriction, it has been withdrawn in favor of the source fragment equivalent to it taken directly from K12MIT.PAL. This source fragment is short enough that even an RX01-based OS/8 system can create the listing file from it thus recreating the original K12MIT.DOC locally. All this will disappear in the future when a "proper" doc file appears. In the meantime, K12MIT.DOC in whatever form it is available contains hardware hints and kinks, assembly options, and other info useful to users and anyone interested in the "innards" of the program, as well as an edit history of how K12MIT got to be where it is now starting from its "grandfather" K08MIT. It ends at the first line of the code in K12MIT.PAL, but includes all of the special purpose definitions particular to the various devices supported, such as DECmate I, DECmate II, etc. Any changes to customize KERMIT-12 are still accomplished using the separate patch file K12PCH.PAL which is unchanged. New files cover two areas: 1) direct loading without KERMIT-12, and 2) .BOO format support. 1) Many users have the hardware for running KERMIT-12, but don't already have it or another suitable program to acquire it yet, a real "catch-22" situation. Towards that end, a set of utilities has been provided to directly load KERMIT-12 without already having it. Most PDP-8 sites do have access to some other machine. Hopefully, the serial connection to be used is fairly "clean" and error-free, or at least some of the time. These programs depend on this fact. This could either be a connection to a remote multi-user system or something like a null-modem connection to a nearby IBM-PC. The programs assume only a few things: a) The connection is error free. b) The other end doesn't absolutely require anything be sent to it to send data to the PDP-8 end. (The -8 end will not send ^S/^Q or anything like that because this is unnecessary; all data goes only into PDP-8 memory directly.) c) The other end will send the data at a time controlled from its end, or after at most one character sent from the PDP-8 end of the link. The first situation is illustrated by the example of a PC connected to the -8. The -8 program is started, and it waits indefinitely after the -8 user presses any one key. (The corresponding character is sent to the PC where it is ignored.) The PC end is initiated with a command such as COPY K12FL0.IPL AUX: and the data goes to the -8. The second situation is illustrated by a remote system where a command such as TYPE K12FL0.IPL is available. The delimiting CR is not typed at this time, and will be finished later by the loading program. The initial connection up until the TYPE command is not covered by the loading program itself, so the user must supply a basic comm program, which is possible to accomplish in about 10 words or less if the rates are "favorable", or worst-case, a terminal can be used and the line switched over to the -8 at the appropriate time. In any case, CR or other appropriate character is hit on the -8 and the loading program echoes it down the line (and on the console) to initiate the data down-load. d) The other end is assumed to send the file verbatim without insertion of <del> characters (octal 177) and upper-case/lower-case is preserved. If all of these assumptions are met, then the down-load accomplishs a partial acquisition of K12MIT.SV, the primary binary file of KERMIT-12. The process must be repeated several times to acquire all portions. If a local compare utility is available that can compare absolute binary files, perhaps the process can be totally repeated to assure reliable results by comparing runs. The method used is borrowed from the field-service use of a medium-speed serial port reader on the -8 for diagnostic read-in. This reader is *almost* compatible with the device 01 reader such as the PC8E. The difference is that the *real* PC8E is fully asynchronous, whereas the portable reader just spews out the characters without any protocol. The PC8E can't drop any characters in theory, although there are reports of misadjusted readers that drop characters at certain crucial data rates. (The PC8E runs at full speed if possible, and failing this falls back to a much slower speed. All operations depend on the use of the hardware handshakes of the IOTs etc., so nothing should be lost but throughput. Misadjusted readers may drop characters when switching over to the slower mode.) The reason the field reader is acceptable is that it is used only to load diagnostics directly into memory using the RIM and BIN loaders. These minimal applications can't possibly fall behind the reader running at full speed. This is the same principle used here to down-load KERMIT-12. The loading program is a 46 word long program suitable to be toggled into ODT and saved as a small core-image program. The user starts the program and then (at the appropriate time) presses one key (usually CR if it matters) and the loader waits for remote input. As the other end sends the data, it is directly loaded into memory. There is a leader/trailer convention, just like paper-tape binary, so at end-of-load the program exits to OS/8 at 07600. At this time the user issues a SAVE command. This completes the down-load of a single field of K12MIT.SV. At the current time, there are actually two fields of K12MIT.SV, namely 00000-07577 and 10000-17577, and there are two such loaders. There is no check for proper field, so the proper loader must be used with the proper data, else the fields will get cross-loaded and will certainly fail. Once the two fields are obtained as separate .SV files (named FIELD0.SV and FIELD1.SV) they can be combined using ABSLDR.SV with the /I switch (image mode) set. The resultant can be saved as K12MIT.SV. This, if all went well, is identical in every way to the distributed K12MIT.SV (which is only distributed in encoded form; see below). Actual file differences will only exist in the extraneous portions of the file representing the header block past all useful information and the artifacts of loading which represent 07600-07777 and 17600-17777 which are not used. This is the normal case for any OS/8 system when any file is saved. Merely saving an image twice will cause this to happen. At this point, K12MIT.SV can be used as intended, namely to acquire, via KERMIT protocol, the entire release. It is recommended that the provisional copy of K12MIT.SV be abandoned as soon as the encoded copy is decoded since the encoding process provides some assurances of valid data (using checksumming, etc.). This process can be accomplished on any KL-style -8 interface including PT08, etc., or on the printer port of VT-78 and all DECmates. When used on the DECmates, there may be some minor problems associated with the down-load which may have to be done as the first use of the printer port after power-on, or some other restriction. The loader includes a suggested instruction for DECmate use if problematic (and raises the program length to 47 words). Also, due to observed bugs in the operating system (OS/278 only), there are restrictions on the use of ABSLDR.SV that cause certain command forms to fail while other seemingly equivalent forms succeed! This is documented in the latest K12MIT.BWR file in the distribution. The command form stated in the K12IPL.PAL file is the only known form that works correctly on these flawed systems. The format for down-load files is known as .IPL or Initial Program Load format. It consists of a leader containing only lower-case letters (code 141-177 only) followed by "printable" data in the range 041 (!) through 140 (`). Each of the characters represents six bits of data, to be read left to right as pairs, which load into PDP-8 12-bit memory. The implied loading address is always to start at 0000 of the implied field. The leader comment contains documentation of which field of data from K12MIT.SV it is. The trailer consists of one lower-case character followed by anything at all. This is why it is crucial that DEL (177) not appear anywhere in the body of the file. Throughout the file, all codes 040 or less are ignored. This allows for spaces in the lower-case leader for better readability, and for CR/LF throughout the entire file. CR/LF is added every 32 words (64 characters) to satisfy certain other systems' requirements. The trailer contains documentation on a suggested SAVE command for the particular data just obtained. 2) PDP-8 ENCODE format is the format of choice to obtain binary OS/8 image files because of the validation techniques employed, etc. This is the standard method of distributing K12MIT.SV as well as other "critical" files such as TECO macros and other image files. In the MS-DOS world there exists another very popular format known as .BOO encoding. It would be useful to support this format on the PDP-8 as well. .BOO format files are smaller because they use six-bit encoding instead of five-bit encoding, or at least in theory. Both ENCODE and .BOO use repeat compression techniques, but ENCODE can compress 12-bit words of any value, while .BOO only compresses zeroes and that itself is based on a byte-order view of the data. PDP-8 programs often include large regions of non-zero words such as 7402 (HLT) which would not compress when looked at as bytes. Such files would show compression ratios quite different from the norm. In any case, .BOO format is useful on the PDP-8 because it allows inter-change with .BOO files created on other systems, such as PCs. This allows the exchange of unusually formatted files, such as TECO macros between PDP-8s and PCs. (Both systems support a viable version of TECO.) The new KERMIT-12 utilities include a .BOO encoder and .BOO decoder, known as K12ENB.PAL (or ENBOO.PAL) and K12DEB.PAL (or DEBOO.PAL) respectively. They use .BOO encoded files unpacked in the standard OS/8 "3 for 2" order to preserve the original byte contents when the files originate from other systems. (Technically, .BOO format doesn't require this, but the obvious advantages dictate it. Anything encoded into .BOO format must merely have a 24-bit data structure encoded into four six-bit characters, so in theory any encoding of two adjacent PDP-8 12-bit words would be acceptable. By additionally supplying the bits in OS/8 pack/unpack order guarantees the inter-system compatibility as well.) There is an inherent weakness in the original .BOO format which must be addressed. .BOO format files always end on one of two data fields: either a repeat-zero compression field, or on a 24-bit field expressed as four characters. Should the data in a 24-bit field consist of only two or even one bytes, there are one or two extraneous null bytes encoded into the field to complete it. Presumably the need to add the extra bytes is to allow validation of the format. In any case, only the encoder knows just how many (0, 1, 2) bytes are extraneous. We can presume that if the last byte is non-zero, it is significant. If the last two are both zero, then the last or possibly both are extraneous with no way to tell. On PC systems, the general trend is to ignore these one or two extra bytes because so far there haven't been any complaints of failure. I have personally discovered that a widely used PC .BOO encoding program (written in C) erroneously adds two null bytes as a short compression field beyond the data! This is not a .BOO format issue, but rather a genuine program bug. Apparently few PC users are concerned that encoding their files prevents transparent delivery to the other end. In the OS/8 world, the situation is quite different. Each OS/8 record is 256 words or 384 bytes. If even a single byte is added, this creates an additional all-zeroes record. Besides wasting space, it is conceivable that such a file could be dangerous to use under OS/8 depending on content. (Certain files, such as .HN files are partially identified by their length. File damage, such as lengthening a file from two to three records will confuse the SET utility, etc.) Many files cannot be identified as having been artifically lengthened (and may be hard to shorten!), so this must be avoided. I have invented a fix for the problem: repeat compression fields are expressed as ~ followed by a count. 2 means two null bytes and is thus the smallest "useful" field to be found. (It takes two characters to express what would take 2-2/3 characters in encoded format. One null would only take 1-1/3 characters, not two, so this case is vestigial, but must be supported for the benefit of brain-dead encoders.) The value of 0 means a count of literally zero, thus ~0 is a "NOP" to a decoder. I have successfully tested MS-DOS programs written in BASIC and C that decode .BOO files successfully even if ~0 is appended to the end with no ill effects. (They correctly ignored the appended fields.) In my encoding scheme, ~0 at the end of a data field containing trailing zeroes means to "take back" a null byte. ~0~0 means to take back two null bytes. Thus files encoded with ENBOO.PAL either end in a repeat-compression field as before, or in a data encoding field possibly followed by ~0 or ~0~0 if necessary. The corresponding DEBOO.PAL correctly decodes such files perfectly. Should files encoded with ENBOO reach "foreign" systems, they will do what they always do, i.e., make files one or two bytes too long occasionally, with no other ill effects. Files originating from such systems will certainly be lacking any trailing correction fields and will cause DEBOO to perform as foolishly as MSBPCT. Extraneous null bytes will appear at the end of the file in OS/8 just as in MS-DOS in this case. (Note that if the file length is not a multiple of 384 bytes, additional bytes are added by DEBOO as well, but this is not a design weakness of .BOO format. It is caused by the clash of fixed record size and a variable size format.) Hopefully, files originating on OS/8 will be decoded on OS/8 as well, thus preserving file lengths. Most "foreign" files will probably be ASCII, so the ^Z convention will allow removal of trailing null bytes at either end. It is hoped that MS-DOS and other systems "upgrade" their .BOO format files to be compatible with the PDP-8 version. All KERMIT-12 files are available via the normal distribution "paths" of anonymous FTP and/or KERMSRV. The user is directed to the file /ftp/pub/kermit/d/k12mit.dsk as a "roadmap" to the entire distribution. Each .PAL file includes assembly instructions. Most use non-default option switches and non-default loading and saving instructions, so each must be carefully read. The development support files (TECO macro, .IPL generator, recent copies of PAL8, CREF, etc.) are included in the total collection. Development is not possible on RX01 systems due to inadequate disk space, but RX02's are barely adequate with a lot of disk exchanges. (Future versions may require larger disks for development.) Charles Lasner (lasner@watsun.cc.columbia.edu) |
Added src/kermit-12/k12mit.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 | / KERMIT FOR DEC 12-BIT MACHINES / LAST EDIT: 06-SEP-1990 11:00:00 CJL XLIST OFF IFNDEF OFF <OFF= 1> /TURN LISTING OFF IFNDEF ON <ON= 0> /TURN LISTING ON XLIST ON; IFZERO 1 < *** **** *********** ********* *** *** *** *********** ***** **** *** **** *********** ********** **** **** *** *********** ***** ****** *** **** *** *** **** **** **** *** *** *** *** *** *** **** *** *** *** ***** ***** *** *** *** ** **** *** **** *** *** *** ***** ***** *** *** *** ** *** ******* *** *** **** ************ *** *** *** ** ****** ********** ********** *** **** *** *** *** ***** *** ** ******* ********** ********* *** **** *** *** *** ***** *** ** *** **** *** *** **** *** ** *** *** *** *** ** *** **** *** *** **** *** ** *** *** *** *** ** *** **** *** *** **** *** *** *** *** *** ** *** **** *********** *** **** *** *** *** *** *** ********* *** **** *********** *** **** *** *** *** *** *** ********* > XLIST ON / COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF / NEW YORK. / PERMISSION IS GRANTED TO ANY INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS / DOCUMENT AND THE PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL / PURPOSES. / EDIT HISTORY. /014 CJL / 052 06-SEP-1990 BUG FIX. CHARLES LASNER (CJL) / SENDING A FILE WHICH EXACTLY FILLS THE LAST DATA PACKET AT THE / END OF THE FILE WILL CAUSE THE PACKET TO BE SENT TWICE. THE / ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF. / 051 29-AUG-1990 BUG FIX. CJL / PDP-8/A NOT IDENTIFIED CORRECTLY IN CPUID ROUTINE. THE UPDATED / PC IS WHAT IS LOADED INTO THE AC WHEN 7016 IS EXECUTED ON THE / KK-8/A CPU. THE ROUTINE WAS CHECKING FOR THE NON-UPDATED VALUE. / ALSO NEW DOCUMENTATION FOR PRE-CLEARING MEMORY FOR BENEFIT OF / ENCODED BINARY FILES. / 050 06-SEP-1989 DECMATE I SUPPORT, ETC. CJL / THIS EDIT IMPLEMENTS DECMATE I SUPPORT USING THE DP278-A OR -B. / A NEW CONDITIONAL 'PORT' SELECTS WHICH PORT IS TO BE USED. IF / KERMIT-12 IS RUN ON DECMATE I (WHILE NOT CONFIGURED FOR SERIAL / PRINTER PORT COMMUNICATIONS; SEE EDIT 048.) THEN REMOTE / COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT ASSEMBLY TIME / ('PORT=0' OR 'PORT=1'). ADDED BAUD RATE PARAMETER 'BRATE' TO / SELECT REMOTE COMMUNICATIONS BAUD RATE FROM THE STANDARD TABLE; / DEFAULTS TO 1200 BAUD ('BRATE=7'). / 049 30-AUG-1989 REMOTE FLOW CONTROL, ETC. CJL / THIS EDIT IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW CONTROL IS / ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO THE REMOTE / KERMIT REGARDLESS OF STATE. PREVIOUSLY, FLOW CONTROL ONLY / APPLIED TO CONNECT MODE. LOCAL FLOW CONTROL (TOWARDS THE REMOTE / KERMIT) IS UNNECESSARY AS LOCAL BUFFERS FOR REMOTE INPUT ARE / ALWAYS AVAILABLE. CERTAIN ROUTINE CHANGES MADE FOR BENEFIT OF / DECMATE I SUPPORT IN A SUBSEQUENT EDIT. / 048 24-AUG-1989 DECMATE II, ETC. SUPPORT. CJL / ONCE-ONLY CODE ADDED TO IMPLEMENT DECMATE II, ETC. REMOTE LINE / SUPPORT ON SERIAL COMMUNICATIONS PORT. SELECTED PORT IS / INDICATED ON OPENING BANNER IF OPERATING ON DECMATE. / THIS EDIT PROVIDES BASIC SUPPORT OF THE DECMATE II COMMUNICATIONS PORT AS AN / AUTOMATIC FEATURE OF THE STANDARD RELEASE OF K12MIT. AUTOMATIC DETECTION OF / DECMATE II, ETC. HARDWARE IS PERFORMED UNLESS THE PDP-8-TYPE REMOTE LINE / SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS THE REMOTE LINE ('SPRINT' IS / SET OR EQUIVALENT). / THIS EDIT INCORPORATES ALL OF THE INFORMATION TAKEN FROM VARIOUS SOURCES / REGARDING DECMATE PORT INITIALIZATION, ETC. EVERY ATTEMPT HAS BEEN MADE TO / COMPLETELY SET ALL APPROPRIATE REGISTERS, ETC. FOR DECMATE II, III, III+ / OPERATION. NO SUPPORT EXISTS FOR THE DECMATE III BUILT-IN MODEM OPTION, AS / EXPLICIT DOCUMENTATION IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE IS / APPARENTLY USED TO DISABLE THE MODEM). THESE ROUTINES ARE ONLY KNOWN TO WORK / ON THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND THE III+ / HAVEN'T BEEN AVAILABLE TO THE AUTHOR FOR TESTING. THE INITIALIZATION CODE / WILL BE UPDATED LATER TO INCLUDE PANEL REQUESTS, ETC. TO CORRECT ANY / PROBLEMS, ETC. DECMATE-SPECIFIC FEATURES (SUCH AS SETUP COMMANDS) WILL BE / ADDED LATER AND ENABLED FROM THESE ROUTINES. / THIS EDIT INCORPORATES NON-INTERRUPT ROUTINES WHICH HAVE BEEN TESTED AT THE / MAXIMUM COMMUNICATIONS SPEED OF THE DECMATE II (19200 BAUD). THEY WILL / SUFFICE FOR ALL KERMIT IMPROVEMENTS SHORT OF SLIDING WINDOWS AT WHICH TIME / INTERRUPT-DRIVEN I/O WILL BE REQUIRED. (INTERRUPT-DRIVEN I/O IS ILLEGAL ON / CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL TO THE SYSTEM OR NON-SYSTEM / HANDLERS.) / 047 21-AUG-1989 CODE CLEANUP. CJL / STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS. THIS / IS IN PREPARATION FOR EVENTUAL DECMATE II OPERATION, AND TO / MINIMIZE K12PCH PATCH FILE SIZE. CERTAIN NON-CONNECT ROUTINES / MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION. / 046 15-AUG-1989 CODE CLEANUP. CJL / ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL / DECMATE USE. ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR / OF 'COMIN'. ELIMINATION OF 'OREM' IN FAVOR OF 'COMOUT'. ADDED / STATUS UPDATE ROUTINE ('UPSTATUS') FOR EVENTUAL DECMATE II, ETC. / USAGE. ELIMINATED PDP-8, DECMATE I, DECMATE II CONDITIONALS. / REORGANIZED SERIAL LINE CONDITIONALS AND ADDED NEW 'SPRINT' / PARAMETER FOR SERIAL PRINTER PORT USAGE AS COMMUNICATIONS PORT. / ADDED ONCE-ONLY CODE ADDED TO AUTOMATICALLY RECOGNIZE DECMATE I / AND II OPERATION UNLESS ASSEMBLED FOR REMOTE COMMUNICATIONS ON / SERIAL PRINTER PORT ('SPRINT' SET). UPDATED K12PCH.PAL TO / CORRESPOND TO NEW DEFINITIONS. DEFINED EVENTUALLY NEEDED / COMMUNICATIONS PORT INSTRUCTIONS FOR DECMATE II; ACTUAL DECMATE / II OPERATION WILL BE DEFINED IN A SUBSEQUENT EDIT. DOCUMENTED / NEW LOADING AND SAVING INSTRUCTIONS FOR K12MIT TO ALLOW FOR / ONCE-ONLY CODE IN 10000-11777 WITHOUT SWAPPING THE CODE OUT FOR / THE USR. THIS ELIMINATES OVERHEAD WHEN LOADING K12MIT, BUT IS / DIFFERENT FROM THE FORMER INSTRUCTIONS WHICH ASSUMED NO OTHER / USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR. / THIS EDIT PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION / OF K12MIT ON ANY MEMBER OF THE DECMATE FAMILY (I, II, III, III+). WHEN / 6120-TYPE CPU DETECTION OCCURS, THE DECMATE I OR II-TYPE COMMUNICATIONS PORT / INITIALIZE CODE IS AUTOMATICALLY SELECTED AS NECESSARY UNLESS THE PDP-8-TYPE / ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET OR EQUIVALENT USER SETTINGS, ETC.) / FOR THE VT-78-TYPE PRINTER PORT (32/33), IN WHICH CASE THE COMMUNICATIONS IS / DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND / IS ACCOMODATED AS SUCH). / SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL THE PORT / SELECTION, AS THERE ARE AT LEAST TWO VARIANT OPTIONS BOARDS (DP-278A AND / DP-278B) EACH CONSISTING OF TWO PORTS. / 045 12-AUG-1989 BUG FIX. CJL / FINISH, GET, AND RECEIVE COMMANDS FAIL TO ABORT PROPERLY / (ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT / OPERATING MODE ('KMODE') IS NEVER PROPERLY SET, OR IS SET AFTER / SEVERAL PACKETS HAVE BEEN SENT. EACH COMMAND NOW SETS ITS OWN / OPERATING MODE BEFORE INITIATING ANY PACKETS. / 044 11-AUG-1989 CODE CLEANUP. CJL / CHANGED 'CCMSG' TO 'ABMSG' WITH CLEARER MESSAGE. CHANGED / 'CCFLAG' TO 'ABFLAG' FOR CONSISTENCY. CHANGED ABORT CHARACTER / FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR CONSISTENCY. ELIMINATED / 'ITTY' AND 'ITTYW' ROUTINES BY USING 'CTLCTST' AND 'INPUT' / ROUTINES ALREADY AVAILABLE A/O EDIT 043. ELIMINATED 'TCHAR' IN / FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043. / 043 07-AUG-1989 CODE CLEANUP, ETC. CJL / REWRITE OF CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT / AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING / USER-INTERFACE REWRITE. 'SCRIBE', 'LININP', AND 'ESCPRNT' / ROUTINES NOW CALL "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL / MESSAGES. / 042 13-JUN-1989 CODE CLEANUP. CJL / FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN K278 / (SOME OF THE K278 STUFF IS DEFICIENT!). CALCULATION OF PROPER / SEQUENCE NUMBER FOR NAK CORRECTED OVER FORMER (K08MIT AND K278) / VERSIONS. ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM. / 041 12-MAY-1989 BUG FIX. CJL / VARIOUS VERSIONS (DECMATE) WON'T FUNCTION REMOTELY WHILE KL-8 / VERSIONS WORK FINE. ADDED REMOTE LINE READ IOT TO INITIALIZE / REMOTE LINE AT STARTUP TIME FOR VERSIONS REQUIRING THIS. / CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT / IN TWO PLACES. / 040 07-MAR-1989 COSMETIC CLEANUP. CJL / CLEANUP OF EDIT HISTORY AND OTHER COMMENTS. / 039 21-MAY-1988 CODE CLEANUP. CJL / ADDED VARIABLE 'INIECHO' TO ALLOW DEFAULT CONNECT-MODE STATE TO / BE HALF-DUPLEX ("SET LOCAL-ECHO ON"). MODIFIED INPUT SERVICE / ERROR ADDRESSES TO SIMPLIFY ERROR TABLES. / 038 19-MAY-1988 CODE CLEANUP. CJL / ELIMINATED TRAILER FILES DURING ASSEMBLY BY CREATING VARIABLES / 'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER FILE (PARAM.PA) TO / CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY (WHICH / WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY). OVERLAY / BY K12PCH.BN WILL DEFAULT TO CREATION OF A DUMMY USER MESSAGE / (WITHIN K12PCH) ENCOURAGING LOCAL CUSTOMIZATION. K12MIT.BN WILL / CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA. / 037 21-JAN-1988 BUG FIX. CJL / RESET OS/8 DEVICE CONTROL WORD TABLE TO DELETE TENTATIVE FILE IN / CASE OF PRIOR INPUT SERVICE ERROR. / 036 20-JAN-1988 BUG FIX. CJL / RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE / THE FLAG SET. / 035 14-JAN-1988 USR RESIDENT CODING. CJL / CALLS TO USR NOW USE 10200 INSTEAD OF 17700. NO SWAP OVERHEAD / WHEN OPENING OR CLOSING FILES. / 034 13-JAN-1988 CODE CLEANUP. CJL / ALL EIGHT-BIT ORIENTED CONSOLE CODE ELIMINATED; NOW IGNORES / PARITY (JUST SEVEN BITS). / 033 12-JAN-1988 CODE CLEANUP. CJL / 'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED; NOW USES 'P7CH' FOR ALL / CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE). / 032 12-JAN-1988 CODE CLEANUP. CJL / VARIOUS ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE / BEYOND THE CLASSIC PDP-8. / 031 11-JAN-1988 CODE CLEANUP. CJL / ELIMINATED 'RTDISP' AND CHANGED CALLING CONVENTION FOR DISPATCH / ROUTINE. ALL CALLERS NOW LOCAL OR VIA LOCAL POINTERS. ADDED / SEVERAL CONDITIONAL PARAMETERS AND LABELS FOR BENEFIT OF / K12PCH.PAL. / 030 05-JAN-1988 CODE CLEANUP. CJL / CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE / EFFICIENT CODE. / 029 21-DEC-1987 CODE CLEANUP. CJL / CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND / REWROTE 'COMMAND' ROUTINE. / 028 15-DEC-1987 CODE CLEANUP. CJL / COMPLETE REWRITE OF FILE LOOKUP ROUTINE. 'LUKUP' NOW USES FIELD / ONE BUFFER AND ITS OWN AUTO-INDEX REGISTER CONSERVING PROGRAM / SPACE. / 027 05-DEC-1987 CODE CLEANUP. CJL / CHANGED DISPATCH ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE. / ALL CALLS MADE COMPATIBLE. ELIMINATED 'SCANC' CODE. ELIMINATED / CODE WITHIN 'DPARS' ROUTINE. 'LUKUP' ROUTINE NOW DOES ITS OWN / DISK I/O. ELIMINATED 'BLKIN' ROUTINE. / 026 27-NOV-1987 NEW CONNECT MODE CODE. CJL / TOTAL REWRITE OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT AND / OUTPUT TERMINAL ROUTINES. CONNECT IS NOW FULLY BUFFERED IN ALL / DIRECTIONS. IF FLOW CONTROL IS OBEYED, ANY BAUD RATE CAN BE / ACCOMODATED BOTH LOCALLY AND REMOTE (UP TO 9600 BAUD TESTED, / SHOULD WORK TO AT LEAST 19200 BAUD BY INSPECTION). TESTED WITH / FAST VT-100 EMULATOR CONSOLE TO PROVE ESCAPE SEQUENCES ARE NOT / DROPPED WHEN LOCAL TERMINAL IS FASTER THAN REMOTE LINE. LIMITED / USE OF SUBROUTINES TO IMPROVE HIGH BAUD RATE OPERATION. ADDED / TABLE-DRIVEN ERROR EXIT ROUTINE FOR SEND ROUTINES. / THIS EDIT PROVIDES FULLY BUFFERED INPUT/OUTPUT ROUTINES FOR BOTH LOCAL AND / REMOTE PORTS. NO INTERRUPTS ARE USED FOR MAXIMUM COMPATIBILITY WITH OS/8 / DEVICES (SOME OF WHICH ARE INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E). REMOTE / FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER / IS 3/4 FULL. WHEN THE BUFFER REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1> / TO ALLOW FURTHER OUTPUT. REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS; / LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY. / WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE BUFFER WILL FILL WITH OUTPUT / CHARACTERS. WHEN THE USER RELEASES THE CONSOLE WITH <DC1>, THE BUFFER WILL / RAPIDLY EMPTY (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE). THIS / ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE LINE UP TO / THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS. / 025 24-NOV-1987 NEW FEATURES AND CODE CLEANUP. CJL / PROPER INTERRUPT SETUP FOR <^C> AND <^P>, ECHO STATE. ALL / MESSAGES IN NEW FORMAT, (SOME NEW ONES HAVE BETTER CONTENT). / ELIMINATED 'PRI6B' AND 'REM6B' ROUTINES. NEW AND IMPROVED INPUT / SERVICE ERROR CODE MOVED TO PROPER PAGE. REWROTE CONNECT / ROUTINES TO ALLOW NON-INTERRUPT BUFFERED I/O LATER. CREATED NEW / VARIABLE 'ESCHAR' AND PARAMETER 'ESCAPE' TO SET DEFAULT ESCAPE / CHARACTER. ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE / USED CORRECTLY BY ALL ROUTINES. ADDED 'ESCPRNT' ROUTINE TO / HANDLE ALL CASES (INCLUDING NON-CONTROL CHARACTERS). DEFAULT / ESCAPE PARAMETER VALUE COMPATIBLE WITH K08V2, BUT IS A USER / PARAMETER, CONFIGURED AS OTHER PARAMETERS DEFINED IN EDIT 017. / CREATED ESCAPE FUNCTION TABLE FOR EXPANSION LATER. NOW SUPPORTS / ESCAPE C(LOSE) IN UPPER OR LOWER CASE, ESCAPE ESCAPE (SEND ONE / ESCAPE CHARACTER). ALL BAD ESCAPE COMMANDS WILL ISSUE <BEL> / CHARACTER TO WARN USER THAT COMMAND IS ILLEGAL AND OTHERWISE WAS / IGNORED. CREATED NEW VARIABLE 'ECHOFLAG' TO ALLOW LOCAL ECHO IN / CONNECT MODE. / 024 19-NOV-1987 NEW FEATURES. CJL / NEW STARTUP MESSAGES AND HELP METHOD VIA COMMAND. CPU TYPE / IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK FOR QUIRKS AND / MODEL DEPENDENCIES. THE DEFAULT PROMPT REFLECTS THE ACTUAL CPU / TYPE (THUS "KERMIT-12>" ON PDP-12). VERSION, REVISION, AND DATE / NOW EQUATED SYMBOLS. / 023 18-NOV-1987 NEW CONSOLE I/O PACKAGE. CJL / NEW CONSOLE I/O ROUTINES WITH DC1/DC3 SUPPORT FOR CONSOLE / TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO / BE USED DURING CONNECT MODE). USES FIELD ONE FOR MESSAGE TEXT TO / ALLOW FOR MORE PROGRAM SPACE. THE MESSAGES ARE NOW GIVEN IN / UPPER/LOWER SIXBIT FORMAT. SUPPORT FOR <^P> RESTART AND <^O> TO / FLIP ECHO. UPPER-CASE CAN BE FORCED BY CHANGING A VARIABLE / ('UPONLY'). / 022 17-NOV-1987 BUG FIX. CJL / EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM; NOW CHECKS FOR AND / IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE. / 021 17-NOV-1987 CODE CLEANUP. CJL / REWROTE TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE CONSISTENCY. / RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE"). / FORMER CODE REGARDING THE TENTATIVE FILE MAXIMUM LENGTH WAS ACCEPTABLY / ORGANIZED FOR ORIGINAL PS/8, OS/8 CONVENTIONS. WITH THE EVOLUTION OF THE / OPERATING SYSTEM INTO OS/78 (VERSIONS 1-4) AND OS/278 (VERSIONS 1-2), THE / ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES. / THE ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL LENGTH / OF THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM). IF RECORD 7777 IS PART OF / THE ACTUAL LARGEST EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON / THE DEVICE), THEN THE LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING / BUG). SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS / ASSUMED TO BE CORRECT. / TESTS WITH THE DECUS VERSION OF OS/278 (DM-101) REVEAL A DANGEROUS CHANGE: / THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS! / TO COUNTERACT THIS, EDIT 010 INSERTED A DECREMENT OF TWO INTO THE LENGTH / BEFORE PASSING IT BACK TO THE KERMIT FILE WRITING ROUTINE. THE FILE WRITING / ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S / COMPLEMENT NOTATION, THIS IS THE AMOUNT THAT WILL INDICATE FILE OVERFLOW / SHOULD IT REACH ZERO. / THIS HAS NOW BEEN REORGANIZED TO ALLOW THE ENTER ROUTINE TO SET THE DANGER / COUNT DIRECTLY. OS/8 USERS MUST ALLOW FOR THE EXTRA ROOM (WHICH MUST BE / PRESENT BUT WILL NOT BE USED), SINCE NO CHECK FOR SYSTEM VERSION WILL BE / PERFORMED. / 020 16-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL / REWROTE ENTIRE OUTPUT FILE PACK ROUTINE. NOW SUPPORTS / ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES OUTPUT / BUFFER IN FIELD ONE (SAME DEFINITIONS AS INPUT BUFFER) TO ALLOW / MORE PROGRAM SPACE. END OF FILE CONVENTION IN ASCII MODE NOW / INCLUDES ENSURING <^Z> CHARACTER PACKED INTO FILE (OR NOT). / REWROTE ENTIRE OUTPUT FILE CLOSE ROUTINE TO IMPLEMENT <^Z> / SCHEME. ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE; USE / SPECIAL ROUTINE CALL INSTEAD. FIXED PACKET WRITE BUG. / 019 15-NOV-1987 NEW ROUTINES AND CODE CLEANUP. CJL / FIXED UNPACK <^Z> BUG. REWROTE ENTIRE INPUT FILE UNPACK ROUTINE. / NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE. USES / INPUT BUFFER IN FIELD ONE TO ALLOW MORE PROGRAM SPACE. BUFFER / FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE. END OF / FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER / OR NOT. ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE; USE / SPECIAL ROUTINE CALL INSTEAD. / 018 09-NOV-1987 BUG FIX AND CODE CLEANUP. CJL / FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE. / 017 05-NOV-1987 NEW FEATURES. CJL / CONDITIONAL ASSEMBLY PARAMETERS ADDED FOR MACHINE TYPE (PDP-8, / DECMATE I, DECMATE II/III/III+), REMOTE LINE AND LOCAL TERMINAL / INTERFACE DEFINITIONS. / 016 05-NOV-1987 CODE CLEANUP. CJL / OPTIMIZATION OF CODE, LITERALS, CONSTANTS. / 015 04-NOV-1987 BUG FIX. CJL / INPUT SERVICE ROUTINE ERROR DOES JMP INSTEAD OF JMS WHEN CALLING / COMMON ERROR HANDLER. / 014 02-NOV-1987 SOURCE FILE CLEANUP. CJL / SOURCE FILE COSMETICALLY CLEANED UP AND RENAMED TO K12MIT.PAL / WHICH CONFORMS WITH CUCCA NAMING CONVENTION. NO ACTUAL BINARY / CODE CHANGES BEYOND K08V2. THIS EDIT HISTORY ADDED. ENTRIES / PRIOR TO 014 TRANSCRIBED BY CJL. / SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES) IS THE INTENDED ENVIRONMENT / FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12. / ASSEMBLING THE SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA CONFIRMING / THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE). / 013 01-OCT-1987 CHANGE TO VERSION 2.0. R. SCHLERF (RICH) / CHANGED 'RKIOT'/'RTIOT' TO 43/44 REMOTE LINE IOT (LOCAL / PREFERENCE). CHANGED 'ESCAPE' CHARACTER TO ^] ('CONX1') FOR / GENERIC CONFORMITY. ADDED VERSION/COMMAND BANNER AT STARTUP FOR / MINI-HELP. INCORPORATED K278 CHANGES 003-006, 009-010 (NO / INTERRUPTS). DELETED 'ERRMSG.' NOW USES 'STXERR' AT 'CLOOP9'+2 / FOR PROGRAM SPACE. TO CONFORM TO GENERIC KERMIT, "BACK ON PDP8" / MESSAGE DELETED AND REPLACED WITH BEEP <^G>. MESSAGE "SENDING / FILE XXXXXX.XX CREATED ON DD-MM-YY" REDUCED TO "SENDING FILE / XXXXXX.XX" TO CONFORM TO GENERIC KERMIT. PARITY BIT IS IGNORED / ON BOTH REMOTE AND TTY LINES. OUTPUT PARITY IS SET TO SPACE. / PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY: / RICHARD SCHLERF (RICH) / AMERICAN CYANAMID COMPANY / MEDICAL RESEARCH DIVISION / LEDERLE LABORATORIES / BUILDING 190 ROOM 115H / PEARL RIVER, NEW YORK 10965 / (914) 732-2186 (09:00 TO 16:00) / SINCE PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS NOT / SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION. FUTURE / VERSIONS WILL INCORPORATE THE DECMATE FEATURES AND THUS OBSOLETE ALL OTHER / VERSIONS AT THAT TIME. / 012 04-JUN-1986 PROGRAM FIX. SEPP STADELMANN (SSTA) / RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC. / 04-JUN-1986 VERSION RELEASED TO CUCCA BY MARTYN HEMMINGS (DEC GERMANY) AND / SEPP STADELMANN (DEC SWITZERLAND) OF: / DIGITAL EQUIPMENT CORPORATION (DEC) / 146 MAIN STREET / MAYNARD, MASS 01754 / (617) 897-5111 / CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH / DOESN'T REALLY CONFORM TO THE NAMING CONVENTION). / CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE. FILE REPAIRED BY: / CHARLES LASNER (CJL) / CLA SYSTEMS / 72-55 METROPOLITAN AVENUE / MIDDLE VILLAGE, NEW YORK 11379-2107 / (718) 894-6499 / REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA. / PROGRAM IS NOW THE DECMATE II/III (III-PLUS) KERMIT ONLY. HOOKS WERE LEFT IN / FOR PDP-8 VERSION, BUT NOT IMPLEMENTED. K278 DOES WORK WITH ADDITIONAL / IMPLEMENTATIONS OF KERMIT, BUT RECEIVE COMMAND DOES NOT WORK. PROGRAM YIELDS / RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO FLOPPY-BASED DECMATE II SYSTEM. / CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS. K278 DOES / NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND. / 011 04-JUN-1986 NEW FEATURES. SSTA / 'PRQ3' CODE CONDITIONALS. ROM SETUP COMMAND IMPLEMENTED FOR DMII/III. / AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT. / 010 13-MAR-1986 BUG FIX. MARTYN HEMMINGS (MART) / FULL DISK HANDLED WELL. / 009 13-MAR-1986 BUG FIX. MART / CLEAN UP BREAK AND GET. / 008 12-MAR-1986 BUG FIX. MART / CLEAR INPUT CHARACTERS FROM COMMUNICATIONS PORT WHEN IN IDLE / LOOP. / 007 11-MAR-1986 NEW FEATURES AND BUG FIX. MARTYN HEMMINGS AND / SSEP STADELMANN / (MART+SSTA) / INTERRUPT DRIVEN AND BUG FIX. / 006 10-MAR-1986 NEW FEATURE. MART+SSTA / DEVICE PARSE ON GET. / 005 10-MAR-1986 BUG FIX. MART+SSTA / NO DATE IN FILE WITH <^Z> INTACT. / 004 10-MAR-1986 NEW FEATURES AND BUG FIX. MART+SSTA / MAXIMUM RECEIVE BUFFER FIXUP ('RTERMI'), 15 SECOND TIME-OUT / DURING CONNECT. / 003 10-MAR-1986 BUG FIX. SSTA / TWO PAGE HANDLER FIX. / K08MIT.PAL COPIED TO DEC ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO / EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL. / KERMIT.PAL AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO PRODUCE / THE RUNNING KERMIT-8. *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.* / 002 18-JUL-1985 ORIGINAL RELEASE. RANDY HIPPE / 18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF: / BUREAU OF ENGRAVING, INC. / 3311 BROADWAY N.E. / MINNEAPOLIS, MN 55413 / (612) 623-0900 X218 / CUCCA RENAMED FILE (KER8.PAL) TO K08MIT.PAL WHICH CONFORMS TO NAMING / CONVENTION OF KERMIT FILES. / K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY. / PROGRAM PRONE TO GETTING "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS / 'CAPAS' BYTE FEATURE AND ASCII TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF / FILE DATA. COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY. <^C> / ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!). MANY KERMITS WILL NOT / WORK WITH K08MIT; HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20. / 001 30-JUL-1984 FIRST VERSION (KER8.PAL). JERRY SANDS / HARDWARE HINTS AND KINKS. / KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION: / PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY. / OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT). / KL8-COMPATIBLE CONSOLE INTERFACE. / 7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:). / KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT. / NOTE: ASSEMBLY PARAMETERS OF KERMIT-12 ALLOW FOR LOCAL KERMIT CONTROLLING / TERMINALS TO BE OTHER THAN THE PRIMARY OS/8 CONSOLE DEVICE. THE ACTUAL / HARDWARE MUST STILL CONFORM TO THE SAME REQUIREMENTS (THE DEVICE CODES WOULD / THEN BE USER-SPECIFIED AND DIFFER FROM THE STANDARD 03/04) AS THE STANDARD / CONSOLE INTERFACE AND TERMINAL. / SPECIAL DECMATE CONSIDERATIONS: / DECMATE USAGE IS USUALLY OBTAINED BY ASSEMBLING FOR THE STANDARD CONSOLE / DEVICE (03/04), AS THE BUILT-IN FIRMWARE/SLUSHWARE OF THE DECMATES IS / SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S REQUIREMENTS. / (THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.) / DECMATE REMOTE COMMUNICATIONS PORTS ARE *RADICALLY* DIFFERENT FROM / KL8-COMPATIBLE PORTS. THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH / DETECTS THE USAGE OF KERMIT-12 ON THE SPECIFIC DECMATE SYSTEM, AND / SELF-CONFIGURATION AS APPROPRIATE. THERE IS ONE EXCEPTION TO THIS, NAMELY IF / THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER PORT (32/33), THEN / THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED. THE STANDARD / ASSEMBLY OF KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS PORT. / THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE. / CONFIGURATION RESTRICTIONS: / WHEN INTERRUPTS ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T WORK. / THE NON-INTERRUPT VERSION SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU, SO / THIS SHOULD NOT BE A PROBLEM. INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE / RUN ONLY ON SYSTEMS WHERE *ALL* INTENDED DEVICES CAN HAVE THEIR HANDLERS / INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS. WHEN IN DOUBT, / THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION). / IF FLOW CONTROL IS DISABLED (DUE TO XON/XOFF BEING UNAVAILABLE) THEN THE / CONSOLE BAUD RATE MUST MEET OR EXCEED THE REMOTE LINE RATE. THE USER MUST / TAKE MINIMAL CARE NOT TO OVERLOAD THE INTERNAL BUFFERS OF KERMIT-12, AS THIS / WILL YIELD THE ERROR MESSAGE: KEYBOARD INPUT ERROR! / THIS IS NOT LIKELY TO OCCUR UNLESS ONE "PLAYS" WITH A KEYBOARD WHICH CAN / GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE QUITE ADEQUATE FOR ALL / REASONABLE TERMINAL APPLICATIONS. SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY / XON/XOFF PROTOCOL (WHILE KERMIT-12 HAS IT ENABLED), THEN INTERNAL BUFFER / OVERFLOW WILL YIELD THE ERROR MESSAGE: REMOTE LINE INPUT ERROR! / THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY MISUSE OF FLOW / CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12 WITH THE / CONSOLE BAUD RATE SLOWER THAN THE REMOTE LINE BAUD RATE WITH FLOW CONTROL / DISABLED). IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE / LINE INPUT WILL OCCUR WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE / USER FREEZES/UNFREEZES THE DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS / FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY. / FLOW CONTROL IS NOT YET SUPPORTED DURING KERMIT TRANSFERS. SINCE KERMIT-12 / DOES NOT SUPPORT SLIDING WINDOWS, KERMIT-12 WILL NEVER GENERATE OUTGOING / XON/XOFF SEQUENCES. FUTURE REVISIONS WILL SUPPORT INCOMING XON/XOFF FROM THE / REMOTE KERMIT. XON/XOFF PROTOCOL DURING CONNECT MODE IS COMPLETELY AVAILABLE / AT THE USER'S OPTION. / CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:" FEATURES, I.E. THE / PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS / <CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS ONLY). TERMINALS / LACKING LOWER-CASE SUPPORT SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE / AUTOMATICALLY. TERMINALS SUCH AS THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE / ENABLED, AS KERMIT-12 SUPPORTS OPTIONAL OUTPUT FOLDING. THE UPPER-CASE ONLY / OPTION SHOULD BE ENABLED FOR TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE / HOST, AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE MESSAGE CHARACTERS (WHICH / BECOME UPPER-CASE IF THIS OPTION IS SET). THE <BS> CHARACTER IS REQUIRED FOR / VISUAL RUBOUT (<BS> <SPACE> <BS>) ONLY. FUTURE VERSIONS WILL SUPPORT / HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT. ALL TERMINAL FEATURES (SUCH / AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST DURING CONNECT / MODE; THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL / BE TREATED AS A SEVEN-BIT CHARACTER ONLY. IF THE USER PRESSES THE ESCAPE / CHARACTER TWICE, THEN THE SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT / ONCE; THERE IS NO WAY TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET. / SINCE THE ESCAPE CHARACTER ITSELF CAN BE SET TO ALMOST ANY SEVEN-BIT VALUE, / THIS SHOULD NOT BE A SERIOUS LIMITATION. TERMINALS THAT DON'T "BEEP" WHEN THE / <BEL> CHARACTER IS SENT SHOULD NOT OUTPUT A PRINTABLE RENDITION OF THE <^G> / CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT / DURING VARIOUS MESSAGE SEQUENCES, ETC. / KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS: / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA. / FUNCTIONAL BAUD RATES INCLUDE 110, 150, 300, 600, 1200, 2400, 4800, 9600, / 19200, 38400 AND 76800. 2400 BAUD REQUIRES A REVISION "B" OR BETTER M8650 / MODULE (IF ONE USES DEC'S DOCUMENTATION OF AVAILABLE SPLIT-LUG OPTIONS). / ACTUAL BAUD RATES UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN KERMIT-12 / BECOMES INTERRUPT-DRIVEN. RATES OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ / BAUD-RATE OSCILLATOR. / THE BAUD RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE / A SINGLE SOLDER JUMPER TO IMPLEMENT THE PROPER BAUD RATE ABOVE 2400 BAUD. / CHANGING BAUD-RATE GENERATOR CRYSTALS WILL PRODUCE OTHER RATES AS NECESSARY. / (SEND INQUIRIES TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS / INCLUDING UPGRADED BAUD-RATE OSCILLATORS, ETC.) KERMIT-12 HAS BEEN TESTED TO / 9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION). / KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS: / 1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY. / FUTURE VERSIONS OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED PARITY / OPTIONS. THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE / SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT INTERACTION / WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION). / ALL BAUD RATES ARE SUPPORTABLE: / 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200. / 19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER "W5" AND THEN / SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD. A WESTERN DIGITAL TR-1602-B / OR EQUIVALENT UART IS REQUIRED TO SUPPORT 19200 BAUD; MOST OF THE RECENT / PRODUCTION DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS / THIS REQUIREMENT. EARLY M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH / *CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!). / RECEIVE BAUD RATE SHOULD BE IDENTICAL TO TRANSMIT BAUD RATE. (DO NOT SET THE / RECEIVE=150 BAUD SWITCH!) / OTHER INTERFACES: / DKC-8/A (8/A OPTION BOARD #1) INTERFACES SHOULD BE SETUP AS PER THE KL8-J/A / SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART. SOME DEC DOCUMENTATION / INDICATED A PROHIBITION ON THE USE OF 19200 BAUD, BUT THIS IS OBVIATED BY THE / USE OF THE SAME UARTS AS IN THE KL8-J/A. / EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD / WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES DO NOT SUPPORT OPTIONS / KERMIT-12 WOULD REQUIRE TO BE DISABLED ANYWAY. THESE INCLUDE PARITY / GENERATION, FRAMING ERROR DETECTION, ETC.). TO UTILIZE THESE DEVICES, THE / ASSEMBLY PARAMETERS FOR USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES / SHOULD BE GIVEN DURING ASSEMBLY (SEE ASSEMBLY INSTRUCTIONS). PROPER DEVICE / CODE VALUES MUST BE OBTAINED FOR THE SELECTED INTERFACE, AS THERE ARE MANY / ACTUAL POSSIBILITIES. (DP-12 DEVICES ARE GENERALLY DEVICE 40/41; PT08/DC02 / INTERFACES ARE GENERALLY DEVICE 11/12, ETC.) / ASSEMBLY INSTRUCTIONS. / KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS: / P?S/8 METHOD: / ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS THE SOURCE FILE, THE FOLLOWING / COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING: / .PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8) / OPTION SWITCH BREAKDOWN: / /A ALL SYMBOLS IN SYMBOL PRINTOUT. / /C OPTIMIZE CORE DURING ASSEMBLY FOR MORE SYMBOLS, LESS BUFFERS. / THIS OPTION SHOULD BE DELETED IF MORE THAN 8K IS AVAILABLE FOR / ASSEMBLY. / /E FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE. / /J *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD. / /L PERFORM SECOND-PASS LISTING. / /M CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY. / /N ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT. / /P ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT. / /Q ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS. / /S ENABLE SYMBOL TABLE PRINTOUT. / /X ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY. / /8 ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY. / THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS TO BE DETERMINED / AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED. / P?S/8 PAL IS THE PREFERRED METHOD OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE / TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED. K12MIT COULD GROW TO A SIZE / BEYOND THE CAPABILITIES OF OS/8 CREF. THIS LIMITATION CANNOT APPLY TO THE / P?S/8 DEVELOPMENT ENVIRONMENT. / P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE / ASSEMBLY MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS / SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY. / NOTE: P?S/8 IS *NOT* A DEC PRODUCT; IT IS SOLD COMMERCIALLY AND IS AVAILABLE / FREE OF CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED / INSTITUTIONS. CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8. / OS/8 FAMILY OF SYSTEMS METHOD: / K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM DECUS / AS PART OF THE OS/278 RELEASE. PAL8 VERSION B0 WILL RUN ON ANY OS/8 FAMILY / SYSTEM, AS IT HAS NO HARDWARE DEPENDENCIES BEYOND THE ORIGINAL PDP-8 / REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED). / THIS ALSO APPLIES TO CREF VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE / IS REQUESTED. PAL8 VERSION B0 AND CREF VERSION B0 ARE AVAILABLE AS PART OF / THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY. SEE THE / DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV AND CREF.SV FROM / THESE ENCODED FILES. / ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY / ORNAMENTED LISTING: / .PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW) / DEV: IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE. STANDARD EXTENSIONS / ARE ASSUMED (.BN FOR BINARY, .LS FOR LISTING, .PA FOR PAL SOURCE). THE / KSCR.TM TEMPORARY OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO / SYS:CREFLS.TM IF NOT EXPLICITLY GIVEN. MANY SYSTEM DEVICES ARE TOO SMALL TO / SUPPORT THIS TEMPORARY FILE, THUS THE FILE MAY BE DIRECTED TO ANOTHER / AVAILABLE DEVICE WITH SUFFICIENT SPACE. / THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC. TO / THE ASSEMBLY. / OPTION SWITCH BREAKDOWN: / /C CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE. / /E GENERATED LINKS ARE ERRORS. / /F *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD. / /M USE MAMMOTH SYMBOL TABLE OPTION FOR CREF. / /W FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE. / LOADING INSTRUCTIONS: / .LOAD DEV:K12CLR,K12MIT.BN THIS LOADS THE BINARY CLEAR AND KERMIT / .SAVE DEV K12MIT.SV=1 THIS SAVES THE CORE IMAGE / THE JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT / SHOULD NOT BE SAVED/RESTORED WHEN THE USR IS LOADED OVER THIS AREA OR / DISMISSED (THE USR IS ACTUALLY NEVER DISMISSED IN NORMAL K12MIT OPERATION). / OTHER BITS MAY BE SET AT THE USER'S OPTION, BUT ARE UNNECESSARY; THE BIT / INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD REGARDING THE DISPOSITION OF / 10000-11777. THE BINARY FILE K12CLR.BN (CREATED BY ASSEMBLING K12CLR.PA) / LOADS ZEROES INTO ALL OF MEMORY TO CREATE A "CLEAN" CORE IMAGE FILE, WHICH / MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION. / PASSING SHORT PARAMETER FILES. / WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM (PARAM.PAL) / THE FOLLOWING SHOULD BE NOTED: / ALWAYS PUT THE SHORT PARAMETER FILE (CONTAINING EQUATED SYMBOLS SUCH AS / USER=1, ETC.) IN FRONT OF K12MIT.PAL. / IF TTY: IS USED FOR DIRECT TYPE-IN OF THESE PARAMETERS, THE INFORMATION NEED / ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1. SUBSEQUENT PASSES REQUIRE THE / ENDING <^Z> ONLY. IF THIS METHOD IS USED, A LISTING WITHOUT THE USER INPUT / WHICH DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED. NOTE: IF BINARY IS / GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT / MESSAGE, ETC.), THE INFORMATION MUST BE TYPED IN DURING PASS 2. THE PASS 3 / LISTING MAY CONTAIN THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF / THE INPUT. PASS 1 INPUT OF THE INFORMATION IS EFFECTIVELY IGNORED, AS NO / DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.). / EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE: / DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED / DURING PDP-8 PAL8 B0 OPERATION. THE KL8E TTY: HANDLER WILL NO LONGER BE ABLE / TO BUFFER <^Z> DURING THE ASSEMBLY; YOU MUST WAIT UNTIL THE HANDLER ACCESSES / THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY. / CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE. / IF SO DESIRED, A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING THE / FOLLOWING INTO THE PARAMETER FILE: / BUFFLD= 10 /THESE PROBABLY / FILBUFF=2000 /WON'T CHANGE! / GENMSG= 0 /DON'T GENERATE STANDARD (NULL) MESSAGE / UMSG= 0 /DON'T GENERATE STANDARD (DUMMY) USER MESSAGE / FIELD BUFFLD%10 /FIELD FOR TEXT MESSAGE / *FILBUFFER /LOCAL MESSAGE LOADS THERE /LCLMSG,TEXT "%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%" / ZBLOCK LCLMSG+40-. /ZERO REST OF MESSAGE AREA / TEXT IS IN UPPER/LOWER-CASE SIXBIT WITH '^' MEANING SHIFT CASE (INITIALLY / LOWER-CASE) AND '%' MEANING <CR>, <LF>. / OTHER METHODS: / KERMIT-12 *CANNOT* BE ASSEMBLED BY PAL10 (LAST KNOWN VERSION OF PDP-8 / CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES: / DOES NOT SUPPORT 'RELOC' PSEUDO-OP. / DOES NOT SUPPORT PAGE ZERO REDEFINE (CAUSES "Z" ERROR ON SOURCE FILES WHICH / DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8). / INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO "Q" ERROR ON SOURCE FILES / WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8). / DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION / /W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC. / DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8 / OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES. / P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10. PAL10 SUPPORTS MACRO-8 MODE AS AN / OPTION AND AUTOMATIC FIELD DUMP BITMAPS; ALL OTHER KNOWN PAL10 FEATURES EXIST / IN P?S/8 PAL INCLUDING THE SUPPORT OF THE AUTOMATIC FIELD DUMP BITMAP / PSEUDO-OPS ('ENBITS' AND 'NOBITS'). / OS/8 PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS SEVERAL SYNTACTIC / QUIRKS (WHICH ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8 / PAL AND PAL10 IN CERTAIN MINOR WAYS); REGARDLESS, PAL8 LACKS THE / COMPATIBILITY PROBLEMS OF PAL10. / MAINTAINING SOURCE COMPATIBILITY. / KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8 / PAL AND OS/8 PAL8 (VERSION B0). CERTAIN FORMS OF STATEMENTS SHOULD BE / AVOIDED: / TAD /NOT LEGAL IN PAL8 / 0+TAD /NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8 / TAD (3)+1 /GENERATES SAME AS "TAD (3+1)" IN PAL8 / -A!-B /UNARY OPERATOR HANDLED WRONG IN PAL8 / I+N /NOT LEGAL IN PAL8 / N+I /NOT LEGAL IN PAL8 / I I /NOT LEGAL IN PAL8 / THIS REQUIREMENT IS EASILY MET BY KERMIT-12 AS MOST OF THESE CASES ARE / ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY. / THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT HAS OTHER DESIRABLE FEATURES, MOST / OF WHICH IT SHARES WITH P?S/8 PAL) ARE TOO SEVERE TO ALLOW USABLE ASSEMBLY OF / THIS PROGRAM. BETTER CROSS-ASSEMBLERS MAY EXIST ELSEWHERE WHICH ARE / SOURCE-COMPATIBLE WITH KERMIT-12. / USE OF P?S/8 LANGUAGE EXTENSIONS. / P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL / FOR ASSEMBLY DEVELOPMENT OF KERMIT-12. THESE INCLUDE LANGUAGE ELEMENTS SUCH / AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE / VALUE OF 'EXPR' WILL BE DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY / WHEN THAT POINT IN THE ASSEMBLY IS REACHED. TO ACCESS THESE FEATURES AND / STILL PROVIDE COMPATIBILITY WITH PAL8 (VERSION B0), THE FOLLOWING CODING / TECHNIQUE IS SUGGESTED: / IFNDEF PQS <PQS=0> /WILL BE 0 ON PAL8, PAL10 / IFZERO PQS < /DO PAL8, ETC. STUFF HERE / FOO= (TABLE) /DEFINE POINTER TO ADDRESS OF TABLE / TAD FOO-1 /GET (POINTER TO ADDRESS OF TABLE)-1 / DCA XR1 /SETUP AUTO-INDEX REGISTER / WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8. / > /END OF PAL8, ETC. VARIANT / IFNZRO PQS < /DO P?S/8 PAL STUFF HERE / TAD (TABLE)-1 /GET (POINTER TO ADDRESS OF TABLE)-1 / DCA XR1 /SETUP AUTO-INDEX REGISTER / IFNDEF PASS <PASS=0>/DEFINE PASS VARIABLE / PASS= PASS+1 /BUMP EVERY ASSEMBLER PASS / PAUSE PASS /DISPLAY PASS NUMBER / IFNZRO .&4000 < / ERROR 1234 /DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS / > / > /END OF P?S/8 PAL VARIANT / THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR PERMANENT ELEMENTS WHICH MAY BE / MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT CODING, WHILE THE PAL8 (VERSION / B0) VERSION CAN STILL BE USED (VIA DIRECT OCTAL, MULTIPLE EQUATE STATEMENTS, / CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC. AS NECESSARY) FOR STANDARD / ASSEMBLY OF KERMIT-12. / ASSEMBLY PARAMETERS. / SEVERAL PARAMETERS MUST BE CHANGED WITHIN K12MIT.PA (OR PASSED TO THE / ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE THE MAIN / FILE): / SETTING KEY= [RECEIVE IOT CODE FOR CONSOLE KEYBOARD] DEFINES THE CONSOLE / KEYBOARD IOT CODE (DEFAULT IS 03). / SETTING TTY= [TRANSMIT IOT CODE FOR CONSOLE OUTPUT] CHANGES THE CONSOLE / PRINTER IOT CODE (DEFAULT IS 04). / THE FOLLOWING DEFINITIONS ARE ESSENTIALLY FOR KL8-TYPE DEVICES ONLY, AS THE / CODE DEMANDS KL8 HARDWARE COMPATIBILITY. MODELS OTHER THAN PDP-8 (SUCH AS / DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON AVAILABLE INTERFACES (OTHER / SOFTWARE DESIGNATES A SERIAL INTERFACE AS A LOGICAL PRINTER PORT; DECMATES / SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES THIS.), OR DON'T ALLOW / USABLE PLUG-IN OPTIONS. / IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE: / SETTING DEV30= 1 CREATES DEVICE 30/31 REMOTE LINE IOTS. / SETTING DEV40= 1 CREATES DEVICE 40/41 REMOTE LINE IOTS. / SETTING LEDERLE=1 CREATES DEVICE 43/44 REMOTE LINE IOTS (AND A CUSTOM / HEADER). / SETTING ORIGNAL=1 CREATES DEVICE 33/34 REMOTE LINE IOTS (ORIGINAL / SETTINGS). / SETTING SPRINT= 1 CREATES DEVICE 32/33 REMOTE LINE IOTS (SERIAL PRINTER / PORT). / SETTING USER= 1 CREATES DEVICE XX/XY REMOTE LINE IOTS. / IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT. / SETTING USER= 1 REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES: / XX= [RECEIVE IOT DEVICE CODE] (DEFAULT IS 40). / XY= [TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41). / SETTING SPRINT= 1 INHIBITS THE BUILT-IN CHECK FOR DECMATE OPERATION AND / USES THE SERIAL PRINTER PORT FOUND ON ALL / WPS-8-CONFIGURED PDP-8/E, PDP-8/A CONFIGURATIONS, / VT-78, AND ALL DECMATES (VT-278, DECMATE II, III, / III+) FOR REMOTE COMMUNICATIONS. / THE USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY BE / PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER / IS A MODEM (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC. REQUIRES A / GENDER CHANGER.), OR THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY / *ONLY* FOR A PRINTER, SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN" / KEY AS A SCREEN DUMP TO THE SERIAL PRINTER PORT, ETC. THESE ISSUES ARE NOT / RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY / KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE VERSIONS COULD REDEFINE THE / "PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.). / SETTING BRATE= NN SETS THE DEFAULT BAUD RATE (FOR SYSTEMS THAT SUPPORT / THIS FEATURE) FROM A TABLE OF VALUES (0-15) AS / FOLLOWS: / NN BAUD RATE / 00 50 / 01 75 / 02 110 / 03 134.5 / 04 150 / 05 300 / 06 600 / 07 1200 / 08 1800 / 09 2000 / 10 2400 / 11 3600 / 12 4800 / 13 7200 / 14 9600 / 15 19200 / SETTING ESCAPE= NNNN SETS THE DEFAULT ESCAPE CHARACTER TO NNNN. / SETTING FLOW= 1 ENABLES FLOW-CONTROL BY DEFAULT. / SETTING FLOW= 0 DISABLES FLOW-CONTROL BY DEFAULT. / SETTING FMODE= 0177 SETS THE DEFAULT FILE MODE TO ASCII. / SETTING FMODE= 4377 SETS THE DEFAULT FILE MODE TO BINARY. / SETTING GENMSG= 0 CAUSES NO BINARY TO BE GENERATED WHERE 'LCLMSG' IS / DEFINED. THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR / SUBSEQUENT OVERLAY BY K12PCH.BN TO DEFINE THE LOCAL / HEADER MESSAGE. THIS PARAMETER SHOULD NOT BE SET / UNLESS ONE OF THESE METHODS IS USED, ELSE THE HEADER / MESSAGE WILL BE UNDEFINED. (NOTE: IF K12PCH.BN / GENERATES A HEADER MESSAGE, THEN THIS PARAMETER IS / UNIMPORTANT, AS K12PCH.BN OVERLAYS THE BINARY OF / K12MIT.) / SETTING GENMSG= 1 CAUSES A HEADER MESSAGE TO BE GENERATED. THE CONTENTS / OF THE MESSAGE ARE CREATED BY SETTING LEDERLE=1 OR / UMSG=1. IF EITHER IS ZERO, A DEFAULT (NULL) MESSAGE / WILL BE GENERATED. / SETTING ICLOSE= 1 ENSURES A <^Z> AT <EOF> OF ASCII INPUT FILES BY / DEFAULT. / SETTING ICLOSE= 0 CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT. / SETTING INIECHO=0 CAUSES A FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL / CHARACTER ECHOING BY DEFAULT. / SETTING INIECHO=1 CAUSES A HALF-DUPLEX CONNECT MODE STATE WITH LOCAL / ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT. / SETTING LOWER= 0 ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT. / SETTING LOWER= -40 FOLDS LOWER-CASE CONSOLE OUTPUT TO UPPER-CASE BY / DEFAULT. / SETTING OCLOSE= 0 PREVENTS DEFAULT SENDING OF <^Z> AT <EOF> OF ASCII / FILES. / SETTING OCLOSE= 1 CAUSES <^Z> TO BE SENT AT <EOF> OF ASCII FILES BY / DEFAULT. / SETTING PORT= 0 CAUSES THE DP-278 PORT 0 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING PORT= 1 CAUSES THE DP-278 PORT 1 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING RETCNT= NNNN SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT. / SETTING UMSG= 0 PREVENTS THE LOCAL USER HEADER MESSAGE FROM BEING / GENERATED. / SETTING UMSG= 1 CAUSES THE LOCAL USER HEADER MESSAGE TO BE GENERATED. / THE PARAMETER GENMSG=1 IS REQUIRED TO BE SET. THE / SOURCE MUST BE MODIFIED LOCALLY TO CHANGE THE MESSAGE / TEXT FROM "INSERT LOCAL USER MESSAGE HERE!," AS THIS / IS THE DEFAULT CONTENTS. / KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES. / BRIEF USAGE DESCRIPTION. / KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT / DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE. / AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE: / 1. CONNECT (TO REMOTE SYSTEM AS TERMINAL). / 2. SEND FILESPEC (TO REMOTE RECEIVER OR SERVER). / 3. RECEIVE FILESPEC (FROM REMOTE SENDER). / 4. GET FILESPEC (FROM REMOTE SERVER). / 5. FINISH (SERVING). / 6. SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED **** / 7. EXIT (TO OPERATING SYSTEM). / 8. HELP (DISPLAYS HELP MESSAGE). / FILESPEC MAY BE ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION, / WHERE THE FILENAME AND EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2 / ALPHANUMERICS RESPECTIVELY, AS NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME / FORMAT). THE DEVICE: FIELD IS OPTIONAL; ALL COMMANDS USING THE DEVICE: / FIELD FOR LOCAL DEVICE SPECIFICATION WILL USE THIS DEVICE AS THE SOURCE OR / DESTINATION AS NECESSARY FOR THE LOCAL FILES. IF THE DEVICE: FIELD IS / OMITTED, THE DEFAULT DEVICE DSK: WILL BE USED. THE ACTUAL DEVICE USED MAY BE / SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND: / .ASSIGN DEV DSK / WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE. / KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT: THE ACTUAL DEFAULT PROMPT / TEXT IS PARTIALLY TAKEN FROM THE ACTUAL MACHINE KERMIT-12 IS CURRENTLY / EXECUTING ON. FOR EXAMPLE, IF KERMIT-12 HAS DETERMINED THE CPU TYPE AS / PDP-8/E, THE PROMPT WILL BE: / KERMIT-8/E> / THIS ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH / MESSAGES ORIGINATING FROM THE RESPECTIVE SYSTEMS. FUTURE VERSIONS WILL / SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES. / THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE / ESCAPE CHARACTER. / COMMAND RESTRICTIONS. / THE SEND COMMAND ALLOWS DEVICE:FILENAME.EXTENSION (6.2) WITH WILD-CARD / SUBSTITUTION. A * MAY BE GIVEN FOR AN ENTIRE FIELD (EITHER FILENAME OR / EXTENSION OR BOTH) ONLY. A ? WILL MATCH ANY SINGLE CHARACTER WHICH MUST / EXIST IN THE ACTUAL FILENAME OR EXTENSION, UNLESS RIGHT-MOST IN THE FIELD. / ALL MATCHING FILES WILL BE SENT. NO OUTBOUND FILENAME (AS-NAME) FACILITY / EXISTS AT THIS TIME. / THE RECEIVE COMMAND ALLOWS OPTIONAL DEVICE: ONLY. *THE FILENAME AND / EXTENSION ARE NOT ALLOWED*. NAMES OF RECEIVED FILES WILL BE MODIFIED IF / NECESSARY TO CONFORM TO THE 6.2 FORMAT. *IMPLEMENTATION RESTRICTION* : / CERTAIN REMOTE FILENAMES CONTAINING NON-ALPHANUMERIC CHARACTERS MAY CAUSE / KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL. / THE GET COMMAND ALLOWS OPTIONAL DEVICE: TO DETERMINE DESTINATION OF THE / INCOMING FILES. THE OUTBOUND FILESPEC MUST CONFORM TO LOCAL CONVENTIONS / (FILENAME AND EXTENSION ARE NOT LIMITED TO 6.2 FORMAT; THE DEVICE: FIELD / WILL NOT BE SENT TO THE REMOTE KERMIT UNLESS IT IS ILLEGAL WITHIN OS/8 / SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS. IN THIS CASE, THE DEFAULT / DEVICE DSK: APPLIES, AND THE ENTIRE "DEVICE" FIELD IS SENT ALONG WITH ANY / FILENAME AND EXTENSION). CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE WITH THIS / IMPLEMENTATION, AS IMBEDDED SPACES OR NON-ALPHANUMERIC CHARACTERS ARE NOT / ALLOWED, EVEN THOUGH THEY MAY BE REQUIRED ON THE REMOTE SYSTEM. WILD-CARD / CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE. / <^X> OR <^Z> CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT IS / NORMALLY A SLOW PROCESS, SINCE THE CHECKING IS DONE BY A SOFTWARE TIMEOUT / SCHEME. AT THE PRESENT TIME, THERE IS NO DISTINCTION BETWEEN THESE THO / CHARACTERS, SO IT IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF / FILES INVOLVED IN THE TRANSFER IS ABORTED. / DECMATE II/III/III-PLUS CONSIDERATIONS: / FUNCTION KEYS SEND <ESC> SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE. ALL SOFT / FUNCTION KEYS ARE THEREFORE INEFFECTIVE (EXCEPT FOR HOLD SCREEN WHICH ALWAYS / WORKS). / CONNECT MODE RUNS IN 8-BIT MODE. / THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE. / ANY VALID DECMATE II/III/III-PLUS CHARACTER SET IS ALLOWED WHILE IN CONNECT / MODE (MCS TCS LINE, ETC.). ALL <ESC> SEQUENCES ARE PASSED TO THE / SLUSHWARE/FIRMWARE UNMODIFIED. / KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM / CONNECT MODE. / DEFINITIONS. /017 CJL *200 /FOR DEFINITIONS /047 CJL / REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY. /046 CJL IFNDEF DEV30 <DEV30= 0> /USE DEVICE 30/31 VALUES IFNDEF DEV40 <DEV40= 0> /USE DEVICE 40/41 VALUES IFNDEF LEDERLE <LEDERLE=0> /USE LEDERLE LABS VALUES IFNDEF ORIGNAL <ORIGNAL=0> /USE ORIGINAL VALUES IFNDEF SPRINT <SPRINT=0> /USE DEVICE 32/33 VALUES IFNDEF USER <USER= 0> /USE USER-DEFINED VALUES REMOTE= DEV30+DEV40+LEDERLE+ORIGNAL /SET REMOTE LINE IOT CODE REMOTE= REMOTE+SPRINT+USER /SET REMOTE LINE IOT CODE IFZERO REMOTE <DEV40= 1> /DEFAULT TO DEVICE 40/41 VERSION / DEV30 PARAMETERS. IFNZRO DEV30 < IFNDEF REC <REC= 30> /DEVICE 30 INPUT IFNDEF SEN <SEN= 31> /DEVICE 31 OUTPUT > / DEV40 PARAMETERS (DEFAULT). IFNZRO DEV40 < IFNDEF REC <REC= 40> /DEVICE 40 INPUT IFNDEF SEN <SEN= 41> /DEVICE 41 OUTPUT > / LEDERLE PARAMETERS. /038 CJL IFNZRO LEDERLE < IFNDEF REC <REC= 43> /DEVICE 43 INPUT IFNDEF SEN <SEN= 44> /DEVICE 44 OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 0> /DON'T GENERATE USER MESSAGE > / ORIGNAL PARAMETERS. IFNZRO ORIGNAL < IFNDEF REC <REC= 33> /DEVICE 33 INPUT IFNDEF SEN <SEN= 34> /DEVICE 34 OUTPUT > / SPRINT PARAMETERS. /046 CJL IFNZRO SPRINT < IFNDEF REC <REC= 32> /DEVICE 32 INPUT IFNDEF SEN <SEN= 33> /DEVICE 33 OUTPUT > / USER PARAMETERS. IFNZRO USER < IFNDEF XX <XX= 40> /DEFAULT TO DEVICE 40 IFNDEF XY <XY= 41> /DEFAULT TO DEVICE 41 IFNDEF REC <REC= XX> /DEVICE XX INPUT IFNDEF SEN <SEN= XY> /DEVICE XY OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 1> /GENERATE USER MESSAGE > / REMOTE LINE IOT DEFINITIONS. / RECEIVE DEFINITIONS. RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG / TRANSMIT DEFINITIONS. RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11] RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG / CONSOLE TTY: DEFINITIONS. /017 CJL / KEYBOARD DEFINITIONS. /017 CJL IFNDEF KEY <KEY= 03> /KEYBOARD DEVICE CODE KCCIOT= KEY^10+6002 /CLEAR CONSOLE KEYBOARD FLAG, AC KRBIOT= KEY^10+6006 /READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG KRSIOT= KEY^10+6004 /READ CONSOLE KEYBOARD BUFFER STATIC KSFIOT= KEY^10+6001 /SKIP ON CONSOLE KEYBOARD FLAG / TELEPRINTER DEFINITIONS. /017 CJL IFNDEF TTY <TTY= 04> /TELEPRINTER DEVICE CODE TLSIOT= TTY^10+6006 /PRINT CHARACTER, CLEAR FLAG TSFIOT= TTY^10+6001 /SKIP ON TELEPRINTER FLAG / DEFAULT ESCAPE CHARACTER DEFINITION. /025 CJL IFNDEF ESCAPE <ESCAPE="]&37> /DEFAULT IS CONTROL-] / DEFAULT LOWER-CASE ENABLE DEFINITION. /030 CJL IFNDEF LOWER <LOWER= 0/-40> /LOWER-CASE IS ALLOWED AS IS /CHANGE TO -40 IF LOWER-CASE /SHOULD BE FOLDED TO UPPER-CASE / DEFAULT RETRY COUNT DEFINITION. /031 CJL IFNDEF RETCNT <RETCNT=5> /DEFAULT IS FIVE RETRIES / DEFAULT FILE MODE DEFINITION. /031 CJL IFNDEF FMODE <FMODE= 0177> /DEFAULT IS ASCII FILE MODE /4377 IS BINARY FILE MODE / DEFAULT FLOW-CONTROL MODE DEFINITION. /031 CJL IFNDEF FLOW <FLOW= 1> /DEFAULT IS FLOW-CONTROL ENABLED / DEFAULT ASCII INPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF ICLOSE <ICLOSE=1> /ENSURE <^Z> AT ASCII <EOF> / DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF OCLOSE <OCLOSE=0> /<^Z> NOT SENT AT ASCII <EOF> / DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS. /038 CJL IFNDEF GENMSG <GENMSG=1> /DEFAULT IS TO GENERATE A MESSAGE IFNDEF UMSG <UMSG= 0> /DEFAULT IS NO DUMMY USER MESSAGE IFNDEF LEDERLE <LEDERLE=0> /DEFAULT IS NO LEDERLE MESSAGE / THE NULL MESSAGE WILL BE GENERATED BY DEFAULT. / ECHO DEFINITION. /039 CJL IFNDEF INIECHO <INIECHO=0> /DEFAULT IS NO LOCAL ECHO / DEFAULT DECMATE I PORT DEFINITION. /050 CJL IFNDEF PORT <PORT= 0> /DEFAULT IS PORT ZERO / DEFAULT BAUD RATE DEFINITION. /050 CJL IFNDEF BRATE <BRATE= 7> /DEFAULT IS 1200 BAUD / STATE DEFINITIONS. STDAT= "D&137 /DATA STACK= "Y&137 /ACK STNAK= "N&137 /NAK STSIN= "S&137 /SEND-INIT STBRK= "B&137 /BREAK LINK STFIL= "F&137 /FILENAME HEADER STEOF= "Z&137 /END OF FILE OR REPLY STERR= "E&137 /ERROR PACKET STATT= "A&137 /FILE ATTRIBUTES STRIN= "R&137 /RECEIVE-INIT STEOT= "B&137 /BREAK TRANSMISSION STGEN= "G&137 /KERMIT GENERIC COMMAND / DEFAULT INIT PARAMETERS. DEFCK= "1&177 /DEFAULT 1 CHARACTER CHECKSUM /014 CJL DEFEOL= 15+40 /CR IS DEFAULT <EOL> DEFQCTL= "#&177 /"#" IS DEFAULT QCTL / BUFFER DEFINITIONS. /014 CJL DECIMAL /MAKE IT EASIER /014 CJL DEFMAXL=94 /DEFAULT MAXIMUM PACKET SIZE LINSIZ= 32 /KEYBOARD LINE BUFFER SIZE OCTAL /BACK TO NORMAL /014 CJL BUFSIZE=200 /128 CHARACTER RING BUFFERS /026 CJL /FOR NO-INTERRUPT CONNECT MODE / CONTROL CHARACTER DEFINITIONS. /023 CJL CNTRLA= "A&37 /<^A> DEFAULT MARK CHARACTER /023 CJL CNTRLB= "B&37 /<^B> /046 CJL CNTRLC= "C&37 /<^C> PROGRAM EXIT CHARACTER /023 CJL CNTRLD= "D&37 /<^D> /046 CJL CNTRLE= "E&37 /<^E> /046 CJL CNTRLF= "F&37 /<^F> /046 CJL CNTRLG= "G&37 /<^G> BELL CHARACTER /023 CJL CNTRLH= "H&37 /<^H> BACKSPACE CHARACTER /023 CJL CNTRLI= "I&37 /<^I> HORIZONTAL TAB CHARACTER /043 CJL CNTRLJ= "J&37 /<^J> LINEFEED CHARACTER /023 CJL CNTRLK= "K&37 /<^K> VERTICAL TAB CHARACTER /046 CJL CNTRLL= "L&37 /<^L> FORM FEED CHARACTER /046 CJL CNTRLM= "M&37 /<^M> CARRIAGE RETURN CHARACTER /023 CJL CNTRLN= "N&37 /<^N> /046 CJL CNTRLO= "O&37 /<^O> ECHO FLIP CHARACTER /023 CJL CNTRLP= "P&37 /<^P> PROGRAM RESTART CHARACTER /023 CJL CNTRLQ= "Q&37 /<^Q> OUTPUT RESUME CHARACTER /023 CJL CNTRLR= "R&37 /<^R> /046 CJL CNTRLS= "S&37 /<^S> OUTPUT WAIT CHARACTER /023 CJL CNTRLT= "T&37 /<^T> /046 CJL CNTRLU= "U&37 /<^U> /046 CJL CNTRLV= "V&37 /<^V> /046 CJL CNTRLW= "W&37 /<^W> /046 CJL CNTRLX= "X&37 /<^X> FILE ABORT CHARACTER /044 CJL CNTRLY= "Y&37 /<^Y> /046 CJL CNTRLZ= "Z&37 /<^Z> ABORT AND <EOF> CHARACTER /044 CJL DELETE= 177 /<DEL> DELETE OR <RO> CHARACTER /034 CJL LOWERC= "C&177+40 /LOWER-CASE C (CLOSE CHARACTER) /025 CJL UPPERC= "C&177 /UPPER-CASE C (CLOSE CHARACTER) /025 CJL / I/O AND FIELD DEFINITIONS. /019 CJL BUFFLD= 10 /I/O BUFFER FIELD /019 CJL DIRFLD= 10 /DIRECTORY LOOKUP BUFFER FIELD /028 CJL DMIFLD= 10 /DECMATE ONCE-ONLY CODE FIELD /046 CJL MSGFLD= 10 /TEXT MESSAGE FIELD /023 CJL PAGCNT= 2 /I/O BUFFER SIZE IN PAGES /019 CJL PRGFLD= 00 /PROGRAM FIELD /019 CJL USRFLD= 10 /USR FIELD /020 CJL / OS/8 MONITOR DEFINITIONS. /014 CJL SBOOT= 7600 /MONITOR EXIT LOCATION IS 07600 /014 CJL USR= 7700 /NON-LOCKED USR ENTRY POINT /035 CJL / USER SERVICE ROUTINE AND HANDLER DEFINITIONS. /020 CJL CLOSE= 4 /CLOSE TENTATIVE OUTPUT FILE /020 CJL ENTER= 3 /ENTER TENTATIVE OUTPUT FILE /020 CJL FETCH= 1 /FETCH HANDLER /020 CJL INQUIRE=12 /INQUIRE ABOUT HANDLER /020 CJL LOOKUP= 2 /LOOKUP FILE /020 CJL RESET= 13 /RESET DEVICE CONTROL WORD TABLE/037 CJL USRIN= 10 /LOCK USR IN CORE /020 CJL WRITE= 4000 /I/O CALL WRITE BIT /020 CJL / INSTRUCTION DEFINITIONS. CLCL= 6136 /CLEAR CLOCK FLAG (8/A, ETC.) /046 CJL CLSK= 6131 /SKIP ON, CLEAR CLOCK FLAG /046 CJL CLSK8A= 6137 /SKIP ON CLOCK FLAG (8/A, ETC.) /046 CJL COM= 0017 /COMPLEMENT AC DCAC= DCA . /CURRENT PAGE DCA INSTRUCTION /047 CJL IAAC= 6171 /"A" REGISTER TO AC IACA= 6167 /AC TO "A" REGISTER ISZC= ISZ . /CURRENT PAGE ISZ INSTRUCTION /050 CJL JMPC= JMP . /CURRENT PAGE JMP INSTRUCTION /047 CJL JMPIC= JMP I . /CURRENT PAGE JMP I INSTRUCTION /047 CJL JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION /047 CJL JMSIC= JMS I . /CURRENT PAGE JMS I INSTRUCTION /047 CJL LINC= 6141 /GOTO LINC MODE PDP= 0002 /GOTO PDP-8 MODE PRQ3= 6236 /TYPE THREE PANEL REQUEST /046 CJL TADC= TAD . /CURRENT PAGE TAD INSTRUCTION /047 CJL R3L= 7014 /ROTATE AC (NOT LINK) LEFT 3 /046 CJL / NUMERIC LOAD DEFINITIONS. /014 CJL NL0000= CLA /LOAD AC WITH 0000 /046 CJL NL0001= CLA IAC /LOAD AC WITH 0001 /014 CJL NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 /014 CJL NL0003= CLA STL IAC RAL /LOAD AC WITH 0003 (8/I ON UP) /046 CJL NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 (8/I ON UP) /046 CJL NL0006= CLA STL IAC RTL /LOAD AC WITH 0006 (8/I ON UP) /046 CJL NL0010= CLA IAC RAL RAR /LOAD AC WITH 0010 (6120) /024 CJL NL0100= CLA IAC BSW /LOAD AC WITH 0100 (8/E ON UP) /024 CJL NL3776= CLA CLL CMA RAR RAL /LOAD AC WITH 3776 (8/I OR 8/L) /024 CJL NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 /046 CJL NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 /014 CJL NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 /046 CJL NL6000= CLA STL IAC RTR /LOAD AC WITH 6000 (8/I ON UP) /046 CJL NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 /014 CJL NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 /014 CJL NL7777= CLA CMA /LOAD AC WITH 7777 /014 CJL / DECMATE I COMMUNICATIONS PORT DEFINITIONS. /050 CJL IPORT0= 30 /COMMUNICATIONS PORT 0 INPUT DEVICE CODE RKFL0= IPORT0^10+6000 /SET COMMUNICATIONS PORT 0 INPUT FLAG RKSF0= IPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG RKCC0= IPORT0^10+6002 /CLEAR AC RKIE0= IPORT0^10+6005 /PORT 0 INPUT INTERRUPT ENABLE PER AC[11] RKRB0= IPORT0^10+6006 /READ COMMUNICATIONS PORT 0 INTO AC OPORT0= 31 /COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE RTFL0= OPORT0^10+6000 /SET COMMUNICATIONS PORT 0 OUTPUT FLAG RTSF0= OPORT0^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG RTCF0= OPORT0^10+6002 /NOP RTIE0= OPORT0^10+6005 /PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11] RTLS0= OPORT0^10+6006 /WRITE COMMUNICATIONS PORT 0 FROM AC IPORT1= 34 /COMMUNICATIONS PORT 1 INPUT DEVICE CODE RKFL1= IPORT1^10+6000 /SET COMMUNICATIONS PORT 1 INPUT FLAG RKSF1= IPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG RKCC1= IPORT1^10+6002 /CLEAR AC RKIE1= IPORT1^10+6005 /PORT 1 INPUT INTERRUPT ENABLE PER AC[11] RKRB1= IPORT1^10+6006 /READ COMMUNICATIONS PORT 1 INTO AC OPORT1= 35 /COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE RTFL1= OPORT1^10+6000 /SET COMMUNICATIONS PORT 1 OUTPUT FLAG RTSF1= OPORT1^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG RTCF1= OPORT1^10+6002 /NOP RTIE1= OPORT1^10+6005 /PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11] RTLS1= OPORT1^10+6006 /WRITE COMMUNICATIONS PORT 1 FROM AC PCON= 36 /PORT STATUS AND CONTROL DEVICE CODE SMFL= PCON^10+6000 /SET MODEM CHANGE FLAG MFSK= PCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG WCON0= PCON^10+6002 /WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER PSR= PCON^10+6003 /READ PORT STATUS REGISTER PMR= PCON^10+6004 /READ PORT MODEM REGISTER MFIE= PCON^10+6005 /LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11] WCON1= PCON^10+6006 /WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER RACD= PCON^10+6007 /RESET ACTIVE COMMUNICATIONS PORT PER AC[0] / DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS. /046 CJL PORTIN= 30 /COMMUNICATIONS PORT INPUT DEVICE CODE IFL= PORTIN^10+6000 /SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG ISF= PORTIN^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG ICF= PORTIN^10+6002 /NOP (CLEAR THE AC?) INOP1= PORTIN^10+6003 /(NOP?) IRS= PORTIN^10+6004 /READ COMMUNICATIONS PORT RECEIVE BUFFER IIE= PORTIN^10+6005 /COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11] IRB= PORTIN^10+6006 /READ COMMUNICATIONS PORT RECEIVE BUFFER INOP2= PORTIN^10+6007 /(NOP?) PORTOUT=31 /COMMUNICATIONS PORT OUTPUT DEVICE CODE DUMBFL= PORTOUT^10+6000 /SET COMMUNICATIONS PORT DUMMY FLAG DUMBSF= PORTOUT^10+6001 /SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG DUMBCF= PORTOUT^10+6002 /NOP (CLEAR THE AC?) ONOP1= PORTOUT^10+6003 /(NOP?) OPC= PORTOUT^10+6004 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER DUMBIE= PORTOUT^10+6005 /COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11] OLS= PORTOUT^10+6006 /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER ONOP2= PORTOUT^10+6007 /(NOP?) PORTCON=36 /COMMUNICATIONS PORT CONTROL DEVICE CODE MFL= PORTCON^10+6000 /SET MODEM CHANGE FLAG MSF= PORTCON^10+6001 /SKIP ON, CLEAR MODEM CHANGE FLAG MLC= PORTCON^10+6002 /LOAD MODEM CONTROL REGISTER MSB= PORTCON^10+6003 /LOAD BAUD RATE REGISTER MRS= PORTCON^10+6004 /READ MODEM STATUS REGISTER MIE= PORTCON^10+6005 /MODEM CHANGE INTERRUPT ENABLE PER AC[11] MPSCC= PORTCON^10+6006 /ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER / MISCELLANEOUS DEFINITIONS. /014 CJL / STATIC DATE CALCULATIONS. /024 CJL / THESE EQUATIONS CAUSE PRINTABLE TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN / IN OS/8 INTERNAL FORMAT. PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION, / REVISION, REVDATE, AND REVDGRP. REVDATE AND REVDGRP SHOULD BE OBTAINED FROM / THE SYSTEM WHEN RELEASING A NEW VERSION AFTER FIRST CORRECTLY INVOKING THE / SYSTEM DATE COMMAND. / VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)] / REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77] / REVDATE=[THE CONTENTS OF 17666 (DATE WORD)] / REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)] IFNDEF REVDATE <REVDATE=4464> /REVISION DATE (LOCATION 17666) IFNDEF REVDGRP <REVDGRP=0400> /REVISION 8 YEAR DATE GROUP (LOCATION 07777) IFNDEF REVISIO <REVISIO="G&77> /REVISION OF KERMIT-12 IFNDEF VERSION <VERSION=12> /VERSION OF KERMIT-12 DAY= REVDATE&370%10 /REVISION DAY DGROUP= REVDGRP&600%20 /REVISION DATE GROUP (WHICH 8 YEARS) MONTH= REVDATE&7400%400 /REVISION MONTH YEAR= REVDATE&7+DGROUP+106 /REVISION YEAR (SINCE 1900) FIELD PRGFLD%10 /STARTING FIELD /038 CJL *0 /START AT THE BEGINNING /014 CJL INTPC, .-. /PC FROM INTERRUPT (IF ANY) /014 CJL JMP I INTPC /RETURN WITH INTERRUPTS OFF /014 CJL ABFLAG, .-. /FILE ABORT FLAG /044 CJL TABLEJU,.-. /MATCHING VALUE FOR SRCHTABLE ROUTINE /025 CJL IFNZRO .-4 <ERROR .> /014 CJL ODT, ZBLOCK 7-. /RESERVED FOR OS/8 ODT /014 CJL RATE, BRATE /BAUD RATE /050 CJL *10 /GET TO AUTO-INDEX AREA /014 CJL XR0, .-. /AUTO-INDEX ZERO /014 CJL XR1, .-. /AUTO-INDEX ONE /014 CJL DIRXR, PORT /DIRECTORY LOOKUP DEDICATED AUTO-INDEX /028 CJL /INITIALIZED FOR DECMATE I ONCE-ONLY /050 CJL / THE REMAINING LOCATIONS THROUGH 000017 MUST BE USED DIRECTLY ONLY, SO AS TO / NOT CAUSE INADVERTANT AUTO-INDEXING. / COLUMN COUNTER FOR CONSOLE ROUTINES (NEVER USED INDIRECTLY). /043 CJL COLUMN, .-. /CONSOLE OUTPUT COLUMN COUNTER /043 CJL / CONSOLE TERMINAL ECHO SWITCH (NEVER USED INDIRECTLY). /020 CJL ECHOSW, 0 /0=ECHO, 4000=DON'T ECHO /020 CJL / LATEST (NON-CONNECT MODE) CHARACTER (NEVER USED INDIRECTLY). /043 CJL INCHAR, .-. /LATEST INPUT CHARACTER FROM CONSOLE /043 CJL / CURRENT KERMIT MODE (NEVER USED INDIRECTLY). /025 CJL KMODE, .-. /CURRENT MODE OF KERMIT /025 CJL / KERMIT MODE FLAG VALUES. /014 CJL / MLINE= 1 /KERMIT IS ON-LINE MSEND= 2 /KERMIT IS IN SEND MODE MREC= 3 /KERMIT IS IN RECEIVE MODE / LATEST CHARACTER SENT TO OUTPUT FILE (NEVER USED INDIRECTLY). /020 CJL LATEST, .-. /LATEST CHARACTER SENT TO OUTPUT FILE /020 CJL *20 /GET PAST AUTO-INDEX AREA INFLAG, .-. /DECMATE INPUT AVAILABLE FLAG /046 CJL OUTFLAG,.-. /DECMATE OUTPUT AVAILABLE FLAG /046 CJL TEMP, 0 RCHAR, 0 /REMOTE LINE CURRENT INPUT CHAR SCAN1, 0 / SCAN2, 0 / KEYDSP, 0 /DISPATCH ADDRESS FOR KEYWORD MATCH BININP, 0 /BINARY REGISTER FOR DECIMAL INPUT PTABLE, 0 / LPTR, 0 /HOLDS LINE POINTER STATE, 0 /CURRENT STATE RETRY, -RETCNT /PACKET ERROR RETRY COUNTER /031 CJL RTRYC, 0 /USE THIS FOR ACTUAL COUNTER / CURRENT PACKET I/O DATA. /014 CJL PAKPTR, 0 /POINTER TO OUTPUT PACKET POINTER PAKCKS, 0 /HOLDS CURRENT OUTPUT PACKET CHECKSUM TOTAL CURSEQ, 0 /CURRENT SEQ NUMBER QFLAG, 0 /NON-ZERO WHEN NO CONTROL QUOTING / RECEIVE "INIT" REGISTERS. /014 CJL RMAXL, DEFMAXL+40 /MAX LENGTH FOR DATA PACKET (DEFAULT) RTIME, 0 /TIME-OUT VALUE RNPAD, 0 /NUMBER OF PADDING CHARS RPADC, 0 /CHAR USED FOR PADDING REOL, DEFEOL /TERMINATOR CHAR USED FOR END OF PACKET RQCTL, DEFQCTL /CONTROL CHAR PREFIX CHAR RQBIN, 0 /PARITY CHAR PREFIX CHAR (CHARS GT 177) RCHKT, DEFCK /CHECKSUM TYPE (DEFAULT TYPE 1) RREPT, 0 /PREFIX CHAR FOR REPEATED CHARS RCAPAS, 0 /EXTRA CAPABILITY BIT MASK / ZBLOCK 4 /RESERVED FOR EXTRA CAPABILITIES /022 CJL INITEND=. /END OF INIT REGISTERS /022 CJL HNDADR, 0 /FILE DEVICE HANDLER ADDRESS FORCEP, 0 /FLAG FOR FORCED OUTPUT OF PACKET WHEN THERE IS / NO DATA (JUST SOH, LEN, SEQ, AND CHECKSUM) PRSERR, 0 /HOLDS PARSE POSITION FOR REPORTING ERRORS PACK6P, 0 /POINTER TO STORAGE OF 6 BIT CHARS PACK6F, 0 /FLAG FOR WHICH BYTE TO STORE GET6P, 0 /POINTER USED IN THE GET6 ROUTINE GET6F, 0 /FLAG USED IN THE GET6 ROUTINE MOVE4, 0 /COUNTER FOR "MOVE" INIFLG, 0 /INIT DONE FLAG MQ, .-. /"MQ" TEMPORARY REGISTER /032 CJL / FILE NAME PARSE REGISTERS. /014 CJL FNPTR, 0 /POINTER TO WHERE TO PUT A PARSED FILE NAME WILDF, 0 /WILD CARD IN FILE NAME FLAG / FILE INFORMATION. /014 CJL FSBLK, 0 /FILE START BLOCK FLEN, 0 /FILE LENGTH DEVNUM, 0 /PARSED DEVICE NUMBER HERE OFFLG, 0 /OUTPUT FILE OPEN FLAG ODNAME, 0 /POINTER TO USER SPECIFIED DEVICE FOR OUTPUT ODNUMB, 0 /OUTPUT DEVICE NUMBER / PARITY VARIABLES. /014 CJL /MARK, 0200 /SET BIT [8] FOR COMMAND INPUTS /A013 /PARITY,0 /PARITY MASK (0=SPACE, 200=MARK) /AM013 / INTERNAL FILE MODE FLAG. /019 CJL FILMODE,FMODE /ASCII=0177, BINARY=4377 /019 CJL / UPPER-CASE ONLY FLAG. /023 CJL UPONLY, LOWER /0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL / <^C> DISPATCH ADDRESS. /023 CJL UCADDRE,SBOOT /<^C> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL / <^P> DISPATCH ADDRESS. /023 CJL UPADDRE,CHKCLR /<^P> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL / ESCAPE CHARACTER FOR CONNECT MODE. /025 CJL ESCHAR, ESCAPE /ESCAPE CHARACTER FOR CONNECT MODE /025 CJL / FLOW CONTROL FLAG. /026 CJL FLOWFLA,-FLOW /0=NO FLOW CONTROL, 7777=FLOW CONTROL /049 CJL /VIA <^S>/<^Q> / KEYBOARD INPUT ERROR FLAG. /026 CJL KEYERRO,.-. /0=NO ERROR, NON-ZERO=BAD CHARACTER /026 CJL /OR BUFFER OVERRUN / REMOTE LINE INPUT ERROR FLAG. /026 CJL RINERRO,.-. /0=NO ERROR, NON-ZERO=BAD CHARACTER /026 CJL /OR BUFFER OVERRUN / REMOTE LINE OUTPUT FLOW CONTROL WAIT FLAG. /026 CJL REMWAIT,.-. /0=DON'T WAIT, 4000=WAIT FOR <^Q> /026 CJL / REMOTE INPUT WAIT FLAG. /026 CJL / FLAG STATES: / VALUE ACTION / 0000 BUFFER IS LESS THAN 3/4 FULL. INPUT FREELY ALLOWED / WITHOUT FLOW CONTROL RESTRICTIONS. IF BUFFER BECOMES / 3/4 FULL AND FLOW CONTROL IS IN EFFECT THEN CHANGE / STATE TO 0001. / 0001 BUFFER IS NOW 3/4 FULL. OUTPUT <^S> TO REMOTE AND / THEN CHANGE STATE TO 4000. / 4000 WAITING FOR BUFFER TO EMPTY TO LESS THAN 1/4 FULL. IF / FLOW CONTROL IS BEING OBEYED, THEN BUFFER SHOULD NOW / BE EMPTYING. / 7777 BUFFER IS NOW LESS THAN 1/4 FULL. OUTPUT <^Q> TO / REMOTE AND THEN CHANGE STATE TO 0000. RINWAIT,.-. /REMOTE INPUT WAIT FLAG /026 CJL / REMOTE LINE OUTPUT BUFFER POINTERS. /026 CJL REMINSE,.-. /REMOTE OUTPUT INSERTION POINTER /026 CJL REMREMO,.-. /REMOTE OUTPUT REMOVAL POINTER /026 CJL / POINTER FOR THE PACKET INPUT AND OUTPUT ROUTINES SPACK= JMS I . /SEND A PACKET TO REMOTE SPACK0 /PUT IN A POINTER FPACK= JMS I . /FORMAT PACKET FPACK0 /PUT IN THE POINTER RPACK= JMS I . /RECEIVE A PACKET FROM REMOTE ILINK /PUT IN A POINTER / POINTERS FOR OUTPUT ROUTINES PRI8B= JMS I . /PRINT 8 BIT STRING ON TTY PRI8B0 /PUT IN THE POINTER REM8B= JMS I . /SEND 8 BIT STRING DOWN REMOTE LINE REM8B0 /PUT IN THE POINTER / MISC. PACK6= JMS I . /DEFINE CALL TO ROUTINE PACK60 /POINTER TO ROUTINE GET6= JMS I . /DEFINE THE INSTRUCTION GET60 /PUT IN THE POINTER MOVE= JMS I . /DEFINE CALL TO MOVE ROUTINE MOVE0 /POINTER CLEAR= JMS I . /DEFINE CALL FOR "CLEAR" ROUTINE CLEAR0 /POINTER PAGE /START ON NEW PAGE /A014 CJL / KERMIT-12 PROGRAM STARTS HERE. /A014 CJL CLOOP, JMP I (INITIALIZE) /**** INITIALIZED **** CLA CLL /024 CJL JMS I [CRESET] /RESET CONSOLE ROUTINE STUFF DCA ABFLAG /CLEAR ABORT FLAG /044 CJL DCA REMWAIT /CLEAR REMOTE FLOW CONTROL WAIT /049 CJL CLDMZAP,JMS DMINIT /INITIALIZE DECMATE PORT /048 CJL / THE PREVIOUS INSTRUCTION IS FOR DECMATE OPERATION ONLY. THE DEFAULT / INSTRUCTION IS FOR KL8 INTERFACES ONLY. *CLDMZAP /OVERLAY DECMATE CODE /048 CJL CLDMZAP,NOP /DON'T INITIALIZE DECMATE PORT /048 CJL TAD RATE /GET BAUD RATE SETBAUD,MSB /SET REMOTE BAUD RATE /050 CJL / THE PREVIOUS INSTRUCTION IS FOR DECMATE II OPERATION ONLY. /050 CJL *SETBAUD /OVERLAY DECMATE II CODE /050 CJL SETBAUD,NOP /NOT APPLICABLE ON DECMATE I /050 CJL / THE PREVIOUS INSTRUCTION IS FOR DECMATE I OPERATION ONLY. THE DEFAULT / INSTRUCTION IS FOR KL8 INTERFACES ONLY. *SETBAUD /OVERLAY DECMATE I CODE /050 CJL SETBAUD,RSBIOT /SET REMOTE BAUD RATE /050 CJL JMS I [SCRIBE] /DO A /025 CJL CRLF /<CR>, <LF> /025 CJL JMS I [SCRIBE] /GIVE THEM THE /025 CJL PRMTMSG /PROMPT MESSAGE /025 CJL JMS I (LININP) /GET INPUT LINE FROM USER TAD (CMDTBL) /GET ADDRESS OF PARSE TABLE /M014 CJL DCA PTABLE /STORE FOR PARSER TAD (LINBUF) /GET INPUT LINE BUFFER ADDRESS /M014 CJL CLOOP1, JMS I (KEYPRS) /PARSE OFF A KEYWORD JMP CLOOP9 /NO MATCH ON KEYWORD JMP CLOOP /END OF LINE DETECTED DCA LPTR /STORE POINTER TO NEXT POS ON LINE JMS I KEYDSP /DISPATCH TO SERVICE JMP CLOOP7 /ERROR RETURN FROM SERVICE DISPATCH TAD LPTR /RE-GET COMMAND LINE POINTER JMP CLOOP1 /CONTINUE LINE PARSE CLOOP7, SNA /SKIP IF A RETURNING MESSAGE PASSED /029 CJL JMP CLOOP /JUST GO BACK TO COMMAND LOOP /029 CJL DCA RETARG /STORE IN-LINE /029 CJL JMS I [SCRIBE] /CALL MESSAGE PRINT ROUTINE RETARG, .-. /WILL BE PASSED MESSAGE ADDRESS JMP CLOOP /KEEP GOING CLOOP9, JMS I [SCRIBE] /COMPLAIN OF /025 CJL CMERMSG /BAD COMMAND /025 CJL JMP CLOOP /GO AGAIN / ROUTINE TO FORMAT A PACKET OF DATA / CALL: FPACK / DATA ADDRESS (DATA MUST ALREADY BE CONTROL/QUOTED AND MUST / NOT BE LONGER THAN THE LARGEST PACKET) / PACKET TYPE FPACK0, 0 CLA CLL /INSURE CLEAR AC TAD I FPACK0 /GET THE DATA ADDRESS DCA FP1 /STORE IN SOURCE POINTER ISZ FPACK0 /BUMP ARGUMENT POINTER TAD I FPACK0 /NOW GET TYPE DCA I (RSTYP) /STORE ISZ FPACK0 /BUMP ARGUMENT POINTER TAD (RSDTA /GET ADDRESS OF DATA BUFFER DCA FP2 /STORE IN DESTINATION POINTER TAD (40+3 /SET FOR LENGTH COUNTER DCA I (RSLEN) /STORE IN PACKET DCA FP3 /INIT CHECKSUM TAD CURSEQ /GET CURRENT SEQ NUMBER AND [77] /MODULO 64 /014/016 CJL TAD [40] /TAKE CHAR(SEQUENCE NUMBER) /014/016 CJL DCA I (RSSEQ) /PUT INTO PACKET FPACK2, TAD I FP1 /GET A CHAR FROM SOURCE SPA /SKIP IF NOT END JMP FPACK3 /END TAD FP3 /COMBINE WITH CHECKSUM DCA FP3 /AND RETURN TAD I FP1 /GET CHAR BACK AGAIN DCA I FP2 /NOW PUT INTO DESTINATION ISZ I (RSLEN) /BUMP THE LENGTH ISZ FP1 /BUMP THE SOURCE POINTER ISZ FP2 /BUMP THE DESTINATION POINTER JMP FPACK2 /LOOP FPACK3, CLA CLL /CLEAR THE AC TAD FP3 /GET CALCULATED CHECKSUM TAD I (RSLEN) /INCLUDE THE LENGTH TAD I (RSSEQ) /AND THE SEQUENCE TAD I (RSTYP) /AND THE TYPE JMS I [CKSUM] /GET IT CORRECT DCA I FP2 /STORE WITH PACKET ISZ FP2 /BUMP PACKET POINTER TAD REOL /GET ANY END OF LINE TO INCLUDE TAD [-40] /MAKE IT A REAL CHARACTER /014/016 CJL SNA /SKIP IF EOL CHAR REQUIRED JMP FPACK4 /NO EOL CHAR DCA I FP2 /STORE EOL CHAR WITH PACKET ISZ FP2 /BUMP POINTER FPACK4, NL7777 /SET -1 /032 CJL DCA I FP2 /PACKET NOW COMPLETE TAD RETRY /SET UP RE-TRY COUNTER DCA RTRYC ISZ CURSEQ /BUMP SEQUENCE NUMBER FOR NEXT TIME NOP /PROTECT ISZ JMP I FPACK0 /RETURN FP1, 0 /POINTER TO SOURCE DATA FP2, 0 /POINTER TO PACKET BUFFER FP3, 0 /RUNNING CHECKSUM / DECMATE INITIALIZE ROUTINE. /048 CJL DMINIT, .-. /DECMATE PORT INITIALIZE ROUTINE/048 CJL DMI01, TAD DM234/(234) /GET SCD ENABLE VALUE /050 CJL DMI02, WCON0 /WRITE CONTROL REGISTER 0 (1) /050 CJL DMI03, NL0000 /INDICATE PORT 0 (1) /050 CJL DMI04, RACD /RESET THE ACTIVE PORT /050 CJL DMI05, ISZ DMWASTE /WASTE /050 CJL DMI06, JMP DMI05 /SOME TIME /050 CJL DMI07, ISZ DMWASTE /WASTE /050 CJL DMI08, JMP DMI07 /SOME TIME /050 CJL DMI09, RTFL0 /SET PORT 0 (1) OUTPUT FLAG /050 CJL DMI10, TAD DM2516/(2516) /SETUP FOR 8 BITS, NO PARITY /050 CJL DMI11, JMS DMSEND /SEND TO MODE REGISTER 1 /050 CJL DMI12, TAD RATE /GET BAUD RATE /050 CJL DMI13, TAD DM2460/(2460) /ADD ON CLOCK ENABLE VALUES /050 CJL DMI14, JMS DMSEND /SEND TO MODE REGISTER 2 /050 CJL DMI15, TAD DM3425/(3425) /GET ENABLE AND RESET VALUE /050 CJL DMI16, JMS DMSEND /SEND TO COMMAND REGISTER /050 CJL DMI17, RKRB0 /DO A DUMMY READ ON PORT 0 (1) /050 CJL / THE PREVIOUS INSTRUCTIONS ARE FOR DECMATE I OPERATION ONLY. THE DEFAULT / INSTRUCTIONS ARE FOR DECMATE II, ETC. INTERFACES ONLY. *DMI01 /OVERLAY DECMATE I CODE /050 CJL DMI01, ISZ DMWASTE /WASTE /048 CJL DMI02, JMP DMI01 /SOME TIME /048 CJL DMI03, ISZ DMWASTE /WASTE /048 CJL DMI04, JMP DMI03 /SOME TIME /048 CJL DMI05, ISF /SKIP ON AND CLEAR PORT FLAG /048 CJL DM50, 50/NOP /JUST IN CASE /048 CJL DMI07, IRB /READ THE PORT BUFFER /048 CJL DMI08, CLA /CLEAN UP /048 CJL DMI09, TAD DM50/(50) /GET OUTPUT INTERRUPT VALUE /048 CJL DMI10, MPSCC /CLEAR OUTPUT INTERRUPT /048 CJL DMI11, TAD (60-50) /GET ERROR RESET VALUE /048 CJL DMI12, MPSCC /CLEAR OVERRUN ERRORS /048 CJL DMI13, TAD (70-60) /SET END OF INTERRUPT VALUE /048 CJL DMI14, MPSCC /CLEAR THE INTERRUPT /048 CJL DMI15, DCA OUTFLAG /INDICATE OUTPUT IS AVAILABLE /048 CJL DMI16, DCA INFLAG /CLEAR INPUT AVAILABLE FLAG /048 CJL DMI17, JMP I DMINIT /RETURN /048 CJL / DECMATE I INITIALIZE CODE CONTINUES HERE. /050 CJL DMISET, RTFL0 /SET PORT 0 (1) OUTPUT FLAG /050 CJL CLA /CLEAN UP /050 CJL JMP I DMINIT /RETURN /050 CJL DMSEND, .-. /DECMATE I SEND ROUTINE /050 CJL DMISKP, RTSF0 /SKIP ON PORT 0 (1) OUTPUT FLAG /050 CJL JMP DMISKP /WAIT FOR IT /050 CJL DMIOUT, RTLS0 /SEND TO PORT 0 (1) REGISTER /050 CJL CLA /CLEAN UP /050 CJL JMP I DMSEND /RETURN /050 CJL DMWASTE,.-. /TIMER TEMPORARY /050 CJL DM234, 234 /CONSTANT 0234 /050 CJL DM2460, 2460 /CONSTANT 2460 /050 CJL DM2516, 2516 /CONSTANT 2516 /050 CJL DM3425, 3425 /CONSTANT 3425 /050 CJL PAGE / ROUTINE TO SEND THE FORMATTED PACKET /027 CJL / ARGUMENTS: CALL+1 NON-ZERO = AWAIT RESPONSE / ZERO = DO NOT AWAIT RESPONSE / CALL + 2 DISPATCH TABLE-2 /027 CJL SPACK0, 0 REM8B; RSBUF /SEND PACKET JUST COMPLETED TAD I SPACK0 /DO WE GET A RESPONSE? ISZ SPACK0 /BUMP POINTER PAST ARGUMENT SNA CLA /SKIP IF YES JMP I SPACK0 /ALL DONE HERE RPACK /GET PACKET BACK FROM REMOTE TAD I SPACK0 /DID WE WANT A DISPATCH? ISZ SPACK0 /BUMP PAST ARGUMENT SNA /SKIP IF YES JMP I SPACK0 /EXIT IF NO DCA SPACARG /STORE IN-LINE /031 CJL JMS DISPATCH /CALL DISPATCH ROUTINE /031 CJL SPACARG,.-. /WILL BE DISPATCH TABLE-2 /031 CJL JMP I SPACK0 /NOT FOUND, GOTTA RETURN / CONSOLE RESET ROUTINE. /024 CJL CRESET, .-. /CONSOLE RESET ROUTINE CLA CLL /CLEAN UP DCA ECHOSW /ENABLE OUTPUT ECHO TAD (UPCPRT) /ALLOW THEM TO DCA UCADDRESS /RESTART VIA <^C> TAD [CLOOP] /ALLOW THEM TO DCA UPADDRESS /RESTART VIA <^P> JMP I CRESET /RETURN / ALTERNATE CONSOLE RESET ROUTINE. /025 CJL CREST2, .-. /ALTERNATE CONSOLE RESET ROUTINE JMS CRESET /CLEAR AC AND ENABLE OUTPUT ECHO TAD (KCCZAP) /RENDER <^C> DCA UCADDRESS /TOTALLY HARMLESS TAD (CHKCLR) /MAKE <^P> PRINT "^P" DCA UPADDRESS /AND THEN GO AWAY JMP I CREST2 /RETURN / ROUTINE TO CLEAR WORDS OF MEMORY / ENTER WITH: AC = MINUS NUMBER OF WORDS TO CLEAR / MQ = ADDRESS OF WHERE TO START THE CLEAR CLEAR0, 0 DCA CLEAR5 /STORE COUNT OF WORDS TAD MQ /GET ADDRESS TO CLEAR /032 CJL DCA CLEAR6 /STORE IN POINTER DCA I CLEAR6 /ZERO A WORD ISZ CLEAR6 /BUMP POINTER ISZ CLEAR5 /BUMP COUNTER JMP .-3 /LOOP JMP I CLEAR0 /DONE CLEAR5, 0 /TEMP FOR "CLEAR" ROUTINE CLEAR6, 0 /TEMP FOR "CLEAR" ROUTINE / ROUTINE TO DISPATCH TO ROUTINE BASED ON VALUE OF "RRTYP". /027 CJL / CALLING SEQUENCE: / CLA /AC MUST BE CLEAR / JMS DISPATCH /CALL ROUTINE / ADDRESS-2 /DISPATCH TABLE ADDRESS-2 / NO MATCH RETURN /RETURNS HERE WITH CLEAR AC IF NO MATCH / CALL WILL DISPATCH TO THE CORRESPONDING ROUTINE ON A MATCH IN THE SPECIFIED / TABLE (WHICH ENDS WITH ZERO) WITH A CLEAR AC. DISPATC,.-. /MATCH "RRTYP" AND DISPATCH ROUTINE CLA /JUST IN CASE /031 CJL TAD I DISPATCH /GET PASSED ARGUMENT ISZ DISPATCH /BUMP PAST THE ARGUMENT DCA DISPA2 /SAVE PASSED ARGUMENT IN-LINE TAD I (RRTYP) /GET VALUE OF "RRTYP" CIA /INVERT FOR TESTING JMS I [SRCHTABLE] /CALL TABLE SEARCH ROUTINE DISPA2, .-. /WILL BE TABLE ADDRESS-2 SNA CLA /SKIP IF MATCH FOUND JMP I DISPATCH /RETURN ON NO MATCH JMP I TABLEJUMP /DISPATCH TO MATCHING ADDRESS / ROUTINE TO PUT CHARS INTO A BUFFER TO GET READY TO FORMAT A PACKET. / ENTER WITH CHAR IN THE AC; IF THE CHAR NEEDS CONTROL QUOTING, IT WILL BE ADDED / EXIT + 2 IF EVERYTHING IS OK / EXIT + 1 IF BUFFER IS FULL OPBUF, 0 /PUT CHARACTERS INTO BUFFER FOR PACKET ROUTINE JMS I (OPRE) /CHECK FOR PREFIX JMP OPBUF1 /NO PREFIX DCA OP1 /SAVE CONVERTED CHAR TAD RQCTL /GET QUOTE CHAR TO USE DCA I OP2 /PUT RETURNED PREFIX INTO BUFFER ISZ OP2 /BUMP POINTER TAD OP1 /GET BACK CONVERTED CHAR OPBUF1, DCA I OP2 /PUT INTO BUFFER ISZ OP2 /BUMP POINTER NL7777 /SET -1 /032 CJL DCA I OP2 /ALWAYS TERMINATE BUFFER TAD RMAXL /GET MAX BUFFER LENGTH TAD (-40+HOLDBF-4 / CIA TAD OP2 /COMPARE WITH WHAT WE HAVE SPA CLA /SKIP IF NO ROOM JMP OPBUF2 /HAVE ROOM JMS INIOPB /RESET BUFFER JMP I OPBUF /TAKE RETURN + 1 OPBUF2, ISZ OPBUF /BUMP RETURN FOR BUFFER NOT FULL JMP I OPBUF /DONE OP1, 0 /TEMP LOCATION OP2, HOLDBF /POINTER FOR HOLD BUFFER / ROUTINE TO RE-SET THE HOLD BUFFER. INIOPB, 0 TAD (HOLDBF /RE-SET BUFFER POINTER DCA OP2 JMP I INIOPB / ROUTINE TO CALCULATE A 1 BYTE CHECKSUM. CKSUM, 0 DCA CKSUM1 /STORE TEMP TAD CKSUM1 /GET BACK RTR;RTR;RTR /GET TWO HIGHEST INTO TWO LOWEST /032 CJL AND (3 /KEEP ONLY BITS 0-1 TAD CKSUM1 /GET ORIGINAL AND [77] /KEEP ONLY BITS 0-5 /016 CJL TAD [40] /MAKE A CHAR(CHECKSUM) JMP I CKSUM /DONE, RETURN IN AC CKSUM1, 0 /TEMP FOR "CKSUM" PAGE / ROUTINE TO INPUT CHARS FROM REMOTE UNTIL A "SOH" CHAR IS FOUND. GETSOH, 0 JMS COMIN /GET A CHARACTER FROM THE REMOTE LINE /046 CJL JMP I GETSOH /TIME-OUT AND [177] /IGNORE PARITY BIT /034 CJL TAD (-CNTRLA) /COMPARE WITH "SOH" /034 CJL SZA CLA /SKIP IF SAME JMP GETSOH+1 /LOOP TILL WE GET ONE ISZ GETSOH /BUMP FOR GOOD RETURN JMP I GETSOH /GOT ONE, DONE / ROUTINE TO GET A CHAR FROM THE REMOTE LINE AND UPDATE CHECKSUM. GETIR, 0 JMS COMIN /GET A CHARACTER FROM THE REMOTE LINE /046 CJL JMP I GETIR /TIME-OUT RETURN DCA GETIR1 /STORE TEMP TAD GETIR1 /GET CHAR BACK TAD I (ILINK9) /ADD CHECKSUM DCA I (ILINK9) /RETURN UPDATED CHECKSUM TAD GETIR1 /RE-GET CURRENT INPUT CHAR TAD [-15] /CHECK FOR A RETURN SNA CLA /SKIP IF NOT A RETURN JMP I GETIR /WAS A RETURN, TAKE EXIT + 1 TAD GETIR1 /RE-GET CHAR FOR RETURN ISZ GETIR /BUMP FOR GOOD RETURN JMP I GETIR /AND RETURN IN THE AC GETIR1, 0 /TEMP LOCAL TO "GETIR" / REMOTE COMMUNICATIONS ROUTINES FOR NON-CONNECT USAGE. /046 CJL / REMOTE INPUT ROUTINE. /046 CJL COMIN, .-. /REMOTE INPUT ROUTINE /046 CJL CLA /CLEAN UP /046 CJL TAD [-15] /SETUP THE /049 CJL DCA TIMEOUT /TIME-OUT FACTOR /046 CJL INLUP, TAD INFLAG /IS INPUT AVAILABLE? /046 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *INLUP /OVERLAY DECMATE II CODE /049 CJL INLUP, SKP /WE'RE NOT A DECMATE II /049 CJL SNA CLA /SKIP IF INPUT AVAILABLE (ON DECMATE II)/049 CJL INSKIP, JMP NOTYET /JUMP IF NOT /049 CJL INLUP1, DCA INFLAG /CLEAR INPUT AVAILABILITY FLAG /049 CJL INREAD, IRB /GET THE CHARACTER /049 CJL / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS / ARE FOR KL8 INTERFACES. *INSKIP /OVERLAY DECMATE II CODE /049 CJL INSKIP, RKSFIOT /INPUT FLAG UP? /049 CJL INLUP1, JMP NOTYET /NO, CHECK FOR ABORT, ETC. /049 CJL INREAD, RKRBIOT /YES, READ IN THE CHARACTER /049 CJL AND [177] /JUST SEVEN-BIT /046 CJL DCA RCHAR /SAVE THE CHARACTER /046 CJL TAD RCHAR /GET IT BACK /046 CJL ISZ COMIN /BUMP TO GOOD RETURN /046 CJL JMP I COMIN /RETURN /046 CJL / COMES HERE IF INPUT NOT AVAILABLE. NOTYET, JMS I (CTLCTST) /CHECK FOR <^C>, ETC. /044 CJL TAD [-CNTRLZ] /COMPARE POSSIBLE CHARACTER TO <^Z> /044 CJL SZA /SKIP IF IT ALREADY MATCHES /044 CJL TAD [-CNTRLX+CNTRLZ]/ELSE COMPARE TO <^X> /044 CJL SNA CLA /SKIP IF NEITHER ABORT CHARACTER /049 CJL ISZ ABFLAG /SET ABORT FLAG /049 CJL SKP /SKIP IF NOT TOO MANY TIMES /049 CJL JMP .-2 /ENSURE FLAG SETTING /049 CJL INSTATU,JMS UPSTATUS /UPDATE THE PORT STATUS /049 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *INSTATUS /OVERLAY DECMATE II CODE /049 CJL INSTATU,NOP /WE'RE NOT A DECMATE II /049 CJL ISZ WASTIME /WASTE SOME TIME /046 CJL JMP INLUP /KEEP TRYING /046 CJL ISZ TIMEOUT /WAITING TOO LONG? /046 CJL JMP INLUP /NO, KEEP TRYING /046 CJL JMP I COMIN /YES, TAKE ERROR RETURN /046 CJL / FLOW-CONTROL STATUS ROUTINE. /049 CJL GETFLOW,.-. /GET FLOW-CONTROL STATUS GETFL1, JMS UPSTATUS /UPDATE THE CURRENT STATUS / THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *GETFL1 /OVERLAY DECMATE II CODE GETFL1, NOP /WE'RE NOT A DECMATE II JMS I (RINGET) /GET REMOTE CHARACTER (IF ANY) CLA /THROW IT AWAY TAD REMWAIT /GET REMOTE FLOW STATUS JMP I GETFLOW /RETURN / REMOTE OUTPUT ROUTINE. /046 CJL COMOUT, .-. /REMOTE OUTPUT ROUTINE /046 CJL DCA OUTEMP /SAVE PASSED VALUE /046 CJL CMRESET,TAD [-15] /SETUP THE /049 CJL DCA OTIME /TIME-OUT COUNTER /049 CJL COMWAIT,JMS GETFLOW /GET REMOTE WAIT STATUS /049 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR / KL8 INTERFACES. *COMWAIT /OVERLAY DECMATE CODE /049 CJL COMWAIT,NL7777 /SETUP FOR FLOW CONTROL FLAG LOAD /049 CJL AND FLOWFLAG /SHOULD WE WAIT FOR REMOTE FLOW CONTROL?/049 CJL SNA CLA /SKIP IF SO /049 CJL JMP NOWAIT /JUMP IF NOT /049 CJL FLOWAIT,JMS GETFLOW /GET REMOTE WAIT STATUS /049 CJL SZA CLA /SKIP IF NOT WAITING /049 CJL JMP FLOWAIT /JUMP IF STILL WAITING /049 CJL NOWAIT, TAD OUTFLAG /CHECK IF OUTPUT IS AVAILABLE /049 CJL CMOUT1, SNA CLA /SKIP IF SO /049 CJL CMOUT2, JMP OWAIT /JUMP IF NOT /049 CJL DM1AND, DCA OUTFLAG /CLEAR OUTPUT AVAILABILITY FLAG /049 CJL CMOUT3, TAD OUTEMP /GET THE PASSED VALUE /049 CJL CMOUT4, OLS /OUTPUT IT /049 CJL / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS / ARE FOR KL8 INTERFACES. *NOWAIT /OVERLAY DECMATE II CODE /049 CJL NOWAIT, RTSFIOT /OUTPUT FLAG UP? /049 CJL CMOUT1, JMP OWAIT /NO, WAIT FOR IT THERE /049 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *CMOUT1 /OVERLAY DECMATE I CODE /049 CJL CMOUT1, JMP COMWAIT /NO, WAIT FOR IT /049 CJL CMOUT2, TAD OUTEMP /YES, GET PASSED VALUE /049 CJL DM1AND, AND [377] /ENSURE EIGHT BITS (FOR DECMATE I) /049 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *DM1AND /OVERLAY DECMATE I CODE /049 CJL DM1AND, SKP /WE'RE NOT A DECMATE I /049 CJL CMOUT3, TAD [400] /FORCE OUTPUT WRITE FOR DECMATE I /049 CJL CMOUT4, RTLSIOT /OUTPUT THE CHARACTER /049 CJL CLA /CLEAN UP /049 CJL JMP I COMOUT /RETURN /049 CJL / COMES HERE IF OUTPUT NOT READY. /049 CJL OWAIT, ISZ OWASTE /WASTE SOME TIME /049 CJL JMP COMWAIT /KEEP TRYING /049 CJL ISZ OTIME /WAITING TOO LONG? /049 CJL JMP COMWAIT /NO, KEEP TRYING /049 CJL JMS I (DMINIT) /YES, RESET EVERYTHING /049 CJL JMP CMRESET /TRY, TRY AGAIN /049 CJL / DECMATE II, ETC. STATUS UPDATE ROUTINE. /046 CJL UPSTATU,.-. /UPDATE THE STATUS ROUTINE /046 CJL ISF /COMMUNICATIONS PORT FLAG UP? /046 CJL JMP I UPSTATUS /NO, RETURN /046 CJL NL4000 /SETUP READ OF REGISTER ZERO /046 CJL MPSCC /TELL THE MPSCC CHIP /046 CJL CLA /CLEAN UP /046 CJL MPSCC /READ REGISTER ZERO NOW /046 CJL AND (5) /JUST INPUT AND OUTPUT BITS /046 CJL CLL RAR /MOVE INPUT TO LINK /046 CJL SNA CLA /SKIP IF OUTPUT INTERRUPT /046 CJL JMP INCHK /JUMP IF NOT /046 CJL TAD (050) /GET OUTPUT CLEAR VALUE /046 CJL MPSCC /CLEAR THE OUTPUT INTERRUPT /046 CJL DCA OUTFLAG /INDICATE OUTPUT AVAILABLE NOW /046 CJL INCHK, CLA RAL /GET RECEIVE STATUS /046 CJL SZA /SKIP IF INPUT NOT AVAILABLE RIGHT NOW /046 CJL DCA INFLAG /INDICATE NEW INPUT STATUS /046 CJL CLA /CLEAN UP EITHER WAY /046 CJL TAD (070) /GET END OF INTERRUPT VALUE /046 CJL MPSCC /CLEAR THE INTERRUPT /046 CJL CLA /CLEAN UP /046 CJL JMP I UPSTATUS /RETURN /046 CJL AND377= AND [377] /INSTRUCTION CONSTANT /049 CJL OUTEMP= COMIN /OUTPUT ROUTINE TEMPORARY /049 CJL TIMEOUT=GETFLOW /TIME-OUT TEMPORARY /049 CJL WASTIME=COMOUT /TIME-OUT TEMPORARY /049 CJL OTIME, .-. /TIME-OUT TEMPORARY /049 CJL OWASTE, .-. /TIME-OUT TEMPORARY /049 CJL PAGE / HOLD BUFFER FOR CHAR OUTPUT DECIMAL HOLDBF, ZBLOCK 92 OCTAL / ROUTINE TO CHECK FOR CONTROL PREFIX. / ENTER WITH CHAR TO CHECK IN THE AC. / EXIT + 1 WITH CHAR IN THE AC IF NO PREFIX QUOTING. / EXIT + 2 WITH PROPER CHAR IN THE AC AND QUOTING IS REQUIRED. OPRE, 0 /CHECK FOR CONTROL PREFIX ROUTINE DCA PRETEMP /SAVE THE CHARACTER /032 CJL TAD QFLAG /CHECK FOR IN CTRL QUOTE MODE SZA CLA /SKIP IF YES JMP OPRE1 /NO QUOTE PREFIX TAD PRETEMP /GET THE CHARACTER /032 CJL AND [7740] /QUICK CHECK FOR <40 /014/016 CJL SNA CLA /SKIP IF NOT CONTROL JMP OPRE2 /PREFIX QUOTE TAD PRETEMP /GET THE CHARACTER /032 CJL TAD (-177 /CHECK FOR "DELETE" SNA CLA /SKIP IF NOT JMP OPRE2 /PREFIX QUOTE TAD PRETEMP /GET THE CHARACTER /032 CJL CIA /NEGATE FOR COMPARE TAD RQCTL /SEE IF SAME AS QUOTE CHAR SZA CLA /SKIP IF PREFIX QUOTE JMP OPRE1 /NO PREFIX QUOTE TAD RQCTL /PREFIX WITH PREFIX JMP OPRE3 /PREFIX WITH THE PREFIX OPRE1, TAD PRETEMP /GET THE CHARACTER /032 CJL JMP I OPRE /DONE OPRE2, TAD PRETEMP /GET THE CHARACTER /032 CJL TAD [100] /MAKE IT PRINTABLE /016 CJL AND [177] /IN CASE IT WAS 177 /014/016 CJL OPRE3, ISZ OPRE /BUMP FOR PREFIX RETURN JMP I OPRE /DONE PRETEMP,.-. /PREFIX TEMPORARY /032 CJL PAGE /014 CJL / ROUTINE TO SCAN A TEXT LINE FOR KEYWORD DELIMITERS. / THIS ROUTINE EXPECTS THE AC TO POINT TO A TEXT LINE TO SCAN AND FINDS THE / FIRST NON-SPACE, NON-END OF LINE CHAR IN THE LINE AND SETS "SCAN1" TO POINT TO / IT. NEXT WE FIND THE LAST CHAR IN THE LINE THAT IS A NON-SPACE, NON-END OF / LINE AND STORE A POINTER TO IT IN "SCAN2". KEYWORDS ARE DELIMITED BY A / BEGINNING OF LINE OR SPACE AT THE BEGINNING AND AN END OF LINE OR A SPACE AT / THE END. / ENTER: AC = POINTER TO COMMAND LINE / EXIT: (SUCCESS) SCAN1 = POINTER TO FIRST CHAR OF KEYWORD. / SCAN2 = POINTER TO LAST CHAR OF KEYWORD. / RETURN = RETURN + 2 (NO WORDS LEFT IN LINE). / EXIT: (FAIL) RETURN = RETURN + 1. SCNEL, 0 /SCAN ROUTINE JMS I [NOSP] /FIND FIRST NON-SPACE JMP I SCNEL /END OF LINE RETURN DCA SCAN1 /RETURN SCAN LINE POINTER TAD SCAN1 /RE-GET SCAN LINE POINTER JMS I [SP] /FIND FIRST SPACE OR EOL NOP /RETURN HERE ON EOL TAD (-1 /BACK UP TO PREVIOUS CHAR DCA SCAN2 /SET END ELEMENT POINTER ISZ SCNEL /TAKE SUCCESS RETURN JMP I SCNEL /DONE / ROUTINE TO SCAN THRU A TEXT LINE LOOKING FOR THE NEXT SPACE. / ENTER ROUTINE WITH THE LINE POINTER IN THE AC. / EXIT: RETURN + 2 WITH AC = POINTER TO SPACE. / RETURN + 1 WITH AC = POINTER TO END OF LINE. SP, 0 /CHECK FOR A <SPACE> ROUTINE DCA SCANTP /USE A TEMP POINTER SKP /SKIP INTO LOOP BELOW SP1, ISZ SCANTP /BUMP LINE POINTER TAD I SCANTP /GET A CHAR SPA /SKIP IF NOT END OF LINE JMP SP3 /GOT AN END OF LINE TAD [-" !200] /COMPARE WITH <SP> /034 CJL SZA CLA /SKIP IF IS A SPACE JMP SP1 /LOOP TILL SPACE OR EOL ISZ SP /BUMP RETURN FOR SPACE FOUND SP3, CLA CLL /INSURE A CLEAR AC TAD SCANTP /GET POINTER VALUE JMP I SP /RETURN IN AC / ROUTINE TO SCAN THRU A TEXT LINE FOR THE FIRST NON-SPACE. / ENTER ROUTINE WITH POINTER TO THE LINE IN THE AC. / EXIT: RETURN + 2 WITH AC = POINTER TO NON-SPACE. / RETURN + 1 WITH AC = POINTER TO END OF LINE. NOSP, 0 /FIND A NON-<SPACE> ROUTINE DCA SCANTP /USE A TEMP POINTER SKP /SKIP INTO LOOP BELOW NOSP1, ISZ SCANTP /BUMP THE LINE POINTER TAD I SCANTP /GET A CHAR FROM THE LINE SPA /SKIP IF NOT EOL JMP NOSP3 /EXIT IF EOL TAD [-" !200] /COMPARE WITH <SP> /034 CJL SNA CLA /SKIP IF NOT SPACE JMP NOSP1 /LOOP TILL SPACE OR EOL ISZ NOSP /BUMP RETURN FOR SPACE FOUND NOSP3, CLA CLL /INSURE CLEAR AC TAD SCANTP /GET POINTER JMP I NOSP /RETURN IN AC / ROUTINE TO FIND AN END CHAR IN A STRING. / ENTER ROUTINE WITH POINTER TO THE STRING IN THE AC. / EXIT WITH THE POINTER TO THE FIRST MINUS CHAR IN THE AC. FNDEND, 0 /FIND END CHAR ROUTINE DCA SCANTP /PUT POINTER IN SCANTP FEND1, TAD I SCANTP /GET A CHAR FROM THE STRING SPA CLA /SKIP IF NOT END JMP FEND2 /EXIT IF END OF STRING ISZ SCANTP /BUMP THE POINTER JMP FEND1 /LOOP TILL NON-END OF STRING FEND2, TAD SCANTP /GET POINTER TO NON-END OF STRING JMP I FNDEND /EXIT WITH POINTER IN AC SCANTP, 0 /USED IN THE SCAN ROUTINES "SP", "NOSP", "FNDNUL" / ROUTINE TO LOOKUP THE KEY WORD POINTED TO BY THE AC IN THE /014 CJL / TABLE POINTED TO BY PTABLE. / RETURN + 1 IF NO MATCH IS FOUND WITH AC = ENTRY VALUE. / RETURN + 2 IF NO KEYWORD IS FOUND (EOL DETECTED). / RETURN + 3 IF MATCH IS FOUND WITH THE NEXT PARSE POSITION IN THE LINE IN / THE AC AND THE DISPATCH ADDRESS FROM THE TABLE IN "KEYDSP". KEYPRS, .-. /KEYWORD PARSE ROUTINE DCA LOOK3 /SAVE IN CASE OF FAIL TAD LOOK3 /RE-GET / AND (137) /MAKE CHARACTER UPPER-CASE, NO PARITY /MD013 JMS SCNEL /TRY TO SCAN OFF A KEYWORD JMP KP45 /END OF LINE ENCOUNTERED TAD PTABLE /GET ADDRESS OF TABLE DCA LOOK2 /STORE IN LOCAL POINTER KP10, TAD SCAN1 /GET ADDRESS OF SCAN ELEMENT DCA LOOK1 /INTO LOCAL POINTER KP20, TAD I LOOK1 /GET A CHARACTER FROM THE SCAN ELEMENT CIA /NEGATE FOR COMPARE TAD I LOOK2 /GET A CHAR FROM THE TABLE ELEMENT SZA CLA /SKIP IF MATCH JMP KP90 /NO MATCH, SET TO LOOK AT NEXT TABLE ENTRY TAD LOOK1 /CHECK IF ALL ENTERED CHARS MATCH CIA /NEGATE TO COMPARE TAD SCAN2 /HAVE WE MATCHED TO THE TERMINATOR? SNA CLA /SKIP IF NO JMP KP40 /YES, GOT ENOUGH TO MATCH ISZ LOOK1 /MORE TO MATCH, BUMP SCAN ELEMENT POINTER ISZ LOOK2 /BUMP TABLE ELEMENT POINTER JMP KP20 /CONTINUE MATCH LOOP KP40, TAD LOOK2 /GET CURRENT TABLE POINTER JMS FNDEND /FIND A NULL MARK IAC /BUMP BY 1 DCA LOOK1 /STORE IN A POINTER TAD I LOOK1 /GET DISPATCH ADDRESS DCA KEYDSP /PUT INTO DISPATCH ADDRESS ISZ KEYPRS /BUMP RETURN ISZ KEYPRS /BUMP AGAIN CLA CLL IAC /AC = 1 TAD SCAN2 /GET POINTER TO END OF CURRENT KEY JMP I KEYPRS /RETURN / END OF LINE ENCOUNTERED ON PARSE. KP45, ISZ KEYPRS /BUMP RETURN ONCE FOR EOL / NO MATCHES IN THE TABLE HERE. KP50, TAD LOOK3 /GET ORIGINAL AC JMP I KEYPRS /RETURN / FAILURE ON CURRENT TABLE ENTRY, SET FOR NEXT ENTRY (IF THERE IS ONE) AND TRY / AGAIN. KP90, TAD LOOK2 /GET TABLE POINTER JMS FNDEND /FIND NEXT TABLE ENTRY IAC;IAC /NEXT ENTRY IS 2 PAST THE NULL DCA LOOK2 /RE-SET LOCAL TABLE POINTER TAD I LOOK2 /CHECK END OF TABLE SNA CLA /SKIP IF NOT END OF THE TABLE JMP KP50 /TAKE NOT FOUND EXIT JMP KP10 /TRY MATCH ON THIS ENTRY LOOK1, .-. /TEMPORARY FOR KEYPRS /014 CJL LOOK2, .-. /TEMPORARY FOR KEYPRS /014 CJL LOOK3, .-. /TEMPORARY FOR KEYPRS /014 CJL / ROUTINE TO MOVE WORDS OF MEMORY. /014 CJL / CALLING SEQUENCE: / TAD (DESTINATION) /GET DESTINATION ADDRESS / DCA MQ /INTO MQ /032 CJL / TAD (-COUNT) /GET -NUMBER OF WORDS TO MOVE / DCA MOVE4 /SETUP MOVE COUNTER / TAD (SOURCE) /GET SOURCE ADDRESS / JMS I (MOVE0) /CALL MOVE ROUTINE / RETURN /RETURNS HERE MOVE0, .-. /MOVE ROUTINE /014 CJL DCA MOVE5 /STORE SOURCE ADDRESS IN LOCAL POINTER TAD MQ /GET DESTINATION ADDRESS /032 CJL DCA MOVE6 /STORE IN LOCAL POINTER MOVE1, TAD I MOVE5 /GET A WORD FROM THE SOURCE DCA I MOVE6 /MOVE TO DESTINATION ISZ MOVE5 /BUMP SOURCE POINTER ISZ MOVE6 /BUMP DESTINATION COUNTER ISZ MOVE4 /BUMP COUNTER JMP MOVE1 /LOOP JMP I MOVE0 /DONE MOVE5, .-. /SOURCE POINTER FOR "MOVE" MOVE6, .-. /DESTINATION POINTER FOR "MOVE" PAGE /014 CJL / ROUTINE TO PARSE OFF A DEVICE NAME FROM THE COMMAND LINE. /O14 CJL / CALLING SEQUENCE: / TAD (POINTER) /AC CONTAINS POINTER TO COMMAND LINE / JMS I [DPARS] /CALL ROUTINE / ERROR RETURN /AC UNCHANGED / GOOD RETURN /AC NOW POINTS TO REST OF LINE / DEVNUM= DEVICE NUMBER TO USE. / ":" IS THE FIFTH CHARACTER IF NOT USING DEFAULT DEVICE. DPARS, .-. /DEVICE PARSE ROUTINE /014 CJL DCA DPAR10 /SAVE INITIAL POINTER TO LINE TAD DPAR10 /GET POINTER JMS I [NOSP] /GET PAST ANY LEADING SPACES JMP DFDEV /GOT END OF LINE, USE DEFAULT DEVICE DCA DPAR11 /SAVE POINTER TO LINE DCA DEVNAME /INITIALIZE THE DEVICE NAME /014 CJL DCA DEVNAME+1 /FOR "INQUIRE" FUNCTION /014 CJL TAD (DEVNAM) /GET ADDRESS OF WHERE TO PUT DEVICE NAME/014 CJL DCA PACK6P /STORE IN PACK6 POINTER DCA PACK6F /INITIALIZE PACK6 FLAG FOR LOW BYTE /014 CJL TAD (-4) /SET UP A COUNTER /014 CJL DCA DPAR13 /FOR NO MORE THAN 4 CHARS DPAR1, TAD I DPAR11 /GET A CHAR FROM THE LINE SNA /SKIP IF NOT <EOL> /014 CJL JMP DFDEV /GOT AN <EOL>, USE DEFAULT DEVICE /014 CJL TAD (-":!200) /CHECK FOR ":" /034 CJL SNA CLA /SKIP IF NOT END OF DEVICE NAME JMP DPAR2 /DEVICE NAME SET UP TAD I DPAR11 /RE-GET CHAR ISZ DPAR11 /BUMP LINE POINTER PACK6 /PACK SIX-BIT /014 CJL ISZ DPAR13 /BUMP CHARACTER COUNTER /014 CJL JMP DPAR1 /CAN CONTINUE TAD I DPAR11 /GET CHARACTER AFTER THE FOURTH /014 CJL TAD (-":!200) /CHECK FOR ":" /034 CJL SZA CLA /SKIP IF YES, ALL IS OK JMP DFDEV /USE THE DEFAULT DEVICE DPAR2, ISZ DPAR11 /BUMP POINTER PAST ":" TAD (DEVNAM) /GET PARSED DEVICE NAME ADDRESS /014 CJL JMP DPAR4 /DO AN OS/8 "INQUIRE" DFDEV, CLA CLL /CLEAN UP /019 CJL TAD DPAR10 /GET ORIGINAL AC FOR DCA DPAR11 /RETURN POINTER DPAR4, JMS DVNUM /GET DEVICE NUMBER JMP DPAR8 /DEVICE NAME ERROR DCA DEVNUM /RETURN FOR CALLING PROGRAM TAD DPAR11 /GET CURRENT POINTER ISZ DPARS /BUMP RETURN JMP I DPARS /RETURN /014 CJL DPAR8, CLA CLL /INSURE CLEAR AC TAD DPAR10 /GET ORIGINAL AC JMP I DPARS /TAKE ERROR EXIT DPAR10, .-. /TEMPORARY FOR DPARS /014 CJL DPAR11, .-. /TEMPORARY FOR DPARS /014 CJL DPAR13, .-. /TEMPORARY FOR DPARS /014 CJL DEFDEV, DEVICE DSK /DEFAULT DEVICE DEVNAM, FILENAM ZZZZZZ.ZZ /DEFAULT FILENAME /014 CJL / ROUTINE TO RETURN A DEVICE NUMBER FOR A DEVICE NAME. /014 CJL / CALLING SEQUENCE: / TAD (ADDRESS) /AC=ADDRESS OF DEVICE NAME / /*OR* 0000 IF "DSK:" IS TO BE USED / ERROR RETURN /INVALID DEVICE / GOOD RETURN /AC=DEVICE NUMBER DVNUM, .-. /DEVICE NUMBER ROUTINE /014 CJL SNA /SKIP IF DEVICE NAME SPECIFIED TAD (DEFDEV) /ELSE USE DEFAULT /014 CJL DCA DVNUM9 /SAVE IN LOCAL POINTER TAD I DVNUM9 /GET FIRST TWO CHARACTERS OF NAME /014 CJL DCA DVNUM5 /PUT INTO CALL ISZ DVNUM9 /BUMP POINTER TAD I DVNUM9 /GET LAST TWO CHARACTERS OF NAME /014 CJL DCA DVNUM5+1 /PUT INTO CALL CIF USRFLD /GOTO USR FIELD /020 CJL JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL INQUIRE /INQUIRE ABOUT HANDLER /020 CJL DVNUM5, .-. /FIRST TWO BYTES OF DEVICE NAME /014 CJL .-. /LAST TWO BYTES OF DEVICE NAME /014 CJL 0 /ENTRY POINT OF HANDLER RETURNED HERE JMP I DVNUM /ERROR, TAKE ERROR EXIT TAD DVNUM5+1 /DEVICE NUMBER ISZ DVNUM /BUMP RETURN FOR NO ERROR JMP I DVNUM /RETURN DVNUM9, .-. /LOCAL FOR "DVNUM" /014 CJL / DEVICE HANDLER FETCH ROUTINE. /020 CJL / CALLING SEQUENCE: / TAD (HANDLERNUMBER) /AC CONTAINS DEVICE HANDLER NUMBER / JMS I [HFETCH] /CALL ROUTINE / ERROR RETURN /COULDN'T LOAD HANDLER / GOOD RETURN /HANDLER LOADED / IF THE HANDLER WAS LOADED, THEN HNDADR CONTAINS THE HANDLER ENTRY POINT. HFETCH, .-. /HANDLER FETCH ROUTINE DCA HANDNUMBER /STORE HANDLER NUMBER TAD (HNDLR+1) /GET OUR BUFFER+(TWO PAGE ALLOWED) DCA HADR /STORE IN-LINE TAD HANDNUMBER /GET HANDLER NUMBER AGAIN CIF USRFLD /GOTO USR FIELD JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL FETCH /FETCH HANDLER HADR, .-. /WILL BE OUR SUGGESTED ADDRESS+TWO PAGES ALLOWED SKP /COULDN'T DO IT ISZ HFETCH /BUMP TO GOOD RETURN CLA CLL /CLEAN UP TAD HADR /GET ACTUAL HANDLER ADDRESS DCA HNDADR /STASH THE POINTER JMP I HFETCH /RETURN EITHER WAY HANDNUM,.-. /HANDLER NUMBER TEMPORARY / ROUTINE TO HANDLE THE "FINISH" COMMAND. /021 CJL FINSRV, 0 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL TAD (MSEND) /GET SEND MODE VALUE /045 CJL DCA KMODE /SETUP PROPER MODE /045 CJL FPACK /FORMAT A PACKET SRVFIN /PACKET DATA ADDRESS STGEN /PACKET TYPE FIN2, SPACK /SEND PACKET 1 /AWAIT RESPONSE FIN20-2 /DISPATCH LIST FOR RESPONSE /027 CJL / NAK OR UNDEFINED RESPONSE HERE FIN5, ISZ RTRYC /BUMP RE-TRY COUNTER JMP FIN2 /GET RESPONSE AND TRY AGAIN TAD (NOFINISH) /FAILED, RETURN MESSAGE /025 CJL JMP I FINSRV / ACK HERE FIN10, ISZ FINSRV /BUMP FOR NON-ERROR EXIT JMP I FINSRV /DONE FIN20, STACK; FIN10 /ACK STNAK; FIN5 /NAK 0 SRVFIN, "F&137 /SERVER KERMIT COMMAND TO SHUT DOWN -1 /END OF DATA PAGE / ROUTINE TO PARSE OFF A FILE NAME. / FILE NAME TO BE PARSED MUST BE LETTERS OR DIGITS AND BE NO MORE THAN / SIX CHARS FOR THE NAME AND TWO CHARS FOR THE EXTENSION. / ENTER WITH: AC = POINTER TO FILE NAME TO PARSE. / FNPTR = POINTER TO WHERE TO PUT THE PARSED FILE NAME. / NON-ERROR EXIT: AC = POINTER TO REMAINDER OF COMMAND LINE. / RETURN THE CALL + 2. / ERROR EXIT: AC = ORIGINAL POINTER. / RETURN THE CALL + 1. PFNAM, 0 DCA PFN10 /SAVE POINTER TO FILE NAME STRING TAD FNPTR /GET POINTER TO FILE NAME BLOCK DCA MQ /SET FOR "CLEAR" ROUTINE /032 CJL TAD (-4 /FOUR WORDS TO CLEAR OUT CLEAR /INIT THE FILE NAME BLOCK TAD PFN10 /GET THE STRING POINTER JMS I [NOSP] /GET PAST ANY LEADING SPACES JMP PFNAM9 /GOT EOL, NO FILE NAME DCA PFN11 /SAVE POINTER TAD FNPTR /GET FILE NAME BLOCK POINTER DCA PACK6P /SET UP THE "PACK6" POINTER DCA PACK6F /INIT THE "PACK6" FLAG TAD (-6 /MAX OF 6 CHARS FOR FILE NAME DCA PFN15 /PUT INTO COUNTER DCA WILDF /INIT THE WILD CARD FLAG JMS NAM /MOVE AND PACK FILE NAME TAD I PFN11 /GET THE TERM CHAR SPA /SKIP IF NOT EOL JMP PFNAM7 /EOL MEANS END OF FILE NAME TAD (-".!200) /COMPARE TO "." /034 CJL SNA /SKIP IF NO JMP PFNAM3 /GO HANDLE EXTENSION TAD (-" +".) /COMPARE TO <SP> /034 CJL SZA CLA /SKIP IF WAS A SPACE JMP PFNAM9 /NOT A SPACE, GOT AN ERROR JMP PFNAM7 /IS A SPACE, END OF FILE NAME PFNAM3, ISZ PFN11 /BUMP PAST THE "." TAD FNPTR /GET FILE NAME BLOCK POINTER TAD (3) /POINT TO EXTENSION /032 CJL DCA PACK6P /SET "PACK6" POINTER DCA PACK6F /INIT "PACK6" FLAG NL7776 /SET -2 /032 CJL DCA PFN15 /COUNTER FOR 2 EXT CHARS JMS NAM /NOW DO THE EXTENSION TAD I PFN11 /GET THE TERM CHAR SPA /SKIP IF NOT EOL JMP PFNAM7 /GOT COMPLETE FILE NAME HERE TAD [-" !200] /COMPARE TO <SP> /034 CJL SZA CLA /SKIP IF IT WAS JMP PFNAM9 /GOT A FILE NAME ERROR PFNAM7, ISZ PFNAM /BUMP RETURN FOR GOOD FILE NAME CLA CLL /INSURE CLEAR AC TAD PFN11 /GET CURRENT STRING POINTER JMP I PFNAM /AND RETURN PFNAM9, CLA CLL /INSURE CLEAR AC TAD PFN10 /GET ORIGINAL STRING POINTER JMP I PFNAM /TAKE ERROR RETURN PFN10, 0 /TEMP FOR PFNAM ROUTINE PFN11, 0 /TEMP FOR PFNAM ROUTINE PFN15, 0 /TEMP FOR PFNAM ROUTINE / LOCAL ROUTINE TO "PFNAM" TO MOVE IN THE FILE NAME OR FILE EXTENSION. / ENTER WITH "PFN11" POINTING TO WHERE TO GET THE NAME OR EXTENSION. / AND "PFN15" EQUAL TO THE MAX NUMBER OF CHARS (6 FOR NAME, 2 FOR EXT). / THIS ROUTINE CHECKS FOR WILD CARD CHARS "*" AND "?" AND PUTS THE / "?" CHAR IN FOR ANY CHARS IN THE NAME THAT ARE WILD. ALSO IF ANY / WILD CARD CHARS ARE FOUND THE FLAG "WILDC" IS SET SO BEFORE PARSING / ANY FILE NAME THE "WILDC" FLAG SHOULD BE INITIALIZED. NAM, 0 NAM0, TAD I PFN11 /GET A CHAR FROM THE STRING JMS I (ALPNUM) /MUST BE ALPHA OR NUMBER SKP /NOT A ALPHA NUMERIC JMP NAM3 /IS ALPHA NUMERIC TAD (-"?!200) /COMPARE TO "?" /034 CJL SNA /SKIP IF NO JMP NAM2 /YES, JUST PUT IT IN TAD (-"*+"?) /COMPARE TO "*" /034 CJL SZA CLA /SKIP IF YES JMP I NAM /TAKE THE FILE NAME ERROR EXIT ISZ WILDF /SET FLAG FOR WILD CARD FOUND NAM1, TAD ["?&77] /GET WILD CARD CHARACTER /034 CJL PACK6 /PUT IN NAME BLOCK ISZ PFN15 /BUMP CHAR COUNTER JMP NAM1 /LOOP TILL ALL FILLED ISZ PFN11 /BUMP THE STRING POINTER JMP NAM9 /EXIT WITH "PFN11" POINTING TO NEXT CHAR NAM2, ISZ WILDF /SET FLAG FOR WILD CARD FOUND TAD ["?&77] /GET WILD CARD CHARACTER /034 CJL NAM3, PACK6 /PUT THE CHAR INTO THE FILE NAME BLOCK ISZ PFN11 /BUMP THE STRING POINTER ISZ PFN15 /BUMP THE CHAR COUNTER JMP NAM0 /LOOP NAM4, TAD I PFN11 /NOW GET TO A TERMINATOR CHAR JMS I (ALPNUM) /BY FINDING FIRST NON-ALPHNUMERIC JMP NAM9 /NOW WE CAN QUIT CLA CLL /IGNORE EXCESS CHARS ISZ PFN11 /BUMP THE STRING POINTER JMP NAM4 /LOOP NAM9, CLA CLL /LEAVE WITH A CLEAR AC JMP I NAM /RETURN / ROUTINE TO SEND A PACKET. / ENTER WITH ADDRESS OF PACKET DATA IN CALL + 1. / AND TYPE OF PACKET IN CALL + 2. / EXIT CALL + 4 IF ACK RETURNED. / EXIT CALL + 3 IF NAK OR OTHER PACKET TYPE RETURNED. SNDP, 0 TAD I SNDP /GET DATA ADDRESS DCA SNDP1 /STORE IN CALL ISZ SNDP /BUMP POINTER TAD I SNDP /GET PACKET TYPE DCA SNDP2 /STORE IN CALL ISZ SNDP /BUMP FPACK /FORMAT A PACKET SNDP1, 0 /DATA ADDRESS GOES HERE SNDP2, 0 /PACKET TYPE GOES HERE SNDP3, SPACK /SEND A DATA PACKET 1 /GET RESPONSE SNDP9-2 /RESPONSE DISPATCH TABLE ADDRESS /027 CJL / HERE ON NOT "NAK" OR "ACK" RESPONSE. SKP / HERE ON "ACK". SNDP5, ISZ SNDP /BUMP RETURN ISZ SNDP /BUMP RETURN JMP I SNDP /EXIT / HERE ON NAK. SNDP4, ISZ RTRYC /BUMP THE RE-TRY COUNTER JMP SNDP3 /RE-TRY JMP I SNDP /TAKE RETURN + 3 SNDP9, STACK; SNDP5 /ACK STACK; SNDP4 /NAK 0 PAGE /014 CJL IFZERO 1 < / ROUTINE TO PARSE OFF A DECIMAL NUMBER. / ENTER ROUTINE WITH A POINTER TO THE PARSE LINE IN THE AC. / EXIT: RETURN + 1 FOR NO NUMBER. / RETURN + 2 FOR INVALID NUMBER. / RETURN + 3 FOR VALID NUMBER. / IN ALL CASES ON RETURN THE AC WILL CONTAIN A POINTER TO THE NEXT CHAR TO PARSE / IN THE LINE. ANY NUMBER PARSED WILL BE CONVERTED TO BINARY AND PUT INTO THE / REGISTER "BININP". DECPRS, 0 JMS I [NOSP] /GET PAST ANY LEADING SPACES JMP I DECPRS /GOT AN END OF LINE, AC POINTS TO IT DCA DP10 /SAVE POINTER TO LINE TAD DP10 /RE-GET POINTER TO LINE DCA DP11 /STORE IN OUR LINE POINTER DCA BININP /INIT BINARY REGISTER DCA DP13 /INIT PARSED NUMBER FLAG SKP /SKIP INTO LOOP BELOW DP1, ISZ DP11 /BUMP THE LINE POINTER TAD I DP11 /GET A CHAR FROM THE LINE JMS DECCK /CHECK FOR PROPER ASCII DECIMAL JMP DP5 /NOT PROPER ASCII DECIMAL ISZ DP13 /FLAG NUMBER INPUT TAD (-"0 /MAKE BINARY DCA DP12 /AND STORE TAD BININP /GET PREVIOUS INPUT JMS MUL10 /AND MULTIPLY TIMES 10 SZL /SKIP IF NO OVERFLOW ENCOUNTERED JMP DP6 /GOT AN OVERFLOW ERROR TAD DP12 /COMBINE WITH CURRENT INPUT SZL /SKIP IF NO OVERFLOW ERROR JMP DP6 /GOT AN OVERFLOW ERROR DCA BININP /RETURN ACCUMULATED SUM JMP DP1 /LOOP DP5, CLA CLL /AC MAY NOT BE CLEAR TAD DP13 /ANY NUMBERS INPUT YET? SNA CLA /SKIP IF YES JMP DP6 /TAKE THE NO NUMBER INPUT RETURN ISZ DECPRS /BUMP THE RETURN ISZ DECPRS /TWICE FOR GOOD NUMBER INPUT RETURN TAD DP11 /GET POINTER TO LINE JMP I DECPRS /AND RETURN DP6, CLA CLL /AC MAY NOT BE CLEAR TAD DP10 /GET ORIGINAL LINE POINTER ISZ DECPRS /BUMP THE RETURN JMP I DECPRS /TAKE THE INVALID NUMBER RETURN > IFZERO 1 < DP10, 0 /TEMP FOR DECPRS DP11, 0 /TEMP FOR DECPRS DP12, 0 /TEMP FOR DECPRS DP13, 0 /TEMP FOR DECPRS / ROUTINE TO MULTIPLY THE VALUE OF THE AC TIMES 10. / VALUE IN THE AC IS ASSUMED BINARY. / THE NUMBER IS RETURNED IN THE AC. IF THE LINK IS SET THE MULTIPLY / OVERFLOWED 12 BITS. MUL10, 0 DCA MULTMP /SAVE THE NUMBER TAD MULTMP /GET THE NUMBER BACK CLL RTL /MULTIPLY TIMES 4 TAD MULTMP /TIMES 5 SNL /SKIP IF ALREADY OVERFLOWED /025 CJL RAL /TIMES 10 JMP I MUL10 /RETURN NUMBER IN AC /THE LINK HAS ANY OVERFLOW MULTMP, 0 /TEMP STORAGE FOR MUL10 ROUTINE / ROUTINE TO CHECK FOR A VALID ASCII DECIMAL VALUE. / ENTER WITH ASCII CHAR IN THE AC. / EXIT RETURN + 1 IF NON-VALID ASCII DECIMAL WITH CHAR IN AC. / EXIT RETURN + 2 IF VALID ASCII DECIMAL WITH CHAR IN AC. DECCK, 0 DCA DECCK5 /STORE THE CHAR TO CHECK TAD DECCK5 /GET THE CHAR TAD (-"0 /CHECK FOR LESS THAN 0 SPA /SKIP IF NOT LESS THAN 0 JMP DECCK1 /NON-ASCII DECIMAL TAD ("0-"9-1 /CHECK GREATER THAN 9 SMA CLA /SKIP IF LE 9 JMP DECCK1 /INVALID ASCII DECIMAL ISZ DECCK /BUMP RETURN FOR VALID ASCII DECIMAL DECCK1, TAD DECCK5 /RE-GET ORIGINAL CHAR IN AC JMP I DECCK /RETURN DECCK5, 0 /TEMP FOR "DECCK" ROUTINE > / ROUTINE TO INPUT A COMMAND LINE FROM THE KEYBOARD. /013/014 CJL LININP, 0 TAD (LINBUF /GET ADDRESS OF LINE BUFFER DCA LIN50 /STORE IN A POINTER LIN1, JMS I (INPUT) /GET A CHARACTER FROM THE KEYBOARD /044 CJL TAD (-CNTRLM) /COMPARE TO <CR> /034 CJL SNA /SKIP IF NOT A RETURN JMP LIN2 /LINE IS INPUT TAD (-DELETE+CNTRLM)/COMPARE TO <DEL> /034 CJL SNA CLA /SKIP IF NOT A DELETE JMP LIN5 /OFF TO HANDLE A DELETE TAD LIN50 /GET VALUE OF LINE POINTER TAD (-LINBUF-LINSIZ /COMPARE WITH END OF LINE BUFFER SMA CLA /SKIP IF ROOM IN LINE BUFFER JMP LIN10 /BEEP FOR FULL BUFFER TAD INCHAR /GET THE KEYBOARD CHARACTER AGAIN /044 CJL TAD (-140) /COMPARE TO LOWER-CASE LIMIT /034 CJL SMA /SKIP IF BELOW LIMIT /034 CJL TAD [-40] /ELSE MAKE IT UPPER-CASE /034 CJL TAD (140) /RESTORE THE CHARACTER /034 CJL DCA I LIN50 /STORE IN THE LINE BUFFER ISZ LIN50 /BUMP THE LINE BUFFER POINTER NL7777 /SET -1 /032 CJL DCA I LIN50 /TERMINATE THE LINE TAD INCHAR /GET THE LATEST KEYBOARD CHARACTER BACK /044 CJL JMS I [P7ECHO] /PRINT IT /043 CJL JMP LIN1 /LOOP TILL A RETURN TYPED LIN2, NL7777 /SET -1 /032 CJL DCA I LIN50 /INSURE STRING TERMINATED JMS I [SCRIBE] /DO A /025 CJL CRLF /<CR>, <LF> /025 CJL JMP I LININP /DONE / HANDLE A DELETE TYPED IN LIN5, TAD LIN50 /FIND OUT FIRST IF... TAD (-LINBUF /WE ARE AT THE BEGINNING OF THE LINE SNA CLA /SKIP IF NO JMP LIN1 /JUST IGNORE THE DELETE NL7777 /SET -1 /032 CJL TAD LIN50 /GET THE LINE POINTER DCA LIN50 /RETURN BACKED UP DCA I LIN50 /ZERO THE CHAR TAD (CNTRLH) /GET A <BS> /025 CJL JMS I [P7ECHO] /PRINT IT /043 CJL TAD [" &177] /GET A <SPACE> /025 CJL JMS I [P7ECHO] /PRINT IT /043 CJL TAD (CNTRLH) /GET A <BS> /025 CJL JMS I [P7ECHO] /PRINT IT /043 CJL JMP LIN1 /BACK TO INPUT / HANDLE FULL LINE BUFFER HERE LIN10, CLA CLL /ENSURE CLEAR AC TAD [CNTRLG] /GET A <BEL> CHARACTER /025 CJL JMS I [P7ECHO] /PRINT IT /043 CJL JMP LIN1 /WAIT FOR EITHER RETURN OF DELETE KEY LIN50, 0 /TEMP POINTER FOR "LININP" ROUTINE / ROUTINE TO PACK TWO SIX-BIT CHARACTERS INTO A WORD. /032 CJL / CALLING SEQUENCE: / [PACK6PTR => CHARACTER PACKING AREA]. / [PACK6FLAG=0 IF PACKING INTO HIGH-ORDER BYTE. / PACK6FLAG=4000 IF PACKING INTO LOW-ORDER BYTE]. / TAD CHAR /AC CONTAINS CHARACTER TO BE PACKED / PACK6 /CALL VIA PAGE ZERO POINTER / RETURNS WITH AC CLEAR AND PACK6PTR AND PACK6FLAG UPDATED FOR NEXT PACKING. PACK60, .-. /PACK SIX-BIT ROUTINE AND [77] /JUST SIX-BIT DCA PACK6TEMP /SAVE FOR NOW NL4000 /SET INVERSION BIT TAD PACK6FLAG /REVERSE THE FLAG DCA PACK6FLAG /STORE BACK SZL /WAS IT CLEAR? JMP PACKIT /NO, GO DO LOW-ORDER TAD PACK6TEMP /GET THE CHARACTER RTL;RTL;RTL /MOVE UP DCA I PACK6PTR /STORE IT JMP I PACK60 /RETURN PACKIT, TAD I PACK6PTR /GET PREVIOUS HIGH-ORDER HALFWORD TAD PACK6TEMP /ADD ON LATEST DCA I PACK6PTR /STORE BOTH ISZ PACK6PTR /BUMP FOR NEXT TIME JMP I PACK60 /RETURN PACK6TE,.-. /PACK6 TEMPORARY / ROUTINE TO COMPARE TWO FILE NAMES FOR EQUALITY. / THE ROUTINE WILL CHECK EACH OF THE 8 FILE NAME CHARS AND IF A / CHAR IN THE FIRST FILE NAME (THE ONE WE ARE LOOKING FOR) CONTAINS / A "?" IT WILL MATCH ON THE SECOND FILE NAME CHAR. / ENTER WITH "FCMP1" POINTING TO THE FILE NAME TO FIND, AND "FCMP2" / POINTING TO THE FILE NAME TO TRY AND MATCH. EXIT + 1 IF NO MATCH / AND EXIT + 2 IF MATCH. (IF NON-ZERO AC ON ENTRY, THE AC IS ASSUMED / TO HAVE THE VALUE FOR "FCMP2".) FMATCH, 0 SZA /SKIP IF NO ARGUMENT IN AC DCA FCMP2 /THIS ARGUMENT CAME IN THE AC TAD FCMP1 /GET ADDRESS OF FIRST FILE NAME BLOCK DCA GET6P /STORE IN A POINTER DCA GET6F /INIT FLAG FOR "GET6" ROUTINE TAD FCMP2 /GET ADDRESS OF SECOND FILE NAME BLOCK DCA FMATP /STORE IN A LOCAL POINTER DCA FMATF /INIT LOCAL FLAG TAD (-10 /8 CHARS TO DO DCA FMATC /STORE IN LOCAL COUNTER FMAT1, NL4000 /SET 4000 /032 CJL TAD FMATF /GET FLAG DCA FMATF /RETURN FLAG, LINK CONTAINS STATUS TAD I FMATP /GET A WORD FROM THE SECOND NAME SZL /SKIP IF HIGH-ORDER WANTED NOW /032 CJL JMP FSWIT /JUMP IF LOW-ORDER WANTED NOW /032 CJL RTR;RTR;RTR /MOVE DOWN HIGH-ORDER /032 CJL SKP /DON'T BUMP YET /032 CJL FSWIT, ISZ FMATP /BUMP THE POINTER /032 CJL AND [77] /KEEP ONLY BOTTOM 6 BITS /016 CJL DCA FMATT /STORE IN A TEMP GET6 /NOW GET A CHAR FROM FIRST NAME TAD (-77 /CHECK IF WILD SNA /SKIP IF NO JMP FMAT2 /NO MATCH CHECK ON A WILD CARD TAD [77] /RESTORE THE CHARACTER /014/016 CJL CIA /NEGATE FOR COMPARE TAD FMATT /COMPARE WITH SECOND FILE NAME SZA CLA /SKIP IF IS A MATCH JMP I FMATCH /THIS IS NOT A MATCH FMAT2, ISZ FMATC /BUMP COUNTER JMP FMAT1 /LOOP, MORE TO CHECK ISZ FMATCH /BUMP RETURN FOR MATCH JMP I FMATCH /GOT A MATCH FMATP, 0 /POINTER FOR "FMATCH" FMATC, 0 /COUNTER FOR "FMATCH" FMATF, 0 /FLAG FOR "FMATCH" FMATT, 0 /TEMP FOR "FMATCH" FCMP1, 0 /POINTER FOR FIRST FILE NAME BLOCK FCMP2, 0 /POINTER FOR SECOND FILE NAME BLOCK PAGE /014 CJL / REMOTE LINK INPUT ROUTINE. / CALL = RPACK. ILINK, 0 TAD RETRY /SET UP A RE-TRY COUNT DCA ILINK6 /RE-TRY COUNT FOR INPUT ERRORS ILINK0, JMS I (GETSOH) /FIRST GET THE "SOH" BYTE JMP ILINK2 /RETURN HERE ON TIME-OUT DCA ILINK9 /INIT CHECKSUM REGISTER TAD [RRLEN] /GET REMOTE RECEIVE BUFFER ADDRESS DCA ILINK8 /STORE IN LOCAL POINTER JMS I (GETIR) /GET A CHAR JMP ILINK2 /GOT A RETURN OR TIME-OUT DCA I ILINK8 /STORE LENGTH IN BUFFER TAD I ILINK8 /GET LENGTH CHAR BACK TAD (-40-1 /CHAR FUNCTION - LENGTH BYTE CIA /NEGATE FOR COUNTER DCA ILINK7 /STORE IN LOCAL COUNTER ILINK1, ISZ ILINK8 /BUMP POINTER JMS I (GETIR) /GET NEXT CHAR JMP ILINK2 /GOT A RETURN DCA I ILINK8 /STORE IN BUFFER ISZ ILINK7 /BUMP COUNTER JMP ILINK1 /LOOP ISZ ILINK8 NL7777 /SET -1 /032 CJL DCA I ILINK8 TAD ILINK9 /GET CALCULATED CHECKSUM JMS I [CKSUM] /CALCULATE 1 BYTE CHECKSUM CIA /NEGATE FOR COMPARE DCA ILINK7 /STORE TEMP JMS I (GETIR) /NOW GET CHECKSUM JMP ILINK2 /GOT A RETURN TAD ILINK7 /COMPARE WITH CALCULATED CHECKSUM SNA CLA /SKIP IF NOT SAME JMP ILINK4 /ARE SAME ILINK2, CLA CLL /INSURE CLEAR AC ISZ ILINK6 /BUMP RE-TRY COUNTER JMP ILINK3 /CAN RE-TRY TAD (RPERMSG) /GET MESSAGE FOR FATAL PACKET ERROR /025 CJL JMP I [CLOOP7] /AND ABORT THE MESS ILINK3, TAD ABFLAG /GET ABORT FLAG /044 CJL SZA CLA /SKIP IF NO JMP I (ABORT) /ABORT THIS JMS I (SNDNAK) /SEND BACK A "NAK" JMP ILINK0 /AND TRY AGAIN ILINK4, TAD ABFLAG /GET ABORT FLAG /044 CJL SNA CLA /SKIP IF YES JMP I ILINK /NOPE, RETURN JMP I (ABORT) ILINK6, 0 /LOCAL TO "ILINK" ILINK7, 0 /LOCAL TO "ILINK" ILINK8, 0 /LOCAL TO "ILINK" ILINK9, 0 /LOCAL TO "ILINK" / HELP COMMAND ROUTINE. /024 CJL HELPSRV,.-. /HELP ROUTINE JMS I [CRESET] /RESET CONSOLE ROUTINE STUFF JMS I [SCRIBE] /GIVE THEM THE HELPMSG /HELP MESSAGE TAD ESCHAR /GET THE ESCAPE CHARACTER JMS I [ESCPRNT] /PRINT IT JMS I [SCRIBE] /DO A CRLF /<CR>, <LF> ISZ HELPSRV /BUMP PAST ERROR RETURN JMP I HELPSRV /RETURN / ROUTINE TO PRINT THE DATA IN THE RECEIVED PACKET. PRIPAK, 0 PRI8B; RRDTA /PRINT THE DATA JMS I [SCRIBE] /DO A /025 CJL CRLF /<CR>, <LF> /025 CJL JMP I PRIPAK /DONE PAGE /014 CJL / ROUTINE TO SERVICE A SEND REQUEST. SNDSRV, 0 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL TAD (MSEND) /FIRST SET MODE TO SEND DCA KMODE /PUT INTO MODE FLAG TAD LPTR /GET CURRENT LINE POINTER DCA PRSERR /SAVE LINE POSITION TAD PRSERR /GET LINE POSITION JMS I [DPARS] /TRY TO PARSE OFF A DEVICE NAME JMS SNDERROR /RETURN A DEVICE NAME ERROR /026 CJL SER1, DCA PRSERR /SAVE LINE POINTER /026 CJL TAD (FNBLK /GET FILE NAME BLOCK ADDRESS DCA FNPTR /STORE IN POINTER TAD PRSERR /GET STRING POINTER JMS I [PFNAM] /PARSE OFF THE FILE NAME JMS SNDERROR /FILE NAME PARSE ERROR /026 CJL SER2, DCA PRSERR /SAVE THE STRING POINTER /026 CJL TAD PRSERR /GET THE STRING POINTER JMS I [NOSP] /FIND THE END OF STRING SKP /GOT END OF STRING HERE JMS SNDERROR /SYNTAX ERROR /026 CJL SER3, DCA PRSERR /RETURN POINTER /026 CJL TAD DEVNUM /GET THE DEVICE NUMBER PARSED JMS I [HFETCH] /FETCH A HANDLER FOR THIS JMS SNDERROR /HANDLER FETCH ERROR /026 CJL SER4, DCA FILFND /INIT FILE FOUND FLAG DCA INIFLG /CLEAR THE INIT DONE FLAG NL0001 /INITIALIZE DIRECTORY /028 CJL DCA SLFLAG /LOOKUP FLAG /028 CJL SNDSV1, TAD (FNBLK /GET FILE NAME BLOCK ADDRESS DCA I (FCMP1) /SET FOR FILE TO FINE TAD SLFLAG /GET DIRECTORY FLAG /028 CJL JMS I (LUKUP) /FIND A MATCH FOR THIS FILE JMS SNDERROR /DIRECTORY I/O ERROR /026 CJL SER5, JMP S00 /FILE NOT FOUND /026 CJL ISZ FILFND /BUMP FILE FOUND COUNT DCA SLFLAG /DON'T INITIALIZE LOOKUP AGAIN JMS I (SNDPRO) /PROCESS THIS FILE FOR SEND JMS SNDERROR /ERROR IN FILE SEND PROCESS /026 CJL SER6, TAD WILDF /WAS WILD CARD FILE SPEC? /026 CJL SZA CLA /SKIP IF NO JMP SNDSV1 /GOT WILD CARD, TRY FOR NEXT S00, TAD FILFND /CHECK FOR ANY FILES FOUND SNA CLA /SKIP IF YES JMS SNDERROR /RETURN FILE NOT FOUND ERROR /026 CJL SER7, JMS BRKXMT /BREAK THE SEND /026 CJL TAD PRSERR /GET CURRENT CURSOR POSITION DCA LPTR /UPDATE ISZ SNDSRV /BUMP RETURN JMP I SNDSRV /AND DONE / SEND ERRORS COME HERE. /026 CJL SNDERRO,.-. /SEND ERROR ROUTINE CLA /CLEAN UP TAD SNDERROR /GET CALLER JMS I [SRCHTABLE] /GO MATCH IT SNERTABLE-1-1 /IN ERROR TABLE JMP I SNDSRV /TAKE ERROR EXIT WITH MESSAGE ADDRESS IN AC / SEND ERROR MESSAGE DISPATCH TABLE. /026 CJL SNERTAB,-SER1; DNERMSG /DEVICE NAME ERROR -SER2; FNERMSG /FILE NAME ERROR -SER3; FSERMSG /FILE NAME SYNTAX ERROR -SER4; SHFEMSG /HANDLER FETCH ERROR -SER5; SDERMSG /DIRECTORY I/O ERROR -SER6; SNDEMSG /SEND ERROR -SER7; NOTFND /LOOKUP 0 /THIS ENDS THE LIST FILFND, 0 /HOLDS COUNT OF # OF FILES FOUND SLFLAG, .-. /LOOKUP INITIALIZE FLAG /028 CJL FNBLK, 0 0 0 0 / ROUTINE TO RE-SET THE SEND. BRKXMT, .-. CLA CLL /INSURE CLEAR AC DCA INIFLG /CLEAR THE INIT SEND FLAG FPACK /FORMAT A PACKET NODATA /NO DATA FOR THIS PACKET STEOT /"EOT" PACKET TYPE SPACK /SEND THE PACKET 1 /READ RESPONSE /042 CJL 0 /DO NOT DISPATCH /042 CJL JMP I BRKXMT /DONE / ROUTINE TO SEND OUT A NAK WITHOUT DISTURBING THE NORMAL PACKET BUFFER. SNDNAK, 0 NL7777 /-1 /042 CJL TAD CURSEQ /ADD ON CURRENT SEQUENCE NUMBER /042 CJL AND [77] /MODULO 64 /042 CJL TAD [40] /TAKE CHAR(SEQUENCE NUMBER) /042 CJL DCA NAKPAK+2 /PUT IN NAK PACKET BUFFER TAD NAKPAK+1 /GET LENGTH TAD NAKPAK+2 /GET SEQ TAD NAKPAK+3 /GET TYPE JMS I [CKSUM] /CALCULATE CHECKSUM DCA NAKPAK+4 /PUT IN CHECKSUM TAD REOL /GET ANY EOL REQUIRED TAD [-40] /UN-CHAR IT /014/016 CJL SNA /SKIP IF USING NL7777 /NO EOL, PUT IN -1 INSTEAD /032 CJL DCA NAKPAK+5 /PUT EOL IN REM8B; NAKPAK /SEND NAK TO REMOTE JMP I SNDNAK /DONE NAKPAK, CNTRLA /MARK /042 CJL " &77+3 /LENGTH OF NAK PACKET /042 CJL .-. /SEQUENCE NUMBER GOES HERE /042 CJL STNAK /DATA TYPE .-. /CHECKSUM /042 CJL .-. /<EOL> IF USED /042 CJL -1 /TERMINATE / FILENAME BUFFER. /014 CJL NAMBUFF,ZBLOCK 12 /FILENAME.EXTENSION (WITH TERMINATOR) GOES HERE PAGE /014 CJL / ROUTINE TO SERVICE A "GET" COMMAND. GETSRV, 0 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL TAD (MREC) /GET OUR MODE VALUE /045 CJL DCA KMODE /SETUP NOW /045 CJL TAD LPTR /GET CURRENT LINE POINTER DCA PRSERR /SAVE TAD PRSERR /RE-GET IT JMS I [DPARS] /PARSE OFF THE DEVICE NAME /006/014 CJL JMP GSRV50 /ERROR IN DEVICE NAME /006 JMS I [NOSP] /FIND BEGINNING OF A FILE NAME JMP GSRV22 /GOT <EOL>, NO FILE NAME /006/014 CJL DCA GSRV90 /STORE BEGINNING ADDRESS TAD GSRV90 /NOW WE LOOK FOR JMS I [SP] /THE END OF THE LINE SKP /GOT THE END OF THE LINE HERE JMP .-2 /NOT END YET, CONTINUE DCA PRSERR /STORE POINTER TO EOL NL7777 /SET -1 /032 CJL DCA I PRSERR /TERMINATE FILE NAME WITH -1 DCA CURSEQ /RE-SET THE SEQUENCE TAD GSRV90 /GET ADDRESS OF FILE NAME GSRV10, FPACK /FORMAT THE PACKET GSRV90, 0 /DATA ADDRESS HERE STRIN /RECIEVE INIT PACKET GSRV12, SPACK /SEND THE PACKET 1 /GET RESPONSE GSRV80-2 /DISPATCH TABLE /027 CJL / SERVICE A NAK OR UNDEFINED. GSRV15, ISZ RTRYC /BUMP THE RE-TRY COUNTER JMP GSRV12 /TRY AGAIN JMP I GETSRV /GIVE UP / SERVICE A SEND/INIT FROM THE REMOTE. GSRV20, JMS I (INPSRV) /HANDLE JUST LIKE A RECEIVE JMP GSRV21 /ERROR RETURN FROM "INPSRV" ISZ GETSRV /BUMP RETURN FOR NO ERROR TAD PRSERR /UPDATE THE CURRENT LINE POINTER DCA LPTR GSRV21, JMP I GETSRV GSRV22, CLA CLL /MAKE SURE WE ARE CLEAR /009/014 CJL TAD [NOTFND] /GET ERROR MESSAGE ADDRESS /025 CJL JMP I GETSRV /TAKE ERROR RETURN /009/014 CJL / GOT AN ERROR PACKET, DISPLAY ERROR AND ABORT. GSRV40, JMS I [PRIPAK] /PRINT OUT THE ERROR PACKET JMP I GETSRV /TAKE THE ERROR EXIT / GOT DEVICE ERROR. /006/014 CJL GSRV50, CLA CLL /ENSURE CLEAR AC /006/014 CJL TAD (DNERMSG) /GET ERROR MESSAGE ADDRESS /025 CJL JMP I GETSRV /TAKE ERROR RETURN /006/014 CJL / DISPATCH TABLE. GSRV80, STERR; GSRV40 /ERROR PACKET RETURNED STSIN; GSRV20 /SEND INIT PACKET RETURNED STNAK; GSRV15 /NAK PACKET RETURNED 0 /TERMINATE TABLE / ROUTINE TO SERVICE A "RECEIVE" COMMAND. RECSRV, 0 JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL TAD (MREC) /GET OUR MODE VALUE /045 CJL DCA KMODE /SETUP NOW /045 CJL TAD LPTR /GET CURRENT LINE POINTER DCA PRSERR /SAVE IT TAD PRSERR /GET IT BACK JMS I [DPARS] /PARSE OFF DEVICE NAME /018 CJL JMP RECS30 /ERROR IN DEVICE NAME /018 CJL JMS I [NOSP] /CHECK IF BEGINNING OF FILE NAME /014 CJL SKP /GOT <EOL> HERE /018 CJL JMP RECS60 /SOMETHING ELSE ON LINE, ERROR /014 CJL DCA PRSERR /SAVE CURRENT LINE POINTER /018 CJL RPACK /GET SEND/INIT PACKET FROM REMOTE JMS I (DISPATCH) /DISPATCH BASED ON RRTYP /031 CJL RECS80-2 /TABLE ADDRESS /027/031 CJL JMP RECS60 /DON'T KNOW WHAT IT IS / GOT A SEND INIT PACKET. RECS10, JMS I (INPSRV) /OFF TO HANDLE INPUT JMP RECS60 /ERROR RETURN / TAKE THE NON-ERROR RETURN. RECS20, ISZ RECSRV /BUMP FOR NON-ERROR RETURN TAD PRSERR /GET CURRENT CURSOR POSITION /018 CJL DCA LPTR /UPDATE IT /018 CJL JMP I RECSRV / GOT ERROR IN DEVICE NAME. /018 CJL RECS30, CLA CLL /CLEAN UP /018 CJL TAD (DNERMSG) /GET ERROR MESSAGE ADDRESS /025 CJL JMP I RECSRV /TAKE ERROR RETURN /018 CJL / TAKE THE ERROR RETURN. RECS60, CLA JMP I RECSRV /TAKE ERROR EXIT / DISPATCH TABLE. RECS80, STSIN; RECS10 /SEND INIT PACKET DISPATCH STEOT; RECS60 /END OF CONNECTION STBRK; RECS20 /BREAK TRANSMISSION 0 RECS90, 0 /TEMP FOR "RECSRV" / KEYBOARD LINE BUFFER. /014 CJL LINBUF, ZBLOCK LINSIZE /LINE BUFFER PAGE /014 CJL / ROUTINE TO SERVICE INPUT OF A FILE. INPSRV, 0 JMS I (SETINI) /SET UP INIT REGISTERS DCA OFFLG /INITIALIZE OUTPUT FILE FLAG /036 CJL CIF USRFLD /GOTO USR FIELD /037 CJL JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /037 CJL RESET /RESET TABLES /037 CJL DCA CURSEQ /RE-SET THE SEQUENCE NUMBER FPACK /FORMAT A PACKET INIDAT /PACKET DATA ADDRESS STACK /"ACK" PACKET TYPE INPS01, SPACK /SEND A PACKET 1 /AWAIT RESPONSE INPS91-2 /DISPATCH TABLE ADDRESS /027 CJL / NAK OR UNDEFINED RESPONSE HERE. INPS02, ISZ RTRYC /GOT A NAK, CHECK RE-TRY COUNT JMP INPS01 /RE-TRY THE INIT JMS INPERROR /GIVE UP /025 CJL IER02= . /ERROR TABLE ADDRESS /039 CJL INPS03, FPACK /FORMAT A PACKET NODATA /NO DATA STACK /"ACK" PACKET TYPE INPS05, SPACK /SEND A PACKET 1 /AWAIT RESPONSE INPS90-2 /DISPATCH TABLE ADDRESS /027 CJL JMS INPERROR /UNDEFINED RESPONSE /025 CJL IER05= . /ERROR TABLE ADDRESS /039 CJL / GOT A DATA PACKET, WRITE TO OUTPUT FILE. INPS10, TAD OFFLG /CHECK THE OUTPUT FILE FLAG SNA CLA /SKIP IF OUTPUT FILE OPEN JMS INPERROR /ABORT AND EXIT /025 CJL IER10, JMS I (WRIPAK) /WRITE THE PACKET TO THE FILE /039 CJL JMS INPERROR /ERROR WRITING PACKET /025 CJL IER11, JMP INPS03 /LOOP /039 CJL / GOT A FILE HEADER PACKET, OPEN FILE. INPS20, TAD OFFLG /CHECK IF OUTPUT FILE OPEN SZA CLA /SKIP IF NO JMS INPERROR /ABORT IF FILE ALREADY OPEN /025 CJL IER20, TAD I [RRLEN] /GET CURRENT PACKET LENGTH /039 CJL TAD (-40-3 /CALCULATE LENGTH OF DATA SPA /SKIP IF DATA IN THE PACKET JMS INPERROR /ELSE AN ERROR /025 CJL IER21, TAD (RRDTA) /CALCULATE LAST BYTE IN DATA /039 CJL DCA INPS81 /STORE IN POINTER NL7777 /SET -1 /032 CJL DCA I INPS81 /TERMINATE NAME WITH A MINUS WORD TAD (FNBLK /GET ADDRESS OF FILE NAME BLOCK DCA FNPTR /SAVE FOR NAME PARSE TAD (RRDTA /GET ADDRESS OF DATA IN PACKET JMS I [PFNAM] /PARSE OFF THE FILE NAME JMS INPERROR /ERROR IN FILE NAME /025 CJL / GET TARGET DEVICE. IER23, CLA CLL /CLEAR AC FROM FILE NAME PARSE /039 CJL TAD DEVNUM /GET DEVICE NUMBER PARSED /006 DCA ODNUMB /SAVE OUTPUT DEVICE NUMBER TAD ODNUMB /GET NUMBER BACK JMS I [HFETCH] /FETCH HANDLER FOR THIS DEVICE JMS INPERROR /HANDLER FETCH ERROR /025 CJL IER24, TAD (FNBLK) /GET ADDRESS OF FILE NAME BLOCK /039 CJL DCA INPS22 /PUT IN CALL TAD ODNUMB /GET DEVICE NUMBER CIF USRFLD /GOTO USR FIELD /020 CJL JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL ENTER /ENTER TENTATIVE FILE /020 CJL INPS22, 0 / 0 / JMS INPERROR /NO DIRECTORY ROOM /025 CJL IER22, TAD INPS22 /GET NEW FILE START BLOCK /039 CJL DCA FSBLK /SAVE TAD INPS22+1 /GET INDICATED MAXIMUM FILE SIZE /021 CJL IAC /GIVE ONE MORE THAN 2 LESS /021 CJL DCA FLEN /SAVE AS DANGER COUNT /021 CJL ISZ OFFLG /SET FLAG FOR OUTPUT FILE OPEN NL7777 /INDICATE INITIALIZATION /020 CJL JMS I [PUTBYTE] /INITIALIZE OUTPUT FILE ROUTINE /020 CJL HLT /THIS CAN'T HAPPEN! /020 CJL TAD FNPTR /GET POINTER TO 6 BIT FILE NAME JMS I [FILN8] /MAKE 8 BIT FORMATTED STRING JMS I [SCRIBE] /TELL THEM FRECMSG /WE ARE RECEIVING PRI8B; NAMBUF /WHICH FILE WE ARE RECEIVING JMS I [SCRIBE] /DO A CRLF /<CR>, <LF> JMP INPS03 /LOOP / GOT AN END OF FILE PACKET. INPS30, TAD OFFLG /ANY OUTPUT FILE OPEN? SNA CLA /SKIP IF YES JMS INPERROR /ERROR /025 CJL IER30, JMS I [FILCLOSE] /CLOSE THE FILE /020/039 CJL JMS INPERROR /ERROR CLOSING THE FILE /025 CJL IER31,/ DCA OFFLG /RE-SET FILE OPEN FLAG /D009/039 CJL JMP INPS03 /CONTINUE / GOT AN END OF TRANSMISSION PACKET. INPS40, TAD OFFLG /WAS A FILE OPEN? SZA CLA /SKIP IF NO JMS I [FILCLOSE] /CLOSE ANY OPEN FILE /020 CJL NOP /ERROR CLOSING THE FILE **** FIX THIS **** FPACK /FORMAT A PACKET NODATA /NO DATA IN PACKET STACK /"ACK" PACKET TYPE SPACK /SEND THE PACKET 0 /NO RESPONSE ISZ INPSRV /BUMP RETURN FOR NO ERROR JMP I INPSRV /TAKE NON-ERROR EXIT / GOT AN ERROR PACKET. INPS50, JMS I [PRIPAK] /PRINT THE PACKET DATA JMP I INPSRV /AND TAKE THE ERROR EXIT /009/014 CJL / INPUT ERRORS COME HERE. /025 CJL INPERRO,.-. /INPUT ERROR ROUTINE /025 CJL FPACK /FORMAT A PACKET /025 CJL NODATA /NO DATA /025 CJL STBRK /"BREAK LINK" PACKET TYPE /025 CJL SPACK /SEND THE PACKET /025 CJL 0 /NO RESPONSE /025 CJL TAD INPERROR /GET CALLER /025 CJL JMS I [SRCHTABLE] /TRY TO FIND A MATCH /025 CJL INERTABLE-1-1 /IN ERROR TABLE /025 CJL SNA /SKIP IF FOUND PARTICULAR MESSAGE /025 CJL TAD (RERRMSG) /ELSE USE GENERAL MESSAGE /025 CJL JMP I INPSRV /TAKE ERROR RETURN /025 CJL / TEMPS FOR "INPSRV". INPS80, 0 INPS81, 0 PAGE /014 CJL / DISPATCH TABLES FOR "INPSRV". INPS90, STDAT; INPS10 /HANDLE DATA PACKETS STEOF; INPS30 /HANDLE EOF PACKET STEOT; INPS40 /HANDLE END OF TRANSMISSION PACKET STFIL; INPS20 /HANDLE FILE NAME PACKET STERR; INPS50 /HANDLE ERROR PACKET 0 /TERMINATE TABLE INPS91, STNAK; INPS02 /HANDLE A NAK PACKET STFIL; INPS20 /HANDLE FILE NAME PACKET STERR; INPS50 /HANDLE ERROR PACKET 0 /TERMINATE TABLE / INPUT ERROR MESSAGE DISPATCH TABLE. /025/039 CJL INERTAB,-IER05; UPERMSG /UNDEFINED PACKET ERROR /025 CJL -IER11; DSFLMSG /DISK OVERFLOW ERROR /042 CJL -IER22; RIDEMSG /DIRECTORY FULL ERROR /025 CJL -IER23; RFLNMSG /RECEIVED FILE NAME ERROR /025 CJL -IER24; RHFEMSG /HANDLER FETCH ERROR /025 CJL -IER31; FCLEMSG /FILE CLOSE ERROR /025 CJL 0 /THIS ENDS THE LIST /025 CJL / ROUTINE TO CHECK FOR AN ALPHABETIC OR NUMERIC CHAR. / ENTER WITH THE CHAR IN THE AC. / EXIT + 2 IF ALPHABETIC OR NUMERIC WITH CHAR IN THE AC. / EXIT + 1 IF NON-ALPHABETIC OR NUMERIC WITH CHAR IN THE AC. ALPNUM, 0 JMS ALPHA /CHECK FOR ALPHA FIRST SKP /NON-ALPHA RETURN, MUST CHECK NUMERIC JMP ALPNM1 /IS ALPHA, TAKE RETURN + 2 JMS NUMRC /CHECK IF NUMERIC SKP /NOT NUMERIC ALPNM1, ISZ ALPNUM /BUMP RETURN FOR ALPHA-NUMERIC JMP I ALPNUM /DONE / ROUTINE TO CHECK FOR AN ALPHABETIC CHARACTER. / ROUTINE ASSUMES UPPER CASE. / ENTER ROUTINE WITH CHAR IN THE AC. / EXIT + 2 IF THE CHAR IS ALPHABETIC WITH THE CHAR IN THE AC. / EXIT + 1 IF THE CHAR IS NOT ALPHABETIC WITH THE CHAR IN THE AC. ALPHA, 0 DCA ALPHA1 /STORE THE CHAR FOR RETURN TAD ALPHA1 /GET THE CHAR TAD (-"Z!200-1) /ADD ON UPPER LIMIT /034 CJL CLL /INIT LINK FOR A FLAG TAD ("Z-"A+1 SZL /SKIP IF NOT A LETTER ISZ ALPHA /IS A LETTER, BUMP RETURN CLA CLL /CLEAR AC TAD ALPHA1 /RESTORE CHAR IN THE AC JMP I ALPHA /TAKE PROPER RETURN ALPHA1, 0 /TEMP FOR ALPHA ROUTINE / ROUTINE TO CHECK FOR A NUMERIC CHARACTER. / ENTER WITH THE CHAR TO CHECK IN THE AC. / EXIT + 2 IF NUMERIC WITH THE CHAR IN THE AC. / EXIT + 1 IF NON-NUMERIC WITH THE CHAR IN THE AC. NUMRC, 0 DCA NUMRC1 /SAVE THE CHAR FOR RETURN TAD NUMRC1 /GET THE CHAR BACK TAD (-"9!200-1) /ADD ON UPPER LIMIT /034 CJL CLL /INIT LINK FOR A FLAG TAD ["9-"0+1] /016 CJL SZL /SKIP IF NOT A DIGIT ISZ NUMRC /BUMP RETURN FOR NUMERIC CLA CLL /CLEAR AC TAD NUMRC1 /RESTORE CHAR IN THE AC JMP I NUMRC /DONE NUMRC1, 0 /TEMP FOR NUMRC CHECK ROUTINE / ROUTINE TO WRITE THE CURRENT INPUT PACKET TO THE OUTPUT FILE. / ENTER: NOTHING. / EXIT: + 2 = WRITE SUCCESSFUL. / + 1 = WRITE NOT SUCCESSFUL. WRIPAK, 0 TAD I [RRLEN] /GET LENGTH OF PACKET TAD (RRDTA-40-3 /CALCULATE END OF BUFFER DCA W90 /PUT INTO POINTER DCA I W90 /ZERO AFTER END OF BUFFER TAD (RRDTA /GET ADDRESS OF DATA DCA W90 /PUT INTO POINTER W10, TAD I W90 /GET A CHAR FROM PACKET SNA /SKIP IF NOT END JMP W60 /END, EXIT CIA /NEGATE FOR COMPARE TAD RQCTL /COMPARE WITH CURRENT QUOTE CHAR SNA CLA /SKIP IF NOT QUOTE CHAR JMP W20 /IS QUOTE, HANDLE SPECIAL TAD W92 /WAS LAST CHAR A QUOTE? SZA CLA /SKIP IF NO TAD (-100 /IT WAS, FIX UP THIS CHAR JMP W25 /HANDLE REST BELOW W20, TAD W92 /CURRENT CHAR A QUOTE, CHECK PREVIOUS SNA CLA /SKIP IF YES JMP W30 /JUST THIS CHAR IS QUOTE, SET FLAG W25, TAD I W90 /GET CHAR FROM BUFFER JMS I [PUTBYTE] /OUTPUT TO FILE /020 CJL JMP I WRIPAK /ERROR IN OUTPUT /M020 CJL JMP W35 /FINISH BELOW W30, NL0001 CLL /GOTA SET FLAG FOR QUOTE CHARACTER /032 CJL W35, DCA W92 /SET UP QUOTE FLAG ISZ W90 /BUMP POINTER JMP W10 /LOOP W60, ISZ WRIPAK /BUMP RETURN FOR OK JMP I WRIPAK /DONE W90, 0 /POINTER FOR "WRIPAK" W92, 0 /TEMP FOR "WRIPAK" / TABLE SEARCH ROUTINE. /025 CJL / CALLING SEQUENCE: / TAD VALUE /AC CONTAINS VALUE TO MATCH / JMS I [SRCHTABLE] /CALL ROUTINE / TABLE-2 /ADDRESS(TABLE)-2 / RETURN /ALWAYS RETURNS HERE / IF AC=0 THEN NO MATCH OCCURRED. / IF AC IS NON-ZERO, THEN AC CONTAINS CORRESPONDING VALUE TO MATCH WHICH IS ALSO / STORED IN TABLEJUMP. / TABLE FORMAT. / -VALUE; CORRESPONDING VALUE /TABLE PAIR / ""; "" /ADDITIONAL PAIRS AS NECESSARY / 0 /ZERO TERMINATES THE TABLE SRCHTAB,.-. /TABLE SEARCH ROUTINE DCA TABLEJUMP /SAVE PASSED VALUE TO MATCH TAD I SRCHTABLE /GET PASSED POINTER ARGUMENT DCA XR0 /STASH THE POINTER ISZ SRCHTABLE /BUMP PAST ARGUMENT SRCHLUP,ISZ XR0 /BUMP TO NEXT PAIR TAD I XR0 /GET A TABLE VALUE SNA /END OF TABLE? JMP I SRCHTABLE /YES, RETURN WITH CLEAR AC TAD TABLEJUMP /COMPARE TO DESIRED SZA CLA /SKIP IF IT MATCHES JMP SRCHLUP /JUMP IF NOT TAD I XR0 /GET CORRESPONDING VALUE DCA TABLEJUMP /STASH IT TAD TABLEJUMP /GET IT BACK JMP I SRCHTABLE /RETURN WITH CORRESPONDING VAUE IN AC PAGE /014 CJL IFZERO 1 < / OS8 DIRECTORY FILE DATA SETUP. / ENTER WITH THE DIRECTORY DATE WORD IN THE AC. / EXIT WITH THE DATE IN THE BUFFER "DATBUF". FILD8, 0 DCA FILD89 /SAVE THE DATE WORD TAD FILD89 /GET DATA WORD AND (7 /KEEP ONLY YEAR BITS TAD (116 /ADD 78 YEARS MQL /PUT INTO MQ REGISTER TAD (DATEYR /GET POINTER TO YEAR JMS DECCON /CONVERT TO ASCII DATE TAD FILD89 /GET DATE WORD BACK CLL RTR /SHIFT DAY DOWN RAR AND (37 /KEEP ONLY DAY BITS MQL /PUT IN MQ REGISTER TAD (DATEDA /GET POINTER TO DAY JMS DECCON /CONVERT TO ASCII DAY TAD FILD89 /GET DATE WORD BACK BSW /GET MONTH CLL RTR /DOWN AND (17 /KEEP ONLY MONTH BITS MQL /INTO MQ REGISTER TAD (DATEMO /GET ADDRESS OF WHERE TO PUT MONTH JMS DECCON /CONVERT JMP I FILD8 /ALL DONE FILD89, 0 /TEMP FOR "FILD8" / ROUTINE TO CONVERT A BINARY VALUE INTO A TWO DIGIT ASCII DECIMAL NUMBER. / ENTER WITH WHERE TO STORE THE CONVERTED NUMBER IN THE AC AND THE NUMBER IN THE / MQ REGISTER. DECCON, 0 DCA DECC20 /STORE THE POINTER TAD ("0&177-1 /GET AN ASCII ZERO DCA I DECC20 /START OUT WITH A ZERO MQA /GET THE BINARY VALUE DECC01, ISZ I DECC20 /BUMP TAD (-12 /SUB 10 SMA /SKIP IF NO MORE DIVISION JMP DECC01 /ELSE KEEP GOING TAD (12+"0&177 /CONVERT REMAINDER TO ASCII ISZ DECC20 /BUMP POINTER DCA I DECC20 /STORE / JMS FMTDAT /FORMAT FOR PRINTING /D013 JMP I DECCON /DONE > IFZERO 1 < DECC20, 0 /LOCAL POINTER TO DECCON / ROUTINE TO SET UP THE DATE IN A MM-DD-YY FORMAT TO PUT IN FRONT OF A FILE TO / PASS THE FILES DATE (TEMPORY AND NOT PART OF THE KERMIT PROTOCOL). FMTDAT, 0 TAD DATEMO /GET FIRST CHAR OF DATE DCA FDATE /MOVE IT TAD DATEMO+1 DCA FDATE+1 TAD DATEDA DCA FDATE+3 TAD DATEDA+1 DCA FDATE+4 TAD DATEYR DCA FDATE+6 TAD DATEYR+1 DCA FDATE+7 JMP I FMTDAT /QUICK AND DIRTY DATBUF, "#&177 /FILE CREATION DATE ATTRIBUTE 6+40 /LENGTH OF DATE (CHAR(X)) DATEYR, 0 /ASCII YEAR GOES HERE 0 DATEMO, 0 /ASCII MONTH GOES HERE 0 DATEDA, 0 /ASCII DAY GOES HERE 0 -1 /TERMINATE / FORMATTED DATE GOES HERE. SETDAT,"ANGLEBRACKET&177 /COMMENT SIGN FDATE, 0 0 "-&177 0 0 "-&177 0 0 12 15 -1 > / DIRECTORY LOOKUP ROUTINE. /028 CJL / CALLING SEQUENCE: / NL0001 /IF INITIALIZING THE DIRECTORY / OR / CLA /CLEAR AC IF SUBSEQUENT CALL / JMS I (LUKUP) /CALL ROUTINE / I/O ERROR /DIRECTORY I/O ERROR RETURN WITH AC DIRTY / NOT FOUND /FILE NOT FOUND RETURN / FOUND /LATEST FILE MATCHES REQUEST / SETS FLEN TO -(FILE LENGTH) IN RECORDS. / SETS FSBLK TO STARTING RECORD OF FILE. / MODIFIES DIRECTORY SEGMENT SLIGHTLY (NOT TO BE WRITTEN BACK). / DEPENDS ON DIRXR BEING UNTOUCHED BY OTHER ROUTINES. LUKUP, .-. /DIRECTORY LOOKUP ROUTINE SNA /INITIALIZING DIRECTORY? JMP NXTFILE /NO, JUST GET ANOTHER FILE IF POSSIBLE NEXTSEG,DCA DIRRECORD /STORE LATEST DIRECTORY SEGMENT RECORD JMS I HNDADR /CALL I/O HANDLER PAGCNT^100+DIRFLD /READ IN A DIRECTORY SEGMENT DIRBUFFER /DIRECTORY I/O BUFFER DIRRECO,.-. /WILL BE LATEST SEGMENT NUMBER JMP I LUKUP /I/O ERROR, TAKE DIRTY IMMEDIATE RETURN CDF DIRFLD /GOTO DIRECTORY FIELD TAD I (FRSTRECORD) /GET FIRST RECORD OF FIRST ENTRY DCA FSBLK /STASH IT TAD (ENTSTRT-1) /POINT TO DCA DIRXR /ENTRIES LOOKLUP,TAD I DIRXR /GET FIRST WORD OF ENTRY SNA /SKIP IF NOT EMPTY JMP EMPENTRY /JUMP IF EMPTY ENTRY DCA FNAME /STORE FIRST FILENAME WORD TAD I DIRXR /GET NEXT DCA FNAME+1 /STORE SECOND FILENAME WORD TAD I DIRXR /GET NEXT DCA FNAME+2 /STORE THIRD FILENAME WORD TAD I DIRXR /GET NEXT DCA FNAME+3 /STORE EXTENSION WORD NL7777 /BACKUP TAD I (AIWNUMBER) /GET ADDITIONAL INFORMATION WORD COUNT DCA AIWCNT /STASH THE COUNTER DCADATW,DCA DATWORD /CLEAR THE DATE WORD TAD DCADATW/(DCA DATWORD)/GET STORING INSTRUCTION DCA AIWSTORE /STORE IN-LINE JMP AIWTEST /START LOOP THERE AIWLUP, TAD I DIRXR /GET A WORD FROM ENTRY AIWSTOR,DCA DATWORD+.-. /STORE IN PROPER WORD ISZ AIWSTORE /BUMP TO NEXT INSTRUCTION AIWTEST,ISZ AIWCNT /DONE ALL ADDITIONAL INFORMATION WORDS? JMP AIWLUP /NO, KEEP GOING TAD I DIRXR /GET THE FILE LENGTH SNA /SKIP IF VALID JMP TENTRY /JUMP IF ONLY TENTATIVE FILE (NO LENGTH) DCA FILENGTH /STORE FILE LENGTH CDF PRGFLD /BACK TO OUR FIELD / JMS I (FILTER) /CHECK IF WE LIKE THIS ONE TAD (FNAME) /POINT TO LATEST FILENAME JMS I (FMATCH) /CHECK FOR A MATCH JMP NXTFILE /FORGET THIS ONE, IT DIDN'T MATCH TAD FILENGTH /GET FILE LENGTH DCA FLEN /GIVE TO CALLER TO DESTROY TAD (FNAME) /POINT TO FILENAME JMS I [FILN8] /PUT IN CHARACTER FORM IN BUFFER ISZ LUKUP /BUMP TO FILE MATCH RETURN JMP FLEXIT /EXIT THERE / COMES HERE FROM SUBSEQUENT CALL OR MATCH FAILURE. NXTFILE,CDF DIRFLD /GOTO BUFFER FIELD TAD FILENGTH /GET LATEST FILE LENGTH SKP /DON'T DO EMPTY LENGTH / COMES HERE TO BYPASS AN EMPTY ENTRY. EMPENTR,TAD I DIRXR /GET LENGTH OF EMPTY CIA /WANT POSITIVE FORM TAD FSBLK /UPDATE TO NEXT FILE RECORD DCA FSBLK /STORE UPDATED VALUE TENTRY, ISZ I (FILECNT) /DONE WITH THIS SEGMENT? JMP LOOKLUP /NO, KEEP GOING TAD I (DIRLINK) /GET LINK TO NEXT SEGMENT CDF PRGFLD /BACK TO OUR FIELD SZA /END OF DIRECTORY? JMP NEXTSEGMENT /NO, GO DO NEXT SEGMENT FLEXIT, ISZ LUKUP /BUMP PAST I/O ERROR EXIT JMP I LUKUP /RETURN FOR FILE NOT FOUND AIWCNT, .-. /ADDITIONAL INFORMATION WORD COUNTER DATWORD,.-. /DATE WORD STORED HERE (0000 IF NONE) ZBLOCK 7 /ROOM FOR MORE ADDITIONAL INFORMATION WORDS FILENGT,.-. /LATEST FILE LENGTH FNAME, ZBLOCK 4 /FILENAME AND EXTENSION STORED HERE PAGE / OS/8 FILE UNPACK ROUTINE. /019 CJL / THIS ROUTINE UNPACKS BYTES FROM THE INPUT FILE ACCORDING TO THE CURRENT VALUE / OF FILMODE: / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES ARE TREATED AS SEVEN-BIT ASCII / CHARACTERS BY STRIPPING THE HIGH-ORDER BIT. END OF FILE IS THE <^Z> CHARACTER / WHICH WILL BE SENT OR NOT ACCORDING TO THE CONTENTS OF OCTLZFLAG. IF / OCTLZFLAG CONTAINS NON-ZERO, THEN <^Z> WILL BE SENT AT <EOF>; THE NEXT CALL / WILL YIELD THE <EOF> RETURN. IF OCTLZFLAG CONTAINS ZERO, THEN DETECTION OF / <^Z> YIELDS THE <EOF> RETURN IMMEDIATELY. / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES ARE TREATED AS EIGHT-BIT / CHARACTERS AND WILL BE SENT WITHOUT <^Z> CHECK. THE NEXT CALL AFTER THE LAST / BYTE OF THE LAST RECORD HAS BEEN SENT YIELDS THE <EOF> RETURN. / CALLING CONSIDERATIONS: / OCTLZFLAG MUST BE SETUP ACCORDINGLY IF IN ASCII MODE. / FILMODE MUST BE SETUP ACCORDINGLY. / FLEN MUST CONTAIN -(FILE LENGTH IN RECORDS) WHEN INITIALIZING THE INPUT FILE. / IT WILL BE MODIFIED BY CALLING THIS ROUTINE. / FSBLK MUST CONTAIN THE THE STARTING RECORD WHEN INITIALIZING THE INPUT FILE. / HNDADR MUST ALREADY BE SETUP TO CALL THE INPUT HANDLER. / CALLING SEQUENCE: / CLA /OR NL7777 IF INITIALIZING THE INPUT FILE / JMS I (GETBYTE) /CALL ROUTINE / I/O ERROR RETURN /FATAL INPUT ERROR OCCURRED; AC CONTAINS JUNK / END OF FILE /<EOF> OCCURRED / GOOD RETURN /AC CONTAINS LATEST SEVEN/EIGHT-BIT CHARACTER GETBYTE,.-. /GET A BYTE ROUTINE SNA CLA /INITIALIZING? JMP I PUTC /NO, GO GET NEXT BYTE TAD FSBLK /GET STARTING RECORD OF INPUT FILE DCA GETRECORD /STORE IN-LINE GETNEWR,JMS I HNDADR /CALL I/O HANDLER PAGCNT^100+BUFFLD /READ SOME PAGES INTO BUFFER FIELD GETCORE,FILBUFFER /BUFFER ADDRESS GETRECO,.-. /WILL BE LATEST RECORD NUMBER JMP I GETBYTE /INPUT ERROR! TAD GETCORE/(FILBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER GETLOOP,DCA THIRD /CLEAR THIRD BYTE NOW JMS PUTONE /OBTAIN AND SEND BACK FIRST BYTE JMS PUTONE /OBTAIN AND SEND BACK SECOND BYTE TAD THIRD /GET THIRD BYTE JMS PUTC /SEND IT BACK TAD BUFPTR /GET THE POINTER TAD (-PAGCNT^200-FILBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP GETLOOP /KEEP GOING ISZ GETRECORD /BUMP TO NEXT RECORD ISZ FLEN /DONE ALL RECORDS? (BINARY MODE ONLY) JMP GETNEWRECORD /NO, GO DO ANOTHER ONE / BINARY <EOF> REACHED HERE. JMP GETEOF /TAKE SKIP RETURN TO MAIN CALLER PUTONE, .-. /SEND BACK A BYTE ROUTINE CDF BUFFLD /GOTO BUFFER FIELD TAD I BUFPTR /GET LATEST WORD AND [7400] /JUST THIRD-BYTE NYBBLE CLL RAL /MOVE UP TAD THIRD /GET OLD NYBBLE (IF ANY) RTL;RTL /MOVE UP NYBBLE BITS DCA THIRD /SAVE FOR NEXT TIME TAD I BUFPTR /GET LATEST WORD AGAIN JMS PUTC /SEND BACK CURRENT BYTE ISZ BUFPTR /BUMP TO NEXT WORD JMP I PUTONE /RETURN PUTC, .-. /SEND BACK LATEST BYTE ROUTINE CDF PRGFLD /BACK TO OUR FIELD RAL /MOVE UP STL RAR /MOVE DOWN WITH BIT[0] SET AND FILMODE /KEEP ONLY GOOD BITS TAD [-CNTRLZ] /COMPARE TO <^Z> SNA /SKIP IF NOT ASCII MODE <EOF> JMP GETEND /JUMP IF ASCII MODE <EOF> GETUPZ, TAD [CNTRLZ] /RESTORE THE CHARACTER AND [377] /ENSURE EIGHT-BIT (MIGHT ALREADY BE SEVEN-BIT) ISZ GETBYTE /BUMP PAST <EOF> RETURN GETEOF, ISZ GETBYTE /BUMP PAST I/O ERROR RETURN JMP I GETBYTE /RETURN TO MAIN CALLER / GOT <Z> IN ASCII MODE. GETEND, TAD OCTLZFLAG /GET <^Z> DISPOSITION FLAG SNA CLA /SKIP IF SET JMP GETEOF /JUST RETURN <EOF> CONDITION TAD (GETEOF) /POINT TO <EOF> DCA PUTC /FOR NEXT TIME JMP GETUPZ /GIVE THEM BACK <^Z> THIS TIME / OS/8 FILE PACK ROUTINE. /020 CJL / THIS ROUTINE PACKS BYTES INTO THE OUTPUT FILE ACCORDING TO THE CURRENT VALUE / OF FILMODE: / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES ARE TREATED AS SEVEN-BIT ASCII / CHARACTERS BY STRIPPING THE HIGH-ORDER BIT. / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES ARE TREATED AS EIGHT-BIT / CHARACTERS AND WILL BE WRITTEN AS IS. / CALLING CONSIDERATIONS: / FILMODE MUST BE SETUP ACCORDINGLY. / FLEN MUST CONTAIN -(MAXIMUM FILE LENGTH IN RECORDS) WHEN INITIALIZING THE / TENTATIVE OUTPUT FILE. IT WILL BE MODIFIED BY CALLING THIS ROUTINE. / FSBLK MUST CONTAIN THE STARTING RECORD WHEN INITIALIZING THE TENTATIVE OUTPUT / FILE. / HNDADR MUST ALREADY BE SETUP TO CALL THE OUTPUT HANDLER. / CALLING SEQUENCE: / NL7777 /ANY NEGATIVE VALUE / JMS I [PUTBYTE] /CALL ROUTINE TO INITIALIZE / IMPOSSIBLE /CAN'T RETURN HERE / GOOD RETURN /ALWAYS RETURNS HERE / OR / TAD (CHAR&377) /ANY EIGHT-BIT (OR LESS) VALUE / JMS I [PUTBYTE] /CALL ROUTINE TO PACK A CHARACTER / ERROR RETURN /I/O ERROR WHILE WRITING A BUFFER / GOOD RETURN /CHARACTER PACKED WITH NO ERRORS / ALL RETURNS CLEAR THE AC. PUTBYTE,.-. /OUTPUT A BYTE ROUTINE SPA /ARE WE INITIALIZING? JMP PUTINITIALIZE /YES AND FILMODE /REDUCE TO SEVEN-BIT/EIGHT-BIT DCA LATEST /SAVE LATEST CHARACTER CDF BUFFLD /GOTO BUFFER FIELD TAD LATEST /GET LATEST CHARACTER JMP I PUTNEXT /GO WHERE YOU SHOULD GO PUTNEXT,.-. /EXIT ROUTINE ISZ PUTBYTE /BUMP TO GOOD RETURN PUTERRO,CLA CLL /CLEAN UP CDF PRGFLD /BACK TO OUR FIELD JMP I PUTBYTE /RETURN TO MAIN CALLER PUTINIT,CLA /CLEAN UP TAD FSBLK /GET STARTING RECORD OF TENTATIVE FILE DCA PUTRECORD /STORE IN-LINE DCA I (FLENGTH) /CLEAR ACTUAL FILE LENGTH PUTNEWR,TAD PUTCORE/(FILEBUFFER) /SETUP THE DCA BUFPTR /BUFFER POINTER PUTLOOP,JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT TAD BUFPTR /GET POINTER VALUE DCA TEMPTR /SAVE FOR LATER ISZ BUFPTR /BUMP TO NEXT JMS PUTNEXT /GET A CHARACTER DCA I BUFPTR /STORE IT JMS PUTNEXT /GET A CHARACTER RTL;RTL /MOVE UP AND [7400] /ISOLATE HIGH NYBBLE TAD I TEMPTR /ADD ON FIRST BYTE DCA I TEMPTR /STORE COMPOSITE TAD LATEST /GET LATEST CHARACTER RTR;RTR;RAR /MOVE UP AND AND [7400] /ISOLATE LOW NYBBLE TAD I BUFPTR /ADD ON SECOND BYTE DCA I BUFPTR /STORE COMPOSITE ISZ BUFPTR /BUMP TO NEXT TAD BUFPTR /GET LATEST POINTER VALUE TAD (-PAGCNT^200-FILBUFFER) /COMPARE TO LIMIT SZA CLA /SKIP IF AT END JMP PUTLOOP /KEEP GOING CDF PRGFLD /BACK TO OUR FIELD ISZ FLEN /TOO MANY RECORDS? SKP /SKIP IF NOT JMP I PUTBYTE /TAKE ERROR RETURN JMS I HNDADR /CALL I/O HANDLER PAGCNT^100+BUFFLD+WRITE /WRITE SOME PAGES FROM BUFFER FIELD PUTCORE,FILBUFFER /BUFFER ADDRESS PUTRECO,.-. /WILL BE LATEST RECORD NUMBER JMP PUTERROR /OUTPUT ERROR! ISZ I (FLENGTH) /BUMP ACTUAL LENGTH ISZ PUTRECORD /BUMP TO NEXT RECORD JMP PUTNEWRECORD /KEEP GOING BUFPTR, .-. /INPUT/OUTPUT BUFFER POINTER / ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG. OCTLZFL,OCLOSE /ZERO=DON'T SEND <^Z> AT <EOF>, /NON-ZERO=SEND <^Z> AT <EOF> THIRD= PUTNEXT /THIRD BYTE TEMPORARY TEMPTR= PUTONE /TEMPORARY BUFFER POINTER PAGE / OUTPUT FILE CLOSE ROUTINE /020 CJL / THIS ROUTINE CLOSES THE OPEN OUTPUT FILE ACCORDING TO THE CURRENT VALUE OF / FILMODE: / FILMODE CONTAINS 0177 (ASCII MODE). ALL BYTES PRIOR TO CLOSE ARE STRIPPED / SEVEN-BIT CHARACTERS. IF THE LAST CHARACTER SENT TO PUTBYTE (CONTENTS OF / LATEST) IS A <^Z>, THEN JUST CLOSE THE FILE. IF NOT, THEN IF ICTLZFLAG IS / NON-ZERO, INSERT A <^Z> CHARACTER INTO THE FILE AS <EOF> INDICATOR, ELSE JUST / CLOSE THE FILE. / FILMODE CONTAINS 4377 (BINARY MODE). ALL BYTES PRIOR TO CLOSE ARE EIGHT-BIT / CHARACTERS. IF NECESSARY, <NUL> CHARACTERS WILL BE APPENDED TO THE END OF THE / LAST BLOCK OF THE FILE TO FILL IT. THE FILE IS CLOSED OTHERWISE UNMODIFIED. / CALLING CONSIDERATIONS. / OFFLG MUST BE SET (OUTPUT FILE IS OPEN). / FLENGTH MUST CONTAIN THE ACTUAL FILE LENGTH. / LATEST MUST CONTAIN THE LAST BYTE SENT TO THE OUTPUT FILE VIA PUTBYTE (ASCII / MODE ONLY). / ICTLZFLAG MUST BE SETUP ACCORDINGLY. / FILMODE MUST BE SETUP ACCORDINGLY. / CALLING SEQUENCE: / CLA CLL /CLEAR AC / JMS I (FILCLOSE) /CALL ROUTINE / ERROR RETURN /ERROR WHILE CLOSING FILE / GOOD RETURN /FILE CLOSED PROPERLY / ON RETURN, OFFLG WILL BE CLEAR; THE AC WILL BE CLEAR ALSO. FILCLOS,.-. /OUTPUT FILE CLOSE ROUTINE TAD FILMODE /GET CURRENT FILE MODE SPA CLA /SKIP IF ASCII JMP CLOSIT /JUMP IF BINARY TAD LATEST /GET LATEST CHARACTER TAD [-CNTRLZ] /COMPARE TO <^Z> SZA CLA /SKIP IF <^Z> ALREADY IN FILE TAD ICTLZFLAG /GET <^Z> DISPOSITION FLAG SNA CLA /SKIP IF SET JMP CLOSIT /JUMP IF NOT TAD [CNTRLZ] /GET A <^Z> CLOSLUP,JMS I [PUTBYTE] /OUTPUT A BYTE JMP CLOSERROR /ERROR WHILE WRITING CLOSIT, TAD I (BUFPTR) /GET THE BUFFER POINTER TAD (-FILBUFFER) /COMPARE TO RESET VALUE SZA CLA /SKIP IF IT MATCHES JMP CLOSLUP /ELSE KEEP GOING TAD ODNUMBER /GET OUTPUT DEVICE NUMBER CIF USRFLD /GOTO USR FIELD JMS I [USRENTRY] /CALL USER SERVICE ROUTINE /035 CJL CLOSE /CLOSE FILE FNBLK /=> FILENAME FLENGTH,.-. /ACTUAL FILE LENGTH CLOSERR,SKP CLA /ERROR WHILE CLOSING THE FILE ISZ FILCLOSE /BUMP RETURN IF NO ERRORS DCA OFFLG /CLEAR OUTPUT FILE OPEN FLAG JMP I FILCLOSE /RETURN TO CALLER / ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG. ICTLZFL,ICLOSE /ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z> /IF LAST CHARACTER WASN'T <^Z> / SEND PROCESSING SNDPRO, 0 TAD INIFLG /CHECK IF SEND/INIT HAS BEEN DONE SZA CLA /SKIP IF NO JMP SNDP10 /RIGHT INTO FILE TRANSFER TAD (DEFCK /SET UP DEFAULT CHECKSUM DCA RCHKT TAD (DEFEOL /GET DEFAULT EOL DCA REOL /AND SET IT TAD (DEFQCTL /GET DEFAULT QUOTE CONTROL CHAR DCA RQCTL /AND SET IT UP TAD (DEFMAXL+40 /GET DEFAULT MAX BUFFER SIZE DCA RMAXL /SET IT UP DCA CURSEQ /RE-SET SEQUENCE NUMBER JMS I (SNDI00) /HANDLE "SEND-INIT" JMP I SNDPRO /TAKE ERROR RETURN /014 CJL / SEND FILE HEADER DISPATCH ROUTINE SNDP10, FPACK /FORMAT A PACKET NAMBUF /ADDRESS OF FILE HEADER FOR DATA STFIL /"FIL" PACKET TYPE SNDP11, SPACK /SEND A PACKET 1 /AWAIT RESPONSE SNDP96-2 /DISPATCH TABLE ADDRESS /026 CJL / GOT A NAK OR UNDEFINED HERE SNDP12, ISZ RTRYC /BUMP THE COUNTER JMP SNDP11 /TRY AGAIN JMP I SNDPRO /TAKE ERROR RETURN /014 CJL / FILE CREATION DATE HANDLING SNDP15, IFZERO 1 < TAD RCAPAS /CHECK IF REMOTE SUPPORTS FILE AND (10 / ATTRIBUTES SNA CLA /SKIP IF YES JMP SNDP20 /SKIP IF NO FPACK /FORMAT PACKET DATBUF /DATE DATA STATT /"ATT" PACKET TYPE SNDP16, SPACK /SEND THE PACKET 1 /AWAIT RESPONSE SNDP98-2 /DISPATCH TABLE ADDRESS /027 CJL JMP I SNDPRO /TAKE ERROR RETURN /014 CJL > / GOT ACK HERE SNDP20, JMS I [SCRIBE] /TELL THEM /025 CJL FSENMSG /WE ARE SENDING /025 CJL PRI8B; NAMBUF /TELL THEM THE NAME OF THE FILE JMS I [SCRIBE] /DO A /025 CJL CRLF /<CR>, <LF> /025 CJL JMS SLOOP SKP /ERROR RETURN ISZ SNDPRO /BUMP FOR NON-ERROR EXIT JMP I SNDPRO / DATA SEND LOOP. / ROUTINE TO GET CHARS FROM THE INPUT BUFFER AND SEND THEM TO REMOTE / VIA PACKET TRANSFERS. RETURN + 1 IF ERROR, + 2 IF DONE. SLOOP, 0 JMS I (INIOPB) /INIT OUTPUT PACKET HOLD BUFFER NL7777 /INITIALIZE INPUT FILE ROUTINE /019 CJL SLOP01, JMS I (GETBYTE) /GET A FILE CHARACTER /019 CJL JMP I SLOOP /FATAL I/O ERROR /026 CJL JMP SLOP15 /HERE ON EOF JMS I (OPBUF) /PUT INTO PACKET BUFFER SKP /RETURN HERE ON BUFFER FULL JMP SLOP01 /RETURN HERE IF STILL ROOM / PACKET IS FULL HERE, WE MUST SEND IT. FPACK /FORMAT A PACKET HOLDBF /DATA ADDRESS STDAT /"DAT" PACKET TYPE SLOP05, SPACK /SEND PACKET 1 /AWAIT RESPONSE SLOP90-2 /RESPONSE TABLE ADDRESS /027 CJL / HERE ON NAK OR FALL THRU ON UNDEFINED RESPONSE ABOVE. SLOP10, ISZ RTRYC /BUMP THE RE-TRY COUNTER JMP SLOP05 /TRY AGAIN JMP I SLOOP /TAKE ERROR RETURN /026 CJL / HERE ON END OF FILE -- SEND THEM WHAT WE HAVE. SLOP15, TAD I (OP2) /GET THE POINTER /052 CJL TAD (-HOLDBF) /COMPARE TO EMPTY VALUE /052 CJL SNA CLA /SKIP IF NOT EMPTY /052 CJL JMP SLOP35 /JUMP IF EMPTY /052 CJL FPACK /FORMAT A PACKET HOLDBF /ADDRESS OF DATA STDAT /"DAT" PACKET TYPE SLOP20, SPACK /SEND A PACKET 1 /AWAIT RESPONSE SLOP92-2 /DISPATCH TABLE ADDRESS /027 CJL / NAK FOR LAST PACKET. SLOP25, ISZ RTRYC /BUMP RE-TRY COUNTER JMP SLOP20 /TRY AGAIN JMP I SLOOP /TAKE ERROR RETURN /026 CJL / ACK FOR FINAL PACKET, SEND AN EOF PACKET. SLOP35, JMS I [SNDP] /SEND A PACKET NODATA /NO DATA STEOF /MAKE IT AN EOF PACKET JMP I SLOOP /NAK, TAKE ERROR RETURN JMP I SLOOP /OTHER THAN ACK, NAK; TAKE ERROR RETURN /026 CJL ISZ SLOOP /EOF ACCEPTED, BUMP FOR GOOD RETURN JMP I SLOOP /TAKE GOOD RETURN PAGE SLOP90, STACK; SLOP01 /ACK, CONTINUE STNAK; SLOP10 /NAK, HANDLE 0 SLOP92, STACK; SLOP35 /ACK, CONTINUE STNAK; SLOP25 /NAK, HANDLE 0 / COMMAND DISPATCH TABLE FOR SEND SERVICE. SNDP96, STACK; SNDP15 /FILE HEADER ACKNOWLEDGED STNAK; SNDP12 /NAK RETURNED, RE-TRY 0 /END OF TABLE SNDP98, STACK; SNDP20 /DATE ATTRIBUTE ACKNOWLEDGED 0 /END OF TABLE / ROUTINE TO HANDLE A "SEND-INIT" COMMAND. / RETURN + 1 IF ERROR. / RETURN + 2 IF SUCCESSFUL. SNDI00, 0 FPACK /FORMAT A PACKET INIDAT /ADDRESS OF DATA FOR PACKET STSIN /"SIN" PACKET TYPE SNDI02, SPACK /SEND A PACKET 1 /AWAIT RESPONSE SNDI80-2 /RESPONSE TABLE TYPE /027 CJL / HERE ON NAK OR UNDEFINED. SNDI05, ISZ RTRYC /BUMP RE-TRY COUNTER JMP SNDI02 /TRY AGAIN JMP I SNDI00 /TAKE ERROR EXIT / HERE ON ACK. SNDI10, JMS SETINI /SET UP THE INIT REGISTERS NL0001 CLL /NOW FLAG THE SEND/INIT DONE /032 CJL DCA INIFLG /BY MAKING THIS NON-ZERO ISZ SNDI00 /BUMP FOR NON-ERROR RETURN JMP I SNDI00 /BACK TO MAIN SEND PROCESSING SNDI80, STACK; SNDI10 /GOT AN ACK STNAK; SNDI05 /NAK 0 /END OF TABLE / ROUTINE TO MOVE THE SEND/INIT OR RECEIVE/INIT PACKET INTO THE INIT REGISTERS. SETINI, 0 TAD (RMAXL /GET ADDRESS OF RECEIVE INIT REGISTERS DCA MQ /SETUP FOR CLEAR ROUTINE /032 CJL TAD (RMAXL-INITEND) /GET -(NUMBER OF REGISTERS) /022 CJL CLEAR /CLEAR OUT A CHUNK OF MEMORY /M013 / TAD (RMAXL /GET ADDRESS OF RECEIVE INIT REGISTERS / DCA MQ /SETUP FOR MOVE ROUTINE /032 CJL TAD I [RRLEN] /GET LENGTH OF PACKET JUST INPUT TAD (-40-4 /COUNT OF DATA RECEIVED TAD (RMAXL-INITEND) /COMPARE TO MAXIMUM ALLOWED /022 CJL SMA SZA /SKIP IF NOT TOO MANY /022 CJL CLA /ELSE USE ALLOWED MAXIMUM /022 CJL TAD (INITEND-RMAXL) /RESTORE VALUE /022 CJL CIA /MAKE IT NEGATIVE DCA MOVE4 /SAVE FOR "MOVE" ROUTINE TAD (RRDTA /ADDRESS OF DATA IN PACKET MOVE /MOVE THE INIT REGISTERS JMP I SETINI /DONE IFZERO 1 < /D013 / ROUTINE TO SEND THE DATE IN A DATA PACKET. / RETURN + 1 IF ERROR, + 2 IF SUCCESSFUL. DATOUT, 0 JMS INIOPB /INSURE PACKET HOLD BUFFER INITIALIZED TAD (SETDAT /GET ADDRESS OF DATE DCA DATOU9 /PUT INTO POINTER DATOU1, TAD I DATOU9 /GET A CHAR ISZ DATOU9 /BUMP POINTER SPA /SKIP IF NOT ENT JMP DATOU2 /DONE JMS OPBUF /PUT INTO HOLD BUFFER SKP /HOLD FULL, SEND IT JMP DATOU1 /LOOP DATOU2, CLA CLL /INSURE CLEAR AC FPACK /FORMAT A PACKET HOLDBF /DATA ADDRESS STDAT /DATA PACKET DATOU3, SPACK /SEND THE PACKET 1 /GET RESPONSE DATOU7-2 /DISPATCH TABLE ADDRESS /027 CJL / HERE ON NAK OR UNDEFINED RESPONSE. DATOU4, ISZ RTRYC /BUMP RE-TRY COUNTER JMP DATOU3 /TRY AGAIN JMP I DATOUT /ABORT / HERE ON ACK. DATOU5, ISZ DATOUT /BUMP FOR GOOD RETURN JMP I DATOUT /EXIT DATOU7, STACK; DATOU5 /ACK STNAK; DATOU4 /NAK 0 DATOU9, 0 /TEMP POINTER FOR DATOUT > /D013 / HANDLE AN ABORT REQUEST. ABORT, CLA CLL /INSURE CLEAR AC DCA ABFLAG /CLEAR ABORT FLAG NOW /044 CJL TAD KMODE /GET CURRENT MODE TAD (-MSEND /IS IT A SEND? SZA /SKIP IF YES JMP ABORT2 /NOT SEND JMS I [SNDP] /SEND OUT A PACKET ABORT9 /WHICH HAS A "D" IN THE DATA STEOF /AND IS AN EOF PACKET NOP /WE GOT NAK BACK HERE NOP /WE GOT NEITHER NAK OR ACK HERE JMS I (BRKXMT) /BREAK THE SEND JMP ABORT3 /FINISH THE ABORT ABORT2, TAD (MSEND-MREC /CHECK IF IN RECEIVE MODE SZA CLA /SKIP IF YES JMP ABORT3 /JUST BACK TO COMMAND LOOP JMS I [SNDP] /SEND A PACKET BACK FOR AN ABORT IFZERO 1 < /D009 ABORT8 /WHICH HAS AN "X" IN THE DATA STACK /MAKE IT AN ACK PACKET NOP /NAK HERE NOP /NOT NAK OR ACK HERE > /D009 NODATA /NO DATA /A009 STBRK /BREAK TRANSMISSION /A009 NOP /NAK HERE /A009 CLA /NOT ACK OR NAK HERE /A009 TAD OFFLG /GET FILE OPEN FLAG /A009 SZA CLA /IS IT OPEN YET? /A009 JMS I [FILCLOSE] /CLOSE THE OUTPUT FILE /020 CJL CLA /ERROR DURING CLOSE **** FIX THIS **** ABORT3, TAD (ABMSG) /GET MESSAGE ADDRESS /044 CJL JMP I [CLOOP7] /DISPLAY THE ABORT ABORT9, "D&137 /DATA PACKET FOR SEND ABORT -1 PAGE /014 CJL / ROUTINE TO PRINT 8 BIT CHARS ON THE TTY. ENTER ROUTINE WITH THE ADDRESS OF / THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1. TEXT / TERMINATES ON A MINUS WORD. PRI8B0, 0 SZA /SKIP IF ADDRESS NOT IN AC JMP PRI8B1 /ADDRESS IS IN THE AC TAD I PRI8B0 /GET ADDRESS FROM CALL + 1 ISZ PRI8B0 /BUMP RETURN POINTER PRI8B1, DCA MQ /SAVE ADDRESS OF STRING /032 CJL TAD [P7ECHO] /GET CONSOLE OUTPUT ROUTINE ADDRESS /043 CJL JMS EIGHTB /AND SEND IT JMP I PRI8B0 /ALL DONE / ROUTINE TO SEND 8 BIT CHARS DOWN THE REMOTE LINE. ENTER ROUTINE WITH THE / ADDRESS OF THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1. / TEXT TERMINATES ON A MINUS WORD. REM8B0, 0 SZA /SKIP IF ADDRESS NOT IN AC JMP REM8B1 /ADDRESS IN AC TAD I REM8B0 /GET ADDRESS FROM CALL + 1 ISZ REM8B0 /BUMP RETURN REM8B1, DCA MQ /SAVE ADDRESS OF STRING /032 CJL TAD (COMOUT) /GET ADDRESS OF REMOTE OUTPUT ROUTINE /046 CJL JMS EIGHTB /AND SEND THE STRING JMP I REM8B0 /DONE / ROUTINE TO SEND 8 BIT DATA. ENTER WITH ADDRESS OF DATA IN THE MQ AND THE / ADDRESS OF THE ROUTINE TO TAKE EACH BYTE IN THE AC. TEXT TERMINATES ON A / MINUS WORD. EIGHTB, 0 DCA EIGHT5 /STORE POINTER TO ROUTINE TAD MQ /GET STRING POINTER /032 CJL DCA EIGHT6 /STORE IN LOCAL POINTER EIGHT1, TAD I EIGHT6 /GET A CHAR ISZ EIGHT6 /BUMP THE POINTER SPA /SKIP IF NOT EOL JMP EIGHT2 /GOT EOL JMS I EIGHT5 /CALL OUTPUT ROUTINE CLA CLL /INSURE CLEAR AC JMP EIGHT1 /LOOP EIGHT2, CLA CLL /CLEAR THE AC JMP I EIGHTB /DONE EIGHT5, 0 /POINTER TO ROUTINE TO DO OUTPUT EIGHT6, 0 /POINTER TO TEXT TO OUTPUT / ROUTINE TO UNPACK 6-BT CHARS FROM MEMORY. BEFORE CALLING INIT "GET6P" AS A / POINTER TO THE STRING LOCATION AND "GET6F" SHOULD BE ZEROED TO START WITH THE / TOP BYTE OF THE FIRST MEMORY LOCATION. GET60, 0 NL4000 /SET 4000 /032 CJL TAD GET6F /GET THE FLAG DCA GET6F /RETURN THE FLAG TAD I GET6P /GET TWO BYTES SZL /HIGH-ORDER WANTED? /032 CJL JMP GETSWT /JUMP IF NOT /032 CJL RTR;RTR;RTR /MOVE DOWN HIGH-ORDER HALF /032 CJL SKP /DON'T BUMP POINTER YET /032 CJL GETSWT, ISZ GET6P /BUMP TO NEXT WORD /032 CJL AND [77] /STRIP UNUSED BITS /016 CJL JMP I GET60 /DONE / LOCAL ROUTINE TO "FILN8" TO MAKE THE 6 BIT CHAR IN THE AC INTO 8 BITS AND / STORE IN A STRING. MOV8, .-. /6-BIT CHARACTER => 7-BIT CHARACTER /028 CJL SNA /SKIP IF SOMETHING PASSED /028 CJL TAD [" &77] /ELSE SUPPLY A <SPACE> /025 CJL TAD [" &77] /INVERT THE CHARACTER /028 CJL AND [77] /JUST SIX-BITS /014/016 CJL TAD [" &77] /MAKE IT SEVEN-BIT ASCII /028 CJL DCA I MOV8P /STORE IN THE STRING /028 CJL ISZ MOV8P /BUMP POINTER FOR NEXT TIME /028 CJL JMP I MOV8 /RETURN /028 CJL MOV8P, 0 /POINTER FOR "MOV8" ROUTINE / ROUTINE TO PULL A FILE NAME IN 6 BIT POINTED TO BY THE AC AND PLACE IN THE / FILE NAME BUFFER IN 8 BIT ADDING IN THE "." TO SEPARATE FILE NAME AND / EXTENSION. A MINUS WORD WILL FOLLOW THE NAME. FILN8, 0 DCA GET6P /SET POINTER FOR "GET6" DCA GET6F /SET FLAG FOR "GET6" TAD (NAMBUF /GET ADDRESS OF THE NAME BUFFER DCA MOV8P /SET IN A POINTER TAD (-6 /6 NAME CHARS TO DO DCA FILN8C /SAVE IN COUNTER GET6 /PULL A CHAR SZA /SKIP IF A SPACE JMS MOV8 /PUT INTO THE BUFFER ISZ FILN8C /BUMP COUNTER JMP .-4 /LOOP TILL ALL 6 DONE TAD (".&177) /GET A "." /034 CJL JMS MOV8 /PUT WITH FILE NAME NL7776 /SET -2 /032 CJL DCA FILN8C /2 EXTENSION CHARS GET6 /GET NEXT CHAR SZA /SKIP IF A SPACE JMS MOV8 /PUT WITH NAME ISZ FILN8C /BUMP COUNTER JMP .-4 /LOOP NL7777 /SET -1 /032 CJL DCA I MOV8P /TERMINATE THE STRING JMP I FILN8 /AND RETURN FILN8C, 0 /COUNTER FOR "FILN8" PAGE / CONSOLE I/O ROUTINES, ETC. /023 CJL / CONSOLE MESSAGE PRINT ROUTINE. / CALLING SEQUENCE: / JMS I [SCRIBE] /CALL MESSAGE PRINT ROUTINE / MESSAGEADDRESS /MESSAGE ADDRESS PASSED IN-LINE / AC CAN BE DIRTY ON CALL. / RETURNS WITH CLEAR AC. / MESSAGE FORMAT: / ALL UPPER-CASE CHARACTERS ARE ALLOWED TO EXIST IN THE MESSAGE EXCEPT '%' AND / '^' WHICH ARE RESERVED. A ZERO HALF-WORD TERMINATES THE MESSAGE STRING. IF / '%' IS DETECTED, A <CR> AND <LF> WILL BE OUTPUT. IF '^' IS DETECTED, THE / PREVAILING CASE WILL BE REVERSED. INITIAL CASE IS LOWER-CASE. IF 'UPONLY' IS / SET TO 7740, ALL CASE CHANGES ARE IGNORED AND THE OUTPUT IS FORCED TO / UPPER-CASE ONLY. THE MESSAGE ADDRESS MUST BE IN FIELD ONE AND MUST NOT / OVERLAP AREAS RESERVED FOR OTHER PURPOSES (OS/8 RESIDENT AT 17600-17777, USR / LOCATIONS 10000-11777, ETC.). SCRIBE, .-. /CONSOLE MESSAGE PRINT ROUTINE CLA /CLEAN UP /029 CJL TAD [P7ECHO] /POINT TO /043 CJL RSCRENT,DCA MSGOUT /CONSOLE PRINT ROUTINE TAD I SCRIBE /GET IN-LINE POINTER ARGUMENT DCA SCRPTR /STASH THE POINTER ISZ SCRIBE /BUMP PAST ARGUMENT TAD UPONLY /GET UPPER-ONLY VALUE /030 CJL TAD [140] /ADD ON LOWER-CASE VALUE /030 CJL DCA SCRCASE /STORE INITIAL CASE VALUE SCRLUP, CDF MSGFLD /GOTO MESSAGE FIELD TAD I SCRPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS SCRPRNT /PRINT IT CDF MSGFLD /GOTO MESSAGE FIELD TAD I SCRPTR /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE CDF PRGFLD /BACK TO OUR FIELD AND [77] /JUST SIX BITS SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD [-"^+100+"%] /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER SCRPRLF,JMS I MSGOUT /PRINT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,TAD [CNTRLM] /GET A <CR> JMS I MSGOUT /PRINT IT TAD [CNTRLJ] /GET A <LF> JMP SCRPRLF /CONTINUE THERE SCRFLIP,TAD UPONLY /GET UPPER-ONLY FLAG SZA CLA /SKIP IF OFF JMP I SCRPRNT /RETURN IF ON TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES DCA SCRCASE /STORE NEW INVERTED CASE JMP I SCRPRNT /RETURN / REMOTE LINE MESSAGE PRINT ROUTINE. / CALLING SEQUENCE: / JMS I [RSCRIBE] /CALL MESSAGE PRINT ROUTINE / MESSAGEADDRESS /MESSAGE ADDRESS PASSED IN-LINE / AC CAN BE DIRTY ON CALL. / RETURNS WITH CLEAR AC. / MESSAGE FORMAT AND RESTRICTIONS ARE IDENTICAL TO SCRIBE ROUTINE. RSCRIBE,.-. /REMOTE LINE MESSAGE PRINT ROUTINE CLA /CLEAN UP /029 CJL TAD RSCRIBE /GET OUR CALLER DCA SCRIBE /MAKE IT THEIRS TAD (COMOUT) /POINT TO REMOTE OUTPUT ROUTINE JMP RSCRENTRY /CONTINUE THERE / ESCAPE CHARACTER PRINT ROUTINE. / CALLING SEQUENCE: / TAD ESCHAR /OR OTHER CHARACTER TO PRINT / JMS I [ESCPRNT] /CALL ROUTINE / RETURNS WITH CLEAR AC HERE / CAUSES CHARACTER TO PRINT LITERALLY IF CHARACTER>37. / CAUSES MESSAGE "CONTROL-" FOLLOWED BY CHARACTER+100 IF CHARACTER<40. ESCPRNT,.-. /ESCAPE CHARACTER PRINT ROUTINE DCA ESCTEMP /SAVE PASSED VALUE TAD ESCTEMP /GET IT BACK TAD [-40] /COMPARE TO CONTROL LIMIT SMA CLA /SKIP IF LESS THAN LIMIT JMP ESPRINT /JUMP IF NOT JMS I [SCRIBE] /GIVE THEM THE CONTMSG /CONTROL MESSAGE TAD [100] /MAKE IT UPPER-CASE, NOT CONTROL ESPRINT,TAD ESCTEMP /GET ORIGINAL VALUE JMS I [P7ECHO] /PRINT IT /043 CJL JMP I ESCPRNT /RETURN MSGOUT= RSCRIBE /OUTPUT ROUTINE POINTER ESCTEMP,.-. /TEMPORARY FOR ESCPRNT ROUTINE SCRCASE,.-. /CURRENT MESSAGE CASE SCRCHAR,.-. /LATEST MESSAGE CHARACTER SCRPTR, .-. /MESSAGE POINTER PAGE / ROUTINE TO HANDLE THE "CONNECT" COMMAND. /025 CJL CONSRV, .-. /CONNECT SERVICE ROUTINE JMS I [CREST2] /SETUP CONSOLE OUTPUT ROUTINES /025 CJL JMS I [SCRIBE] /GIVE THE CONNMSG /OPENING MESSAGE TAD ESCHAR /GET THE CURRENT <ESCAPE> CHARACTER JMS I [ESCPRNT] /PRINT IT JMS I [SCRIBE] /GIVE THEM THE CON2MSG /BRIDGING MESSAGE JMS I [SCRIBE] /PRINT OUT THE CPUMSG /ACTUAL CPU TYPE JMS I [SCRIBE] /GIVE THEM THE CON3MSG /CLOSING MESSAGE CORESET,DCA ESCFLAG /CLEAR <ESCAPE> SEEN FLAG TAD ESCHAR /GET THE <ESCAPE> CHARACTER DCA ESCH /STORE IN SEARCH LIST JMS I (CONRESET) /RESET CONSOLE ROUTINES JMS I (REMRESET) /RESET REMOTE LINE ROUTINES CONNLUP,TAD KEYERROR /GET KEYBOARD ERROR FLAG SNA /SKIP IF KEYBOARD ERROR TAD RINERROR /ELSE GET REMOTE ERROR FLAG SZA CLA /SKIP IF NEITHER KEYBOARD NOR REMOTE LINE ERRORS JMP KERROR /JUMP IF KEYBOARD ERROR JMS I (CONTEST) /TEST IF CONSOLE CAN TAKE OUTPUT JMP TESTKEYBOARD /JUMP IF NOT JMS I (REMINPUT) /TEST IF ANY REMOTE INPUT SKP /SKIP IF NONE JMS I (CONOUT) /OUTPUT TO CONSOLE TESTKEY,TAD ECHOFLAG /GET LOCAL ECHO FLAG TAD ESCFLAG /ADD ON <ESCAPE> SEEN FLAG SNA CLA /SKIP IF LOCAL ECHO POSSIBLY NEEDED JMP NOLOCALECHO /JUMP IF NOT JMS I (CONTEST) /TEST IF CONSOLE CAN TAKE OUTPUT JMP BUFCHECK /JUMP IF NOT NOLOCAL,JMS I (REMTEST) /TEST IF REMOTE CAN TAKE OUTPUT JMP BUFCHECK /JUMP IF NOT JMS I (KEYINPUT) /TEST IF ANY KEYBOARD INPUT JMP BUFCHECK /JUMP IF NOT DCA KEYLATEST /SAVE FOR LATER TAD KEYLATEST /GET IT BACK AND [177] /WANT SEVEN-BIT VERSION FOR TESTS CIA /INVERT IT DCA TESTCHAR /SAVE FOR LATER TAD ESCFLAG /<ESCAPE> SEEN LAST TIME? SNA CLA /SKIP IF SO JMP NOESCAPE /JUMP IF NOT TAD TESTCHAR /GET TEST VAUE JMS I [SRCHTABLE] /SEARCH FOR IT ESCLIST-1-1 /SEARCH TABLE POINTER SNA CLA /SKIP IF FOUND JMP ESCOMPLAIN /JUMP IF NOT JMP I TABLEJUMP /GO WHERE YOU'RE SUPPOSED TO / COMES HERE IF PREVIOUS WAS NOT THE <ESCAPE> CHARACTER. NOESCAP,TAD TESTCHAR /GET THE LATEST CHARACTER TAD ESCHAR /COMPARE TO <ESCAPE> CHARACTER SZA CLA /SKIP IF IT MATCHES JMP OUTCHAR /JUMP IF NOT NL7777 /SET THE / DCA ESCFLAG /<ESCAPE> SEEN FLAG / JMP BUFCHECK /CONTINUE THERE JMP NOESENTRY /CONTINUE THERE / COMES HERE IF BOTH PREVIOUS AND LATEST ARE THE <ESCAPE> CHARACTER. ESCTYPE,DCA ESCFLAG /CLEAR THE <ESCAPE> SEEN FLAG AND OUTPUT / COMES HERE IF PREVIOUS AND LATEST CHARACTER ARE NOT THE <ESCAPE> CHARACTER. OUTCHAR,TAD ECHOFLAG /GET LOCAL ECHO FLAG SNA CLA /SKIP IF SET JMP NOECHO /JUMP IF NOT TAD KEYLATEST /GET LATEST CHARACTER JMS I (CONOUT) /OUTPUT TO CONSOLE NOECHO, TAD KEYLATEST /GET LATEST CHARACTER JMS I (REMOUT) /OUTPUT TO REMOTE JMP BUFCHECK /CONTINUE THERE / COMES HERE IF PREVIOUS WAS THE <ESCAPE> CHARACTER AND THE LATEST IS NOT / A VALID <ESCAPE> COMMAND CHARACTER. ESCOMPL,TAD [CNTRLG] /GET A <BEL> JMS I (CONOUT) /OUTPUT TO CONSOLE NOESENT,DCA ESCFLAG /CLEAR <ESCAPE> SEEN FLAG BUFCHEC,JMS I PUPSTATUS /UPDATE THE PORT STATUS /047 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR / KL8 INTERFACES. *BUFCHECK /OVERLAY DECMATE CODE /047 CJL BUFCHEC,NOP /DON'T CHECK PORT STATUS /047 CJL JMS I (RINUPDATE) /CHECK FOR MORE REMOTE INPUT JMS I (KEYUPDATE) /CHECK FOR MORE KEYBOARD INPUT JMS I (REMUPDATE) /CHECK FOR MORE REMOTE OUTPUT JMS I (CONUPDATE) /CHECK FOR MORE CONSOLE OUTPUT JMP CONNLUP /GO BACK FOR MORE / COMES HERE ON <ESCAPE> C(LOSE). ESCLOSE,ISZ CONSRV /BUMP TO GOOD RETURN JMP I CONSRV /RETURN KERRLUP,JMS I PUPSTATUS /UPDATE THE PORT STATUS /047 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY. THE DEFAULT INSTRUCTION IS FOR / KL8 INTERFACES. *KERRLUP /OVERLAY DECMATE CODE /047 CJL KERRLUP,NOP /DON'T CHECK PORT STATUS /047 CJL JMS I (RINUPDATE) /CHECK FOR MORE REMOTE INPUT JMS I (KEYUPDATE) /CHECK FOR MORE KEYBOARD INPUT JMS I (REMUPDATE) /CHECK FOR MORE REMOTE OUTPUT JMS I (CONUPDATE) /CHECK FOR MORE CONSOLE OUTPUT / COMES HERE ON KEYBOARD INPUT ERROR. KERROR, JMS I (CONTEST) /CONSOLE READY FOR OUTPUT? JMP KERRLUP /NO, GO WAIT AWHILE TAD I (CONINSERT) /GET CONSOLE INSERTION POINTER CIA /INVERT FOR TEST TAD I (CONREMOVE) /COMPARE TO CONSOLE REMOVAL POINTER SZA CLA /SKIP IF CONSOLE OUTPUT BUFFER EMPTY JMP KERRLUP /GO WAIT FOR AWHILE TAD KEYERROR /KEYBOARD INPUT ERROR? SNA CLA /SKIP IF SO JMP RIERTST /JUMP IF NOT JMS I [SCRIBE] /TELL THEM KERRMSG /WE HAD A KEYBOARD ERROR RIERTST,TAD RINERROR /REMOTE INPUT ERROR? SNA CLA /SKIP IF SO JMP CORESET /JUMP IF NOT JMS I [SCRIBE] /TELL THEM RIERMSG /WE HAD A REMOTE LINE ERROR JMP CORESET /RESTART / <ESCAPE> CHARACTER SEARCH LIST. ESCLIST,UPPERC; ESCLOSE /<ESCAPE> C(LOSE) LOWERC; ESCLOSE /<ESCAPE> C(LOSE) (LOWER-CASE) ESCH, .-.; ESCTYPE /<ESCAPE> <ESCAPE> 0 /THIS ENDS THE LIST / LOCAL ECHO FLAG FOR CONNECT MODE. ECHOFLA,INIECHO /0=DON'T ECHO, NON-ZERO=ECHO /039 CJL ESCFLAG,.-. /<ESCAPE> CHARACTER SEEN FLAG KEYLATE,.-. /LATEST KEYBOARD CHARACTER PUPSTAT,UPSTATUS /POINTER TO DECMATE STATUS UPDATE /047 CJL TESTCHA,.-. /LATEST KEYBOARD TEST CHARACTER PAGE / CONNECT-MODE SUPPORT ROUTINES. /047 CJL / CONSOLE KEYBOARD ROUTINES. /047 CJL / KEYBOARD INPUT ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (KEYINPUT) /CALL ROUTINE / NO INPUT /RETURN IF NO INPUT / INPUT /RETURN IF INPUT AVAILABLE / THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT. / THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN. KEYINPU,.-. /KEYBOARD INPUT ROUTINE TAD KEYINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD KEYREMOVE /COMPARE TO REMOVAL POINTER SNA CLA /SKIP IF BUFFER NOT EMPTY JMP KEYCHECK /JUMP IF BUFFER EMPTY TAD KEYREMOVE /GET REMOVAL POINTER DCA KEYTEMP /SAVE FOR LATER NL0001 /SET INCREMENT TAD KEYREMOVE /UPDATE REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [KEYBUFFER] /MAKE IT ABSOLUTE DCA KEYREMOVE /STORE UPDATED POINTER CDF BUFFLD /GOTO BUFFER FIELD TAD I KEYTEMP /GET THE LATEST CHARACTER CDF PRGFLD /BACK TO OUR FIELD SKP /DON'T GET ANOTHER CHARACTER /047 CJL / COMES HERE IF BUFFER IS EMPTY. KEYCHEC,JMS KEYGET /TRY TO GET A CHARACTER NOW /047 CJL ISZ KEYINPUT /GOT ONE, SO TAKE SKIP RETURN /047 CJL JMP I KEYINPUT /RETURN EITHER WAY / KEYBOARD BUFFER UPDATE ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (KEYUPDATE) /CALL ROUTINE / RETURNS WITH CLEAR AC. ANY KEYBOARD INPUT WHICH JUST OCCURRED WILL BE / BUFFERED; CALLS TO KEYINPUT WILL RETRIEVE THE CHARACTERS. KEYUPDA,.-. /KEYBOARD BUFFER UPDATE ROUTINE JMS KEYGET /TRY TO GET A CHARACTER NOW /047 CJL SKP /GOT ONE, DON'T LEAVE YET /047 CJL JMP I KEYUPDATE /CHARACTER NOT AVAILABLE NOW, RETURN /047 CJL CDF BUFFLD /GOTO BUFFER FIELD DCA I KEYINSERT /STORE IN THE BUFFER CDF PRGFLD /BACK TO OUR FIELD NL0001 /SET INCREMENT TAD KEYINSERT /UPDATE POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [KEYBUFFER] /MAKE IT ABSOLUTE DCA KEYINSERT /STORE BACK UPDATED POINTER TAD KEYINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD KEYREMOVE /COMPARE TO REMOVAL POINTER SNA CLA /SKIP IF NOT EQUAL KSERROR,ISZ KEYERROR /INDICATE KEYBOARD ERROR JMP I KEYUPDATE /RETURN JMP KSERROR /MAKE SURE ERROR IS INDICATED / KEYBOARD GET A CHARACTER ROUTINE. /047 CJL / CALLING SEQUENCE: / JMS KEYGET /CALL ROUTINE / CHARACTER AVAILABLE /RETURNS HERE WITH LATEST CHARACTER / NO CHARACTER AVAILABLE /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL / NORMAL RETURN HAS LATEST CHARACTER IN AC. / SKIP RETURN HAS CLEAR AC. / IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN. KEYGET, .-. /KEYBOARD GET A CHARACTER ROUTINE KGTEST, KSFIOT /FLAG UP? JMP KEYGNONE /NO, TAKE SKIP RETURN KGREAD, KRBIOT /YES, READ THE CHARACTER SPA /SKIP IF NO UART ERRORS ISZ KEYERROR /INDICATE KEYBOARD ERROR SKP /SKIP IF NOT TOO MANY ERRORS JMP .-2 /ENSURE KEYBOARD ERROR IS INDICATED AND [377] /JUST EIGHT-BIT DCA KEYTEMP /SAVE FOR NOW TAD FLOWFLAG /GET FLOW CONTROL FLAG SNA CLA /SKIP IF SET JMP KEYGEXIT /JUMP IF NOT TAD KEYTEMP /GET THE CHARACTER AND [177] /JUST SEVEN-BIT TAD [-CNTRLS] /COMPARE TO <^S> SNA /SKIP IF OTHER JMP KWATSET /JUMP IF IT MATCHES TAD [-CNTRLQ+CNTRLS]/COMPARE TO <^S> SNA CLA /SKIP IF OTHER JMP KWATCLEAR /JUMP IF IT MATCHES KEYGEXI,TAD KEYTEMP /GET THE CHARACTER JMP I KEYGET /TAKE IMMEDIATE RETURN / COMES HERE ON <^S> TO SET OUTPUT WAIT. KWATSET,NL4000 /SET WAIT VALUE / COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT. KWATCLE,DCA CONWAIT /STORE NEW STATE KEYGNON,ISZ KEYGET /BUMP RETURN ADDRESS JMP I KEYGET /TAKE SKIP RETURN / CONSOLE TERMINAL ROUTINES. / CONSOLE OUTPUT ROUTINE. / CALLING SEQUENCE: / TAD CHAR /CHARACTER TO OUTPUT IN AC / JMS I (CONOUT) /CALL ROUTINE / RETURN /RETURNS HERE WITH CLEAR AC CONOUT, .-. /CONSOLE OUTPUT ROUTINE DCA CONTEMP /SAVE PASSED VALUE TAD CONINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD CONREMOVE /COMPARE TO REMOVAL POINTER TAD CONWAIT /ADD ON WAIT STATUS SZA CLA /SKIP IF BUFFER EMPTY AND NOT WAITING /047 CJL JMP CSTUFF /JUMP IF CHARACTER MUST BE BUFFERED TAD CONTEMP /GET PASSED VALUE /047 CJL JMS I (CONPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL JMP CSTUFF /COULDN'T OUTPUT IT, SO BUFFER IT /047 CJL JMP I CONOUT /RETURN CSTUFF, TAD CONTEMP /GET THE CHARACTER CDF BUFFLD /GOTO BUFFER FIELD DCA I CONINSERT /STORE THE CHARACTER CDF PRGFLD /BACK TO OUR FIELD NL0001 /SET INCREMENT TAD CONINSERT /UPDATE POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [CONBUFFER] /MAKE IT ABSOLUTE DCA CONINSERT /STORE BACK UPDATED POINTER JMP I CONOUT /RETURN / CONSOLE OUTPUT TEST ROUTINE. / CALLING SEQUENCE: / JMS I (CONTEST) /CALL ROUTINE / NOT READY /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER / READY /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW CONTEST,.-. /CONSOLE OUTPUT TEST ROUTINE NL0001 /SET BUFFER INCREMENT TAD CONINSERT /GET UPDATED INSERTION POINTER CIA /INVERT FOR TEST TAD CONREMOVE /COMPARE TO REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS SZA CLA /SKIP IF BUFFER IS FULL ISZ CONTEST /BUMP RETURN IF NOT JMP I CONTEST /RETURN EITHER WAY / CONSOLE OUTPUT BUFFER UPDATE ROUTINE. / CALLING SEQUENCE: / JMS I (CONUPDATE) /CALL ROUTINE / RETURN /RETURN WITH CLEAR AC / THE CONSOLE OUTPUT BUFFERING ROUTINES WILL UPDATE POINTERS, ETC. IF ANY / STATUS HAS CHANGED SINCE THE LAST CALL. CONUPDA,.-. /CONSOLE OUTPUT UPDATE ROUTINE TAD CONWAIT /FLOW CONTROL WAIT SET? SZA CLA /SKIP IF NOT JMP I CONUPDATE /JUST RETURN IF SO TAD CONINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD CONREMOVE /COMPARE TO REMOVAL POINTER SNA CLA /SKIP IF BUFFER CONTAINS SOMETHING /047 CJL JMP I CONUPDATE /RETURN IF BUFFER EMPTY /047 CJL CDF BUFFLD /GOTO BUFFER FIELD TAD I CONREMOVE /GET A CHARACTER FROM THE BUFFER CDF PRGFLD /BACK TO OUR FIELD JMS I (CONPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL JMP I CONUPDATE /COULDN'T DO IT, SO JUST RETURN /047 CJL NL0001 /SET BUFFER INCREMENT TAD CONREMOVE /UPDATE REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [CONBUFFER] /MAKE IT ABSOLUTE DCA CONREMOVE /STORE UPDATED POINTER JMP I CONUPDATE /RETURN CONINSE,.-. /CONSOLE OUTPUT INSERTION POINTER CONREMO,.-. /CONSOLE OUTPUT REMOVAL POINTER / CONSOLE FLOW CONTROL WAIT FLAG. CONWAIT,.-. /0=DON'T WAIT, 4000=WAIT FOR <^Q> KEYINSE,.-. /KEYBOARD BUFFER INSERTION POINTER KEYREMO,.-. /KEYBOARD BUFFER REMOVAL POINTER CONTEMP=CONUPDATE /CONSOLE OUTPUT TEMPORARY KEYTEMP=CONUPDATE /KEYBOARD INPUT TEMPORARY PAGE / REMOTE LINE ROUTINES. / REMOTE LINE INPUT ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (REMINPUT) /CALL ROUTINE / NO INPUT /RETURN IF NO INPUT / INPUT /RETURN IF INPUT AVAILABLE / THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT. / THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN. REMINPU,.-. /REMOTE LINE INPUT ROUTINE TAD RININSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD RINREMOVE /COMPARE TO REMOVAL POINTER SNA CLA /SKIP IF BUFFER NOT EMPTY JMP RINCHECK /JUMP IF BUFFER EMPTY TAD RINREMOVE /GET REMOVAL POINTER DCA RINTEMP /SAVE FOR LATER NL0001 /SET INCREMENT TAD RINREMOVE /UPDATE REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD (RINBUFFER) /MAKE IT ABSOLUTE DCA RINREMOVE /STORE UPDATED POINTER CDF BUFFLD /GOTO BUFFER FIELD TAD I RINTEMP /GET THE LATEST CHARACTER CDF PRGFLD /BACK TO OUR FIELD DCA RINTEMP /SAVE FOR LATER TAD FLOWFLAG /GET FLOW CONTROL FLAG SNA CLA /SKIP IF SET JMP REMINEXIT /JUMP IF NOT NL4000 /SET WAITING VALUE TAD RINWAIT /ARE WE WAITING TO EMPTY? SZA CLA /SKIP IF SO JMP REMINEXIT /JUMP IF NOT TAD RININSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD RINREMOVE /COMPARE TO REMOVAL POINTER AND [BUFSIZE^3%4] /JUST 3/4 BITS SZA CLA /SKIP IF BUFFER NOW 1/4 FULL (OR LESS) JMP REMINEXIT /JUMP IF NOT NL7777 /SET BUFFER EMPTYING VALUE DCA RINWAIT /STORE FOR OUTPUT ROUTINE REMINEX,TAD RINTEMP /GET THE CHARACTER SKP /DON'T GET ANOTHER ONE /047 CJL / COMES HERE IF REMOTE LINE INPUT BUFFER IS EMPTY. RINCHEC,JMS RINGET /TRY TO GET A CHARACTER NOW /047 CJL ISZ REMINPUT /GOT ONE, SO TAKE SKIP RETURN /047 CJL JMP I REMINPUT /RETURN EITHER WAY / REMOTE LINE INPUT BUFFER UPDATE ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (RINUPDATE) /CALL ROUTINE / RETURNS WITH CLEAR AC. ANY REMOTE LINE INPUT WHICH JUST OCCURRED WILL BE / BUFFERED; CALLS TO REMINPUT WILL RETRIEVE THE CHARACTERS. RINUPDA,.-. /REMOTE LINE INPUT BUFFER UPDATE ROUTINE JMS RINGET /TRY TO GET A CHARACTER NOW /047 CJL SKP /GOT ONE, DON'T LEAVE YET /047 CJL JMP I RINUPDATE /CHARACTER NOT AVAILABLE NOW, RETURN /047 CJL CDF BUFFLD /GOTO BUFFER FIELD DCA I RININSERT /STORE IN THE BUFFER CDF PRGFLD /BACK TO OUR FIELD NL0001 /SET INCREMENT TAD RININSERT /UPDATE POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD (RINBUFFER) /MAKE IT ABSOLUTE DCA RININSERT /STORE BACK UPDATED POINTER TAD RININSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD RINREMOVE /COMPARE TO REMOVAL POINTER SNA /SKIP IF BUFFER NOT FULL ISZ RINERROR /INDICATE REMOTE LINE INPUT ERROR SKP /SKIP IF NO OVERFLOW JMP .-2 /ENSURE ERROR IS SET TAD [BUFSIZE^3%4] /SUBTRACT 1/4 BUFFER'S WORTH AND [BUFSIZE^3%4] /JUST 3/4 BUFFER BITS SNA CLA /SKIP IF NOT 3/4 FULL TAD FLOWFLAG /ELSE CHECK IF FLOW CONTROL IS ENABLED SNA CLA /SKIP IF 3/4 FULL AND FLOW CONTROL IS ENABLED JMP I RINUPDATE /JUST RETURN TAD RINWAIT /GET INPUT WAIT FLAG SNA CLA /SKIP IF ALREADY SET ISZ RINWAIT /SET TO <^S> STATE JMP I RINUPDATE /RETURN / REMOTE LINE GET A CHARACTER ROUTINE. /047 CJL / CALLING SEQUENCE: / JMS I (RINGET) /CALL ROUTINE / CHARACTER AVAILABLE /RETURNS HERE WITH LATEST CHARACTER / NO CHARACTER AVAILABLE /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL / NORMAL RETURN HAS LATEST CHARACTER IN AC. / SKIP RETURN HAS CLEAR AC. / IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN. RINGET, .-. /REMOTE LINE GET A CHARACTER ROUTINE RINTEST,TAD INFLAG /IS INPUT AVAILABLE? RINGT0, SNA CLA /SKIP IF SO RINREAD,JMP RINGNONE /JUMP IF NOT RINGT1, DCA INFLAG /CLEAR AVAILABILITY FLAG RINGT2, IRB /READ IN THE CHARACTER / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS / ARE FOR KL8 INTERFACES. *RINTEST /OVERLAY DECMATE II CODE RINTEST,RKSFIOT /FLAG UP? RINGT0, JMP RINGNONE /NO, TAKE SKIP RETURN RINREAD,RKRBIOT /YES, READ THE CHARACTER RINGT1, SKP /NO ERRORS ON DECMATE I / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *RINGT1 /OVERLAY DECMATE I CODE RINGT1, SPA /SKIP IF NO UART ERRORS RING2, ISZ RINERROR /INDICATE REMOTE LINE INPUT ERROR SKP /SKIP IF NOT TOO MANY ERRORS JMP .-2 /ENSURE REMOTE LINE INPUT ERROR IS INDICATED AND [377] /JUST EIGHT-BIT DCA RINTEMP /SAVE FOR NOW TAD FLOWFLAG /GET FLOW CONTROL FLAG SNA CLA /SKIP IF SET JMP RINGEXIT /JUMP IF NOT TAD RINTEMP /GET THE CHARACTER AND [177] /JUST SEVEN-BIT TAD [-CNTRLS] /COMPARE TO <^S> SNA /SKIP IF OTHER JMP RWATSET /JUMP IF IT MATCHES TAD [-CNTRLQ+CNTRLS]/COMPARE TO <^S> SNA CLA /SKIP IF OTHER JMP RWATCLEAR /JUMP IF IT MATCHES RINGEXI,TAD RINTEMP /GET THE CHARACTER JMP I RINGET /TAKE IMMEDIATE RETURN / COMES HERE ON <^S> TO SET OUTPUT WAIT. RWATSET,NL4000 /SET WAIT VALUE / COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT. RWATCLE,DCA REMWAIT /STORE NEW STATE RINGNON,ISZ RINGET /BUMP RETURN ADDRESS JMP I RINGET /TAKE SKIP RETURN / REMOTE LINE RESET ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (REMRESET) /CALL ROUTINE / RETURN /RETURN WITH CLEAR AC / RETURNS WITH CLEAR AC AND ALL REMOTE LINE VARIABLES RESET. REMRESE,.-. /REMOTE LINE RESET ROUTINE TAD [REMBUFFER] /SETUP THE REMOTE LINE DCA REMINSERT /OUTPUT INSERTION POINTER TAD [REMBUFFER] /SETUP THE REMOTE LINE DCA REMREMOVE /OUTPUT REMOVAL POINTER TAD (RINBUFFER) /SETUP THE REMOTE LINE DCA RININSERT /INPUT INSERTION POINTER TAD (RINBUFFER) /SETUP THE REMOTE LINE DCA RINREMOVE /INPUT REMOVAL POINTER DCA REMWAIT /CLEAR REMOTE OUTPUT WAIT DCA RINWAIT /CLEAR REMOTE INPUT WAIT DCA RINERROR /CLEAR REMOTE INPUT ERROR JMP I REMRESET /RETURN RININSE,.-. /REMOTE INPUT INSERTION POINTER RINREMO,.-. /REMOTE INPUT REMOVAL POINTER RINTEMP,.-. /REMOTE INPUT TEMPORARY /047 CJL PAGE / REMOTE LINE OUTPUT ROUTINE. / CALLING SEQUENCE: / TAD CHAR /CHARACTER TO OUTPUT IN AC / JMS I (REMOUT) /CALL ROUTINE / RETURN /RETURNS HERE WITH CLEAR AC REMOUT, .-. /REMOTE LINE OUTPUT ROUTINE DCA REMTEMP /SAVE PASSED VALUE TAD REMINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD REMREMOVE /COMPARE TO REMOVAL POINTER TAD REMWAIT /ADD ON WAIT STATUS SZA CLA /SKIP IF BUFFER EMPTY AND NOT WAITING /047 CJL JMP RSTUFF /JUMP IF CHARACTER MUST BE BUFFERED TAD REMTEMP /GET PASSED VALUE /047 CJL JMS I (REMPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL JMP RSTUFF /COULDN'T OUTPUT IT, SO BUFFER IT /047 CJL JMP I REMOUT /RETURN RSTUFF, TAD REMTEMP /GET THE CHARACTER CDF BUFFLD /GOTO BUFFER FIELD DCA I REMINSERT /STORE IN BUFFER CDF PRGFLD /BACK TO OUR FIELD NL0001 /SET BUFFER INCREMENT TAD REMINSERT /BUMP INSERTION POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [REMBUFFER] /MAKE IT ABSOLUTE DCA REMINSERT /STORE UPDATED POINTER JMP I REMOUT /RETURN / REMOTE LINE OUTPUT TEST ROUTINE. / CALLING SEQUENCE: / JMS I (REMTEST) /CALL ROUTINE / NOT READY /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER / READY /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW / AC WILL BE CLEARED AFTER THE CALL. REMTEST,.-. /REMOTE LINE OUTPUT TEST ROUTINE NL0001 /SET BUFFER INCREMENT TAD REMINSERT /GET INSERTION POINTER CIA /INVERT FOR TEST TAD REMREMOVE /COMPARE TO REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS SZA CLA /SKIP IF BUFFER IS FULL ISZ REMTEST /BUMP RETURN IF BUFFER IS NOT FULL JMP I REMTEST /RETURN EITHER WAY / REMOTE LINE OUTPUT BUFFER UPDATE ROUTINE. / CALLING SEQUENCE: / JMS I (REMUPDATE) /CALL ROUTINE / RETURN /RETURN WITH CLEAR AC / THE REMOTE LINE OUTPUT BUFFERING ROUTINES WILL UPDATE POINTERS, ETC. IF ANY / STATUS HAS CHANGED SINCE THE LAST CALL. REMUPDA,.-. /REMOTE LINE OUTPUT UPDATE ROUTINE TAD RINWAIT /GET INPUT WAIT FLAG CLL RAL /MAIN STATE BIT TO LINK SNA CLA /SKIP IF OUTPUT FLOW CHARACTER NEEDED /047 CJL JMP REMCHECK /JUMP IF CHARACTER NOT NEEDED NOW /047 CJL TAD (CNTRLQ) /ASSUME RELEASE CHARACTER NEEDED /047 CJL SNL /SKIP IF SO /047 CJL TAD [CNTRLS-CNTRLQ] /ELSE CHANGE IT TO HOLD CHARACTER /047 CJL JMS I (REMPUT) /TRY TO OUTPUT IT NOW /047 CJL JMP REMCHECK /COULDN'T DO IT, FORGET IT FOR NOW /047 CJL CML RAR /SET NEW STATE VALUE /047 CJL DCA RINWAIT /STORE IT REMCHEC,TAD REMWAIT /GET OUTPUT WAIT FLAG SZA CLA /SKIP IF NOT WAITING JMP I REMUPDATE /JUST RETURN IF WAITING TAD REMINSERT /GET OUTPUT INSERTION POINTER CIA /INVERT FOR TEST TAD REMREMOVE /COMPARE TO OUTPUT REMOVAL POINTER SNA CLA /SKIP IF BUFFER CONTAINS SOMETHING /047 CJL JMP I REMUPDATE /RETURN IF BUFFER EMPTY /047 CJL CDF BUFFLD /GOTO BUFFER FIELD TAD I REMREMOVE /GET A CHARACTER FROM THE BUFFER CDF PRGFLD /BACK TO OUR FIELD JMS I (REMPUT) /TRY TO OUTPUT THE CHARACTER NOW /047 CJL JMP I REMUPDATE /COULDN'T DO IT, SO JUST RETURN /047 CJL NL0001 /SET BUFFER INCREMENT TAD REMREMOVE /BUMP REMOVAL POINTER AND [BUFSIZE-1] /JUST BUFFER BITS TAD [REMBUFFER] /MAKE IT ABSOLUTE DCA REMREMOVE /STORE UPDATED POINTER JMP I REMUPDATE /RETURN REMTEMP=REMUPDATE /REMOTE OUTPUT TEMPORARY / LOW-LEVEL CONSOLE OUTPUT ROUTINE. /047 CJL / CALLING SEQUENCE: / [CHARACTER TO OUTPUT IN THE AC] / JMS I (CONPUT) /CALL ROUTINE / NO OUTPUT /RETURNS HERE IF OUTPUT UNAVAILABLE / OUTPUT /RETURNS HERE IF CHARACTER WAS OUTPUT CONPUT, .-. /CONSOLE OUTPUT ROUTINE CONTSF, TSFIOT /FLAG UP? JMP CONCLEAR /NO, FORGET IT CONTLS, TLSIOT /YES, OUTPUT THE CHARACTER NOW ISZ CONPUT /TAKE SKIP RETURN CONCLEA,CLA /CLEAN UP JMP I CONPUT /RETURN EITHER WAY / CONSOLE RESET ROUTINE. /026 CJL / CALLING SEQUENCE: / JMS I (CONRESET) /CALL ROUTINE / RETURN /RETURN WITH CLEAR AC / RETURNS WITH CLEAR AC AND ALL CONSOLE VARIABLES RESET. CONRESE,.-. /CONSOLE RESET ROUTINE TAD [CONBUFFER] /SETUP THE DCA I (CONINSERT) /CONSOLE OUTPUT INSERTION POINTER TAD [CONBUFFER] /SETUP THE DCA I (CONREMOVE) /CONSOLE OUTPUT REMOVAL POINTER TAD [KEYBUFFER] /SETUP THE DCA I (KEYINSERT) /KEYBOARD INSERTION POINTER TAD [KEYBUFFER] /SETUP THE DCA I (KEYREMOVE) /KEYBOARD REMOVAL POINTER DCA I (CONWAIT) /CLEAR OUTPUT WAIT DCA KEYERROR /CLEAR KEYBOARD ERROR JMP I CONRESET /RETURN / LOW-LEVEL REMOTE LINE OUTPUT ROUTINE. /047 CJL / CALLING SEQUENCE: / [CHARACTER TO OUTPUT IN THE AC] / JMS I (REMPUT) /CALL ROUTINE / NO OUTPUT /RETURNS HERE IF OUTPUT UNAVAILABLE / OUTPUT /RETURNS HERE IF CHARACTER WAS OUTPUT REMPUT, .-. /REMOTE LINE OUTPUT ROUTINE DM1AN2, AND [377] /ENSURE EIGHT BIT /049 CJL / THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY. THE DEFAULT INSTRUCTION IS / FOR KL8 INTERFACES. *DM1AN2 /OVERLAY DECMATE II CODE /049 CJL DM1AN2, SKP /WE'RE NOT A DECMATE I /049 CJL TAD [400] /SET WRITE BIT /049 CJL REMTSF, DCA RMPTEMP /SAVE PASSED VALUE RMPUT0, TAD OUTFLAG /CHECK IF OUTPUT IS AVAILABLE REMTLS, SNA CLA /SKIP IF SO RMPUT1, JMP I REMPUT /RETURN IF NOT REMCLEA,TAD RMPTEMP /GET THE PASSED VALUE RMPUT2, OLS /OUTPUT THE CHARACTER NOW / THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY. THE DEFAULT INSTRUCTIONS / ARE FOR KL8 INTERFACES. *REMTSF /OVERLAY DECMATE II CODE REMTSF, RTSFIOT /FLAG UP? RMPUT0, JMP REMCLEAR /NO, FORGET IT REMTLS, RTLSIOT /YES, OUTPUT THE CHARACTER NOW RMPUT1, ISZ REMPUT /TAKE SKIP RETURN REMCLEA,CLA /CLEAN UP RMPUT2, JMP I REMPUT /RETURN EITHER WAY CLA /CLEAN UP DCA OUTFLAG /INDICATE OUTPUT IS UNAVAILABLE ISZ REMPUT /TAKE SKIP RETURN JMP I REMPUT /RETURN TO CALLER RMPTEMP=CONRESET /REMOTE OUTPUT TEMPORARY PAGE / SEVEN-BIT COMMAND TABLES. /034 CJL CMDTBL= . /COMMAND TABLE HERE "C&177; "O&177; "N&177 /\ "N&177; "E&177; "C&177 / >CONNECT COMMAND "T&177; -1 // CONSRV /CONNECT ROUTINE ADDRESS "F&177; "I&177; "N&177 /\ "I&177; "S&177; "H&177 / >FINISH COMMAND -1 // FINSRV /FINISH ROUTINE ADDRESS "E&177; "X&177; "I&177 /EXIT "T&177; -1 /COMMAND EXITKERMIT /EXIT ROUTINE ADDRESS "S&177; "E&177; "N&177 /SEND "D&177; -1 /COMMAND SNDSRV /SEND ROUTINE ADDRESS "G&177; "E&177; "T&177 /GET -1 /COMMAND GETSRV /GET ROUTINE ADDRESS "R&177; "E&177; "C&177 /\ "E&177; "I&177; "V&177 / >RECEIVE COMMAND "E&177; -1 // RECSRV /RECEIVE ROUTINE ADDRESS "H&177; "E&177; "L&177 /HELP "P&177; -1 /COMMAND HELPSRV /HELP ROUTINE ADDRESS -1 /THIS ENDS THE TABLE /034 CJL / REMOTE PACKET INPUT BUFFER. /014 CJL RRBUF, 0 /MARK RRLEN, 0 /PACKET LENGTH RRSEQ, 0 /PACKET SEQ RRTYP, 0 /PACKET TYPE DECIMAL RRDTA, ZBLOCK 91 /DATA GOES HERE OCTAL RTERMI, 0 /ADD LOCATION WHERE TERMINATOR IS STORED/A004 /ON RECEIVE IF BUFFER IS MAXIMUM LENGTH /A004 / REMOTE PACKET OUTPUT BUFFER RSBUF, CNTRLA /PACKET BUFFER (BEGINS WITH "SOH") /034 CJL RSLEN, 0 /PACKET LENGTH GOES HERE RSSEQ, 0 /PACKET SEQUENCE GOES HERE RSTYP, 0 /PACKET TYPE GOES HERE DECIMAL RSDTA, ZBLOCK 91 /DATA GOES HERE 0 /CHECKSUM HERE ON MAX PACKET 0 /EOL (IF USED HERE ON MAX PACKET) 0 /INTERNAL TERMINATOR HERE ON MAX PACKET OCTAL / SEND-INIT PACKET DEFINITION INIDAT, DECIMAL 94+32 /94 CHARS MAX OCTAL "/&177 /15 SECOND TIME-OUT /M013/014 CJL " &177 /NO PADDING 0+100&177 /NO PADDING CHAR " &177+15 /CR FOR EOL "#&177 /QUOTE CHAR "N&137 /NO 8TH BIT QUOTING "1&177 /CHECK TYPE 1 " &177 /NO REPEAT CHAR " &177+0 /NO EXTRA CAPABILITY NODATA, -1 /END OF DATA (USE THIS FOR SENDING NO-DATA) PAGE /GET TO NEXT PAGE /028 CJL / NO-INTERRUPT CONSOLE INPUT/OUTPUT SUPPORT ROUTINES. /023 CJL / MODIFIED FOR FORCED-ECHO AND COLUMN-COUNTING. /043 CJL / CONSOLE INPUT ROUTINE. RETURNS LATEST CHARACTER WITHOUT ECHOING. MAY BE / CALLED WITH DIRTY AC. RETURNS LATEST SEVEN-BIT CHARACTER TYPED WHILE FIELDING / POTENTIAL <^S>/<^Q> PROTOCOL. INPUT, .-. /CONSOLE INPUT ROUTINE INPWAIT,JMS CHKUP /TRY TO GET A CHARACTER TAD INCHAR /GET THE CHARACTER SNA /SKIP IF ANYTHING CAME IN JMP INPWAIT /WAIT FOR ANYTHING JMP I INPUT /RETURN WITH LATEST CHARACTER / CONSOLE OUTPUT ROUTINE. OUTPUTS CHARACTER IN AC (INCLUDING <HT> VIA / SIMULATION). RETURNS WITH CLEAR AC. SUBJECT TO CONSOLE ECHO STATUS (ECHOSW). P7CH, .-. /CONSOLE OUTPUT ROUTINE TAD (-CNTRLI) /COMPARE TO <HT> SNA /SKIP IF OTHER JMP DOTAB /JUMP IF <HT> TAD L11/(CNTRLI) /RESTORE THE CHARACTER JMS P7CHAR /PRINT IT (UPDATING COLUMN COUNT) JMP I P7CH /RETURN DOTAB, TAD [" &177] /GET A <SPACE> JMS P7CHAR /OUTPUT IT TAD COLUMN /GET CURRENT COLUMN COUNT AND [7] /JUST TAB BITS SZA CLA /SKIP IF NOW AT NEW TAB STOP JMP DOTAB /ELSE KEEP GOING JMP I P7CH /RETURN / FORCED-ECHO CONSOLE OUTPUT ROUTINE. SAME AS P7CH BUT CLEARS ECHOSW BEFORE / OUTPUT OF THE CHARACTER. P7ECHO, .-. /CONSOLE OUTPUT WITH FORCED-ECHO ROUTINE DCA P7TEMP /SAVE PASSED VALUE DCA ECHOSW /CLEAR ECHO STATUS TAD P7TEMP /RESTORE THE CHARACTER JMS P7CH /CALL MAIN ROUTINE JMP I P7ECHO /RETURN CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CALL LOW-LEVEL INPUT CHECK ROUTINE SNA /SKIP IF ANYTHING CAME BACK JMP CHKCLR /ELSE FORGET IT TAD (-CNTRLP) /COMPARE TO <^P> SNA /SKIP IF OTHER JMP DOUP /GO HANDLE <^P> THERE IAC /TAD (-CNTRLO+CNTRLP)/COMPARE TO <^O> SNA /SKIP IF OTHER JMP DOUO /GO HANDLER <^O> THERE TAD (-CNTRLS+CNTRLO) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /RETURN ON UNIMPORTANT CHARACTERS UQWAIT, JMS CTLCTST /CALL LOW-LEVEL INPUT CHECK ROUTINE TAD (-CNTRLQ) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP UQWAIT /ELSE WAIT FOR <^Q> FOREVER CHKCLR, DCA INCHAR /OBLITERATE INPUT CHARACTER JMP I CHKUP /RETURN / COMES HERE TO HANDLE <^P>. DOUP, TAD ("P&177) /GET A "P" JMS UPRINT /PRINT "^P" JMP I UPADDRESS /GO WHERE YOU SHOULD / COMES HERE TO HANDLE <^O>. DOUO, TAD ("O&177) /GET AN "O" JMS UPRINT /PRINT "^O" NL4000 /SET REVERSING BIT TAD ECHOSW /REVERSE THE ECHO STATE DCA ECHOSW /STORE BACK JMP CHKCLR /OBLITERATE <^O> AND RETURN CTLCTST,.-. /LOW-LEVEL <^C> TEST ROUTINE CLA /CLEAN UP KSFLOC, KSFIOT /FLAG UP? JMP I CTLCTST /NO, JUST RETURN KRSZAP, KRSIOT /**** 6120 **** KRBIOT AND [177] /JUST SEVEN-BIT DCA INCHAR /SAVE THE CHARACTER NL7775 /SET -<^C> VALUE TAD INCHAR /COMPARE TO CHARACTER SNA CLA /SKIP IF OTHER THAN <^C> JMP I UCADDRESS /JUMP IF <^C> KCCZAP, KCCIOT /**** 6120 **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN P7CHAR, .-. /LOWER-LEVEL CONSOLE PRINT ROUTINE DCA P7TEMP /SAVE PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD ECHOSW /GET CURRENT ECHO STATUS SPA CLA /SKIP IF ECHO ON JMP P7OFF /JUMP IF ECHO OFF TAD P7TEMP /GET THE PASSED VALUE BACK JMS P7OUT /TRY TO OUTPUT IT JMP P7AGN /COULDN'T OUTPUT, GO WAIT THERE P7OFF, JMS CHKUP /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE CHARACTER BACK AND [140] /JUST QUADRANT BITS SZA CLA /SKIP IF CONTROL CHARACTER ISZ COLUMN /BUMP COLUMN IF PRINTING CHARACTER L11, CNTRLI/NOP /JUST IN CASE TAD P7TEMP /GET THE CHARACTER AGAIN TAD (-CNTRLM) /COMPARE TO <CR> SNA /SKIP IF NOT <CR> DCA COLUMN /CLEAR COLUMN COUNT ON <CR> TAD (-CNTRLH+CNTRLM)/COMPARE TO <BS> SNA CLA /SKIP IF OTHER NL7777 /SET BACKUP VALUE TAD COLUMN /UPDATE COLUMN COUNT DCA COLUMN /STORE BACK JMP I P7CHAR /RETURN P7OUT, .-. /LOW-LEVEL CONSOLE OUTPUT ROUTINE P7TSF, TSFIOT /FLAG UP? JMP I P7OUT /NO, TAKE IMMEDIATE RETURN WITH AC INTACT P7TLS, TLSIOT /YES, OUTPUT IT CLA /CLEAN UP ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /TAKE SKIP RETURN TO CALLER / COMES HERE TO HANDLE <^C> IF SO ENABLED. UPCPRT, TAD ("C&177) /GET A "C" JMS UPRINT /PRINT "^C" KCCZP2, KCCIOT /**** 6120 **** 0000 JMP I [CLOOP] /RESTART UPRINT, .-. /"^"<CHARACTER> PRINTING ROUTINE DCA P7TEMP /SAVE PASSED VALUE TAD ("^&177) /GET AN "^" JMS P7OUT /OUTPUT IT JMP .-1 /WAIT FOR IT TAD P7TEMP /GET PASSED VALUE JMS P7OUT /OUTPUT IT JMP .-1 /WAIT FOR IT JMP I UPRINT /RETURN P7TEMP, .-. /OUTPUT ROUTINE TEMPORARY PAGE / HANDLER I/O BUFFER DEFINITIONS. /014 CJL HNDLR= . /BUFFER FOR DISK I/O HANDLER /014 CJL *PAGCNT^200+HNDLR /RESET ORIGIN PAST HANDLER BUFFER /014 CJL IFNZRO SBOOT-.&4000 <ERROR .> /028 CJL *SBOOT-1 /JUST BEFORE EXIT ADDRESS /025 CJL EXITKER=. /WHERE TO EXIT TO /025 CJL / ONCE-ONLY INITIALIZATION CODE. /024 CJL *HNDLR /OVER AVAILABLE SPACE INITIAL,CLA CLL /CLEAN UP COUTINI,TLSIOT /RAISE CONSOLE OUTPUT FLAG /046 CJL TAD INITIA/(CLA CLL)/GET REPLACEMENT INSTRUCTION DCA I [CLOOP] /DON'T COME BACK TO US JMS I (MACHINE) /IDENTIFY CPU TYPE DCA CPUTEMP /SAVE IT TAD CPUTEMP /GET CPU TYPE TAD (-13) /COMPARE TO DEADLY 6120 VALUE SNA CLA /SKIP IF OTHER JMP INI6120 /JUMP IF IT MATCHES ROUTINI,RTLSIOT /INITIALIZE REMOTE OUTPUT /046 CJL RININIT,RKRBIOT /INITIALIZE REMOTE INPUT /046 CJL CLA /CLEAN UP INITPRT,JMS I [SCRIBE] /GIVE THEM THE INITMSG /OPENING MESSAGE JMS I [SCRIBE] /GIVE THEM THE DAYMSG /DAY MESSAGE JMS I [SCRIBE] /GIVE THEM THE MONMSG /MONTH MESSAGE JMS I [SCRIBE] /GIVE THEM THE YEARMSG /YEAR MESSAGE JMS I [SCRIBE] /GIVE THEM THE CPUTMSG /CPU ID MESSAGE TAD CPUTEMP /*1 CLL RTL /*4 TAD CPUTEMP /*5 TAD (CPULIST) /POINT TO PROPER MESSAGE DCA TST6120 /STORE IN-LINE JMS I [SCRIBE] /TELL THEM THEIR TST6120,0 /ACTUAL CPU ID JMS I [SCRIBE] /GIVE THEM THE CLOSMSG /CLOSING MESSAGE DMPRZAP,JMP .+3 /**** DECMATE USAGE DETECTED **** 0000 JMS I [SCRIBE] /GIVE THEM THE SPZAP, DMPOMSG /DECMATE PORT MESSAGE JMS I [SCRIBE] /GIVE THEM THE CRLF /END OF LINE JMS I [SCRIBE] /GIVE THEM THE LCLMSG /LOCAL PREFERENCE MESSAGE JMS I [SCRIBE] /TELL THEM THEY CAN THLPMSG /ASK FOR HELP TAD CPUTEMP /GET CPU TYPE CLL RTL /*4 TAD (CPUPRMPT-1) /POINT TO PROPER ENTRY DCA XR0 /STASH THE POINTER TAD (-4) /GET MOVE COUNT JMS MESMOVE /MOVE THE PROPER PROMPT TEXT PROMID-1 /TO THERE TAD CPUTEMP /*1 CLL RTL /*4 TAD CPUTEMP /*5 TAD (CPUIDLST-1) /POINT TO PROPER ENTRY DCA XR0 /STASH THE POINTER TAD (-5) /GET MOVE COUNT JMS MESMOVE /MOVE THE PROPER CPU ID TEXT CPUMSG-1 /TO THERE CIF USRFLD /GOTO USR FIELD /035 CJL JMS I (USR) /CALL USER SERVICE ROUTINE /035 CJL USRIN /LOCK USR IN /035 CJL / DO FURTHER INITIALIZATION HERE. JMP I [CLOOP] /GO BACK TO KERMIT PROPER / COMES HERE TO INITIALIZE 6120-BASED MACHINES. /046 CJL INI6120,DCA I (KCCZAP) /ELIMINATE KCCIOT DCA I (KCCZP2) /ELIMINATE KCCIOT ISZ I (KRSZAP) /TURN KRSIOT ISZ I (KRSZAP) /INTO KRBIOT TAD ROUTINITIALIZE /GET OUTPUT INITIALIZE INSTRUCTION /046 CJL TAD (-6336) /COMPARE TO POSSIBLE VALUE /046 CJL SZA CLA /SKIP IF IT MATCHES SERIAL PRINTER VALUE/046 CJL JMP TRYDM1 /JUMP IF NOT CONFIGURED FOR SERIAL PORT /046 CJL TAD RININITIALIZE /GET INPUT INITIALIZE INSTRUCTION /046 CJL TAD (-6326) /COMPARE TO POSSIBLE VALUE /046 CJL SNA CLA /SKIP IF NOT CONFIGURED FOR SERIAL PORT /046 CJL JMP DMSER /JUMP IF SERIAL PORT CONFIGURATION /046 CJL TRYDM1, CLSK /SKIP ON, CLEAR CLOCK FLAG IF DECMATE II/046 CJL NOP /JUST IN CASE /046 CJL CLCL /CLEAR VT278 CLOCK FLAG /046 CJL NOP /JUST IN CASE /046 CJL ISZ TST6120 /WASTE /046 CJL JMP .-1 /SOME TIME /046 CJL CLSK8A /VT278 CLOCK FLAG UP? /046 CJL JMP TRYDM2 /NO, TRY DECMATE II, ETC. /046 CJL DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /050 CJL CIF CDF DMIFLD /GOTO DECMATE ONCE-ONLY CODE FIELD /046 CJL JMP I (DM1INIT) /CONTINUE THERE /046 CJL TRYDM2, CLSK /CLOCK FLAG UP? /046 CJL JMP ROUTINITIALIZE /NO, MUST BE SOMEBODY ELSE! /046 CJL DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /048 CJL CIF CDF DMIFLD /GOTO DECMATE ONCE-ONLY FIELD /046 CJL JMP I (DM2INIT) /CONTINUE THERE /046 CJL / COMES HERE IF SERIAL PORT CONFIGURATION ON DECMATE. DMSER, DCA DMPRZAP /MAKE IT PRINT OUR MESSAGE /048 CJL TAD (DMPPMSG) /GET OUR MESSAGE ADDRESS /048 CJL DCA SPZAP /STORE IN-LINE /048 CJL JMP ROUTINITIALIZE /CONTINUE THERE MESMOVE,.-. /MESSAGE MOVE ROUTINE DCA MMOVCNT /SAVE PASSED COUNT TAD I MESMOVE /GET THE PASSED ARGUMENT DCA XR1 /SET IT UP ISZ MESMOVE /BUMP PAST ARGUMENT CDF MSGFLD /GOTO BUFFER FIELD MESMVLP,TAD I XR0 /GET A WORD DCA I XR1 /PUT A WORD ISZ MMOVCNT /DONE YET? JMP MESMVLP /NO, GO BACK CDF PRGFLD /BACK TO OUR FIELD JMP I MESMOVE /YES, RETURN CPUTEMP,.-. /TEMPORARY FOR MACHINE TYPE MMOVCNT,.-. /TEMPORARY FOR MOVE COUNT PAGE / CPU IDENTIFYING ROUTINE. /024 CJL / RETURNS VALUE IN AC ACCORDING TO THE FOLLOWING RULE: / AC CPU TYPE / 0 UNKNOWN (DCC112, MP-12?) / 1 PDP-5 (THE INCOMPATIBLE ONE!) / 2 PDP-8 (THE REAL ONE!) / 3 PDP-8/S (THE SLOW ONE!) / 4 LINC-8 (THE STRANGE ONE!) / 5 PDP-8/I (THE ORANGE ONE!) / 6 PDP-8/L (THE STRIPPED-DOWN ONE!) / 7 PDP-12 (THE GREEN ONE! (BLUE?)) / 10 PDP-8/E (THE FAST ONE!) / 11 PDP-8/A (THE WIDE ONE!) / 12 6100 (THE MICRO ONE!) / 13 6120 (THE HARRIS ONE!) MACHINE,.-. /MACHINE IDENTIFYING ROUTINE CLA CLL /THIS WORKS ON EVERYBODY! TAD 0 /GET PDP-5 PC DCA MACHTEMP /SAVE IT TAD (IMA5-1) /GET PDP-5 NEW PC DCA 0 /STORE IT / IF WE GET HERE, WE'RE NOT A PDP-5. TAD MACHTEMP /GET OLD LOCATION ZERO DCA 0 /RESTORE IT NL3776 /PDP-8/I, L WEIRDNESS TAD (-3776) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF NOT THOSE TWO JMP IMA8IL /JUMP IF ONE OF THEM / IF WE GET HERE, WE'RE NOT A PDP-8/I OR PDP-8/L. NL7776 /SETUP -2 TAD (-7776) /COMPARE TO EXPECTED VALUE SZA CLA /SKIP IF OK JMP IMA8S /JUMP IF RETARDED BROTHER / IF WE GET HERE, WE'RE NOT A PDP-8/S. NL0100 /SETUP 0100 TAD (-100) /COMPARE TO EXPECTED VALUE SNA CLA /SKIP IF STRAIGHT PDP-8 JMP IMAOMNIBUS /JUMP IF NEWER CPU / IF WE GET HERE, WE ARE A PDP-8, BUT ARE WE A LINC-8? NL7777 /SETUP LINC TEST VALUE IACA /LOAD LINC "A" REGISTER CLA /CLEAN UP IAAC /GET IT BACK IAC /ADD ONE SNA CLA /SKIP IF NO LINC HARDWARE JMP IMAL8 /JUMP IF LINC-8 / SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE A PDP-8. JMP IMA8 /GO TELL THEM WE ARE A PDP-8 / COMES HERE IF PDP-8/I OR PDP-8/L. IMA8IL, NL7777 /SETUP TEST VALUE CLA!401 /DO PDP-8/I GROUP THREE EAE CLA SZA CLA /SKIP IF PDP-8/I JMP IMA8L /JUMP IF NOT / IF WE GET HERE, WE ARE A PDP-8/I, BUT ARE WE A PDP-12? LINC /GOTO LINC MODE COM /COMPLEMENT AC IF PDP-12, ELSE A HARMLESS AND PDP /GOTO PDP8 MODE IF PDP-12, ELSE HARMLESS AND IAC /ADD ONE FOR TEST SNA CLA /SKIP IF JUST PDP-8/I JMP IMA12 /JUMP IF ACTUALLY A LINC-8/I / SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE JUST A PDP-8/I. JMP IMA8I /TELL THEM WE ARE A PDP-8/I IMAOMNI,RTL RTR /DO STRANGE OMNIBUS INSTRUCTION PC8A, SNA /SKIP IF NOT A MICRO CHIP JMP IMA61 /JUMP IF ONE OF THOSE THINGS TAD (.&7600+16^7777) /CHECK FOR PDP-8/E VALUE SNA /SKIP IF NOT HIM JMP IMA8E /JUMP IF IT IS A PDP-8/E (/F OR /M OR 8A-6XX) TAD (.&7600+16-PC8A) /COMPARE TO PDP-8/A VALUE /051 CJL SNA CLA /SKIP IF SOMEBODY ELSE JMP IMA8A /JUMP IF IT MATCHES / IF WE GET HERE, SOME STRANGE PROCESSOR IS RUNNING US. JMP IMAUNKNOWN /YOU FIGURE IT OUT! / IF WE GET HERE, WE ARE A 6100 OR 6120. IMA61, NL0010 /DO 6120 SPECIAL INSTRUCTION TAD (-10) /COMPARE TO EXPECTED VALUE SNA CLA /SKIP IF OTHER JMP IMA6120 /JUMP IF IT MATCHES / WE APPARENTLY ARE ON A 6100, SO TELL THEM SO. JMP IMA6100 /TELL THEM WE ARE A 6100 MACHINE (VT-78, ETC.) / RETURN GAUNTLET. IMA6120,IAC /SET 6120 VALUE IMA6100,IAC /SET 6100 VALUE IMA8A, IAC /SET PDP-8/A VALUE IMA8E, IAC /SET PDP-8/E VALUE IMA12, IAC /SET PDP-12 VALUE IMA8L, IAC /SET PDP-8/L VALUE IMA8I, IAC /SET PDP-8/I VALUE IMAL8, IAC /SET LINC-8 VALUE IMA8S, IAC /SET PDP-8/S VALUE IMA8, IAC /SET PDP-8 VALUE IMA5, IAC /SET PDP-5 VALUE IMAUNKN,JMP I MACHINE /RETURN MACHTEM,.-. /TEMPORARY FOR LOCATION ZERO PAGE FIELD PRGFLD%10 /DUMP THE LITERALS NOW / LAYOUT OF FIELD ONE (PERMANENT CONTENTS). /046 CJL NOPUNCH /FOOL THE ASSEMBLER /046 CJL FIELD USRFLD%10 /USR FIELD /046 CJL *0 /WHERE IT LOADS /046 CJL USRLOAD,ZBLOCK 200-. /GET TO ENTRY POINT /046 CJL USRENTR=. /LOCKED-IN USR ENTRY POINT /046 CJL USRENTR,ZBLOCK 2000-. /USR OWNS REST OF THIS AREA /046 CJL FILBUFF=. /FILE I/O DONE HERE /046 CJL FIELD BUFFLD%10 /FILE I/O BUFFER FIELD /046 CJL *FILBUFFER /RESET ORIGIN /046 CJL FILBUFF,ZBLOCK PAGCNT^200 /THIS IS THE FILE I/O BUFFER /046 CJL DIRBUFF=. /DIRECTORY LOOKUP I/O DONE HERE /028 CJL FIELD DIRFLD%10 /DIRECTORY LOOKUP BUFFER FIELD /028 CJL *DIRBUFFER /RESET ORIGIN /028 CJL FILECNT,.-. /-(NUMBER OF ENTRIES IN THIS SEGMENT) FRSTREC,.-. /FIRST RECORD OF FIRST ENTRY IN THIS SEGMENT DIRLINK,.-. /LINK TO NEXT SEGMENT; 0 IF LAST ACTIVE ONE .-. /TENTATIVE ENTRY POINTER STORED HERE AIWNUMB,.-. /-(NUMBER OF ADDITIONAL INFORMATION WORDS) ENTSTRT=. /FILE ENTRIES START HERE /046 CJL ZBLOCK PAGCNT^200+DIRBUFFER-. /DIRECTORY ENTRIES HERE /046 CJL / CONNECT MODE I/O BUFFERS. /026 CJL KEYBUFF,ZBLOCK BUFSIZE /KEYBOARD BUFFER /026 CJL CONBUFF,ZBLOCK BUFSIZE /CONSOLE OUTPUT BUFFER /026 CJL RINBUFF,ZBLOCK BUFSIZE /REMOTE INPUT BUFFER /026 CJL REMBUFF,ZBLOCK BUFSIZE /REMOTE OUTPUT BUFFER /026 CJL FLD1ADR=. /SPACE AVAILABLE FOR TEXT, ETC. /046 CJL ENPUNCH /UN-FOOL THE ASSEMBLER /046 CJL / DECMATE ONCE-ONLY CODE. /046 CJL FIELD DMIFLD%10 /DECMATE ONCE-ONLY CODE FIELD /046 CJL *USRLOAD /OVER USR ROUTINE /046 CJL / PAGE ZERO FOR ONCE-ONLY CODE. /046 CJL *10 /GET TO AUTO-INDEX AREA /048 CJL XR0, .-. /AUTO-INDEX ZERO /048 CJL *USRENTRY /OVER USR ENTRY POINT /046 CJL / DECMATE I ONCE-ONLY CODE. /046 CJL DM1INIT,JMS I (DM1PORT) /INITIALIZE THE REMOTE PORTS /050 CJL TAD (DM1LIST-1) /POINT TO REPLACEMENT LIST /050 CJL JMS REPLACE /ZAP IN ALL OF OUR PATCHES /050 CJL CDF PRGFLD /GOTO MAIN FIELD /050 CJL TAD I (DIRXR) /GET PORT SELECTION /050 CJL SNA CLA /SKIP IF PORT 1 REQUIRED /050 CJL JMP USEP0 /JUMP IF PORT 0 REQUIRED /050 CJL TAD (DM1SEC-1) /POINT TO REPLACEMENT LIST /050 CJL JMS REPLACE /ZAP IN SECONDARY PATCHES /050 CJL USEP0, CIF CDF PRGFLD /BACK TO REST OF INITIALIZATION /046 CJL JMP I (INITPRT) /CONTINUE THERE /046 CJL / DECMATE II, ETC. ONCE-ONLY CODE. /046 CJL DM2INIT,JMS I (DMIPORT) /INITIALIZE THE REMOTE PORT /048 CJL TAD (DM2LIST-1) /POINT TO REPLACEMENT LIST /048 CJL JMS REPLACE /ZAP IN ALL OF OUR PATCHES /048 CJL CIF CDF PRGFLD /BACK TO REST OF INITIALIZATION /046 CJL JMP I (INITPRT) /CONTINUE THERE /046 CJL REPLACE,.-. /REPLACEMENT ROUTINE /048 CJL DCA XR0 /SAVE PASSED LIST POINTER /048 CJL REPLUP, CDF DMIFLD /BACK TO OUR FIELD /048 CJL TAD I XR0 /GET AN ADDRESS /048 CJL SNA /SKIP IF NOT AT END OF LIST /048 CJL JMP I REPLACE /RETURN IF END OF LIST /048 CJL DCA REPADR /STASH THE ADDRESS /048 CJL TAD I XR0 /GET THE REPLACEMENT VALUE /048 CJL CDF PRGFLD /GOTO ZAPPING FIELD /048 CJL DCA I REPADR /ZAP IT IN /048 CJL JMP REPLUP /KEEP GOING /048 CJL REPADR, .-. /REPLACEMENT ADDRESS TEMPORARY /048 CJL / DECMATE I PORT INITIALIZE ROUTINE /050 CJL DM1PORT,.-. /DECMATE I PORT INITIALIZE ROUTINE TAD (234) /GET PORT 0 SCD ENABLE VALUE WCON0 /WRITE PORT 0 CONTROL REGISTER NL0000 /INDICATE PORT 0 JMS PRTINIT /INITIALIZE PORT 0 / CHANGE ALL IOTS TO PORT 1 VALUES. IOCLUP, ISZ PSETF1 /BUMP SET FLAG INSTRUCTION ISZ PDUMRD /BUMP DUMMY READ INSTRUCTION ISZ PSETF2 /BUMP SET FLAG INSTRUCTION ISZ PSKIP /BUMP SKIP ON FLAG INSTRUCTION ISZ PLOAD /BUMP LOAD INSTRUCTION ISZ IOTCNT /DONE YET? JMP IOCLUP /NO, KEEP GOING TAD (234) /GET PORT 1 SCD ENABLE VALUE WCON1 /WRITE PORT 1 CONTROL REGISTER NL4000 /INDICATE PORT 1 JMS PRTINIT /INITIALIZE PORT 1 JMP I DM1PORT /RETURN PRTINIT,.-. /LOW-LEVEL PORT INTIALIZE ROUTINE RACD /RESET DESIRED PORT ISZ PWASTE /WASTE JMP .-1 /SOME TIME CLA /CLEAN UP PSETF1, RTFL0 /SET THE FLAG NOW TAD (2516) /SETUP FOR 8 BITS, NO PARITY, ETC. JMS PSEND /SEND TO MODE REGISTER 1 CDF PRGFLD /GOTO MAIN FIELD TAD I (RATE) /GET BAUD RATE NOW CDF DMIFLD /BACK TO OUR FIELD TAD (2460) /ADD ON CLOCK ENABLES, ETC. JMS PSEND /SEND TO MODE REGISTER 2 TAD (3425) /GET ENABLE AND RESET VALUE JMS PSEND /SEND TO COMMAND REGISTER PDUMRD, RKRB0 /DO A DUMMY READ NOW PSETF2, RTFL0 /SET THE FLAG NOW CLA /CLEAN UP JMP I PRTINIT /RETURN PSEND, .-. /PORT WRITE ROUTINE PSKIP, RTSF0 /FLAG UP? JMP PSKIP /NO, WAIT FOR IT PLOAD, RTLS0 /YES, LOAD THE VALUE CLA /CLEAN UP JMP I PSEND /RETURN IOTCNT, RKFL0-RKFL1 /INTER-DEVICE IOT COUNT PWASTE, 0 /TIMER TEMPORARY PAGE / DECMATE II, ETC. PORT INITIALIZE ROUTINE. /048 CJL / THIS ROUTINE IS MOSTLY "DARK GREY MAGIC" WHICH IS PRIMARILY DERIVED FROM THE / "OFFICIAL" INFORMATION TAKEN FROM THE ONLY KNOWN DOCUMENTATION, THE DECMATE II / PROGRAMMER'S REFERENCE MANUAL: EK-DECM2-RM-001. VARIOUS EMPLOYEES OF DIGITAL / EQUIPMENT CORPORATION (A MULTI-NATIONAL COMPANY) HAVE ADDITIONALLY CONTRIBUTED / TO THIS EFFORT BY PROVIDING PORTIONS OF THE "SACRED SLUSHWARE NOTES" ON A NOT / NECESSARILY WILLING BASIS THROUGH THEIR RELEASED WORKS, SUCH AS, BUT NOT / LIMITED TO, THE SOURCES OF THE PARTICULAR VERSION OF KERMIT-8 KNOWN AS K278. / IT IS ASSUMED THAT THESE PEOPLE HAVE ACCESS TO BETTER DOCUMENTATION OF THE / HARDWARE, AND ESPECIALLY DOCUMENTATION OF THE THREE DIFFERENT MODELS OF / DECMATE (II, III, III+) THAT THESE ISSUES APPLY TO. / SINCE IT IS NOT KNOWN WHETHER THE K278, ETC. CODE IS SPECIFIC AND PRECISE, OR / MERELY SLOPPY, VARIOUS "QUIRKY" CODING TECHNIQUES HAVE BEEN LEFT "AS IS", WITH / COMMENTS REGARDING POTENTIAL VARIANCE WITH DOCUMENTATION NOTED WHERE / NECESSARY. THE ORDER OF ACCESS TO THE REGISTERS HAS BEEN LEFT INTACT IN CASE / OF POTENTIAL INTERACTION. SEVERAL CHANGES HAVE BEEN MADE BEYOND THIS WORK AS / A RESULT OF TRIAL-AND-ERROR, AND ALSO HAND DIS-ASSEMBLY OF SEVERAL DECMATE / DISKETTES' CONTENTS. / IT IS HOPED THAT FUTURE "NEGOTIATIONS" WITH DEC ALLOW FOR PROPER DISCLOSURE OF / THESE ISSUES TO AVOID POTENTIAL SOFTWARE FAILURES EVIDENT IN THESE ROUTINES / DUE TO LACK OF PROPER DOCUMENTATION. DMIPORT,.-. /COMMUNICATIONS PORT INITIALIZE ROUTINE / ACCORDING TO THE DECMATE II MANUAL, THE FOLLOWING INSTRUCTION IS UNDEFINED. MPRESET /RESET MULTIPROTOCOL COMMUNICATIONS CONTROLLER CHIP / THE DECMATE III HAS AN INTERNAL MODEM OPTION WHICH IS NOT AVAILABLE IN THE / DECMATE II. THE INTERFACE TO THIS DEVICE IS APPARENTLY SHARED WITH THE MPSCC / MODEM INTERFACE WE NORMALLY USE, SO THE REGISTER ACCESS MUST BE MORE CAREFULLY / DEFINED. THE APPARENT DIFFERENTIATION IS THE CURRENT VALUE OF THE DATA FIELD, / NAMELY EITHER FIELD 0 OR 1. IT IS NOT KNOWN WHETHER THE THREE-BIT VALUE OF / THE DATA FIELD IS SIGNIFICENT (PRESUMABLY FOR FUTURE EXPANSION), OR MERELY THE / DATA FIELD'S LOW-ORDER BIT IS USED, AS ALL KNOWN EXAMPLES OF ALLEDGEDLY / FUNCTIONAL CODE USE APPROPRIATE CDF 00 AND CDF 10 ONLY. APPARENTLY THE MODEM / INTERFACE IS REFERRED TO AS "A" AND THE MPSCC INTERFACE IS REFERRED TO AS "B". TAD (030) /GET RESET VALUE CDF 00 /TALKING TO REGISTER 0A MPSCC /RESET COMMUNICATIONS CHIP CDF 10 /TALKING TO REGISTER 0B MPSCC /RESET COMMUNICATIONS CHIP / ACCORDING TO THE DECMATE II MANUAL, CONTROL REGISTER 2 "HAS NO RELEVANT / BITS... IF IT IS EVER WRITTEN, IT MUST BE WRITTEN WITH ALL ZEROS." APPARENTLY / THE MODEM INTERFACE DEMANDS A NON-ZERO VALUE BE WRITTEN TO REGISTER 2 / (PRESUMABLY TO DISABLE IT). TO SATISFY THE ABOVE REQUIREMENT (WHATEVER THIS / IMPLIES!), REGISTER 2(B) IS WRITTEN WITH ALL ZEROS *LAST* IN CASE THIS IS A / DECMATE II WHERE THE DATA FIELD CONSIDERATIONS ARE MEANINGLESS. CDF 00 /TALKING TO REGISTER 0A NL0002 /WANT REGISTER 2A MPSCC /SELECT IT TAD (020-2) /GET RESET VALUE MPSCC /LOAD IT CDF 10 /TALKING TO REGISTER 0B NL0002 /WANT REGISTER 2B MPSCC /SELECT IT NL0000 /GET RESET VALUE (000) MPSCC /LOAD IT / THE K278 CODE DOES NOT HAVE SETUP CODE FOR REGISTER 4B, PRESUMABLY BECAUSE THE / CODE PERFORMS A PANEL REQUEST (PRQ3) WHICH SETS UP THE EQUIVALENT VALUES FOR / ASYNCHRONOUS OPERATION WITH ONE STOP BIT AND NO PARITY. IT IS NOT KNOWN IF / THE DECMATE III EVEN *HAS* A REGISTER 4B, BUT PRESUMABLY IT IS AVAILABLE FOR / LOADING THE RIGHT VALUES COMPATIBLE WITH THE DECMATE II, OR ATTEMPTING TO LOAD / IT IS INNOCUOUS. CDF 00 /TALKING TO REGISTER 0A NL0004 /WANT REGISTER 4A MPSCC /SELECT IT TAD (104-4) /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY MPSCC /LOAD IT CDF 10 /TALKING TO REGISTER 0B NL0004 /WANT REGISTER 4B MPSCC /SELECT IT TAD (104-4) /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY MPSCC /LOAD IT / THE DOCUMENTED VALUES (FOR DECMATE II) REGARDING CONTROL REGISTER 1 INDICATE / THE PROPER VALUE OF 022, WHERE BIT[9] IS DEFINED AS A ZERO. THE VALUE OF 026 / IS TAKEN FROM K278 WHERE PRESUMABLY THE EXTRA BIT IS NECESSARY FOR SOME / DECMATE III OBSCURITY. / THE FOLLOWING CODE IS REDUNDANT FOR LOADING REGISTER 0A BEFORE AND AFTER / LOADING REGISTER 0B. THIS IS EITHER A MISTAKE OR OBSCURELY NECESSARY (TAKEN / FROM K278). CDF 00 /TALKING TO REGISTER 0A NL0001 /WANT REGISTER 1A MPSCC /SELECT IT TAD (026-1) /GET SETUP VALUE MPSCC /LOAD IT CDF 10 /TALKING TO REGISTER 0B NL0001 /WANT REGISTER 1B MPSCC /SELECT IT TAD (026-1) /GET SETUP VALUE MPSCC /LOAD IT CDF 00 /TALKING TO REGISTER 0A NL0001 /WANT REGISTER 1A MPSCC /SELECT IT TAD (026-1) /GET SETUP VALUE MPSCC /LOAD IT / THE DECMATE III INTERNAL MODEM IS PROBABLY ASYNCHRONOUS 8 BIT ONLY. ASSUMING / THE RECEIVE SIDE OF THE INTERNAL MODEM IS ALWAYS "ENABLED", REGISTER 3A WOULD / BE UNNECESSARY. THE K278 CODE DOES NOT ADDRESS REGISTER 3 AS AN A/B PAIR, / PRESUMABLY BECAUSE REGISTER 3 IS NOT DECODED AND IS EFFECTIVELY REGISTER 3B / REGARDLESS OF THE DATA FIELD. THIS IS EITHER TRUE, OR THE K278 CODING FAILS / TO PROPERLY INITIALIZE THE DECMATE III MPSCC PORT. NL0003 /WANT REGISTER 3 MPSCC /SELECT IT TAD (301-3) /SETUP FOR 8 BITS AND ENABLE RECIVER MPSCC /LOAD IT / A SIMILAR SITUATION EXISTS FOR THE TRANSMITTER SIDE OF THE DECMATE III / INTERNAL MODEM. REGISTER 5 IS UTILIZED ACCORDINGLY. TAD (5-301) /WANT REGISTER 5 MPSCC /SELECT IT TAD (150-5) /GET TRANSMITTER ENABLE, 8 BITS VALUE MPSCC /LOAD IT / THE DECMATE II REFERENCE MANUAL INDICATES THE PROPER SETTING FOR THE MODEM / CONTROL REGISTER AS EITHER 030 OR 130 DEPENDING ON WHETHER BIT[5] INDICATES / INTERNAL OR EXTERNAL TIMING (WHERE ONE OF THESE IS ILLEGAL FOR ASYNCHRONOUS / OPERATION!). THE SETTING OF BITS [10] AND [11] WOULD INDICATE ENABLING OF / BOTH LOCAL AND REMOTE LOOPBACKS, YET WE SET ONLY THESE BITS (ALA K278) / ALLEDGEDLY FOR THE PURPOSE OF SETTING RTS AND DTR (WHICH ARE DOCUMENTED AS / BEING BITS[7] AND [8] RESPECTIVELY). NL0003 /SET VALUE MLC /LOAD IT CLA /CLEAN UP / THE BAUD RATE SHOULD BE SET HERE IF DESIRED. / TAD BAUD /GET BAUD RATE / MSB /LOAD IT CLA /CLEAN UP JMP I DMIPORT /RETURN / DECMATE II, ETC. REPLACEMENT LIST. /048 CJL DM2LIST,CLDMZAP / *CLDMZAP DMINIT&177+JMSC /CLDMZAP,JMS DMINIT SETBAUD / *SETBAUD /050 CJL MSB /SETBAUD,MSB /050 CJL INLUP / *INLUP TAD INFLAG /INLUP, TAD INFLAG INSKIP / *INSKIP NOTYET&177+JMPC /INSKIP, JMP NOTYET INLUP1; DCA INFLAG /INLUP1, DCA INFLAG INREAD; IRB /INREAD, IRB INSTATUS / *INSTATUS UPSTATUS&177+JMSC /INSTATU,JMS UPSTATUS GETFL1 / *GETFL1 UPSTATUS&177+JMSC /GETFL1, JMS UPSTATUS COMWAIT / *COMWAIT GETFLOW&177+JMSC /COMWAIT,JMS GETFLOW NOWAIT / *NOWAIT TAD OUTFLAG /NOWAIT, TAD OUTFLAG CMOUT1; SNA CLA /CMOUT1, SNA CLA CMOUT2; OWAIT&177+JMPC /CMOUT2, JMP OWAIT DM1AND; DCA OUTFLAG /DM1AND, DCA OUTFLAG CMOUT3; OUTEMP&177+TADC /CMOUT3, TAD OUTEMP CMOUT4; OLS /CMOUT4, OLS BUFCHECK / *BUFCHECK PUPSTATUS&177+JMSIC /BUFCHEC,JMS I PUPSTATUS KERRLUP / *KERRLUP PUPSTATUS&177+JMSIC /KERRLUP,JMS I PUPSTATUS RINTEST / *RINTEST TAD INFLAG /RINTEST,TAD INFLAG RINGT0; SNA CLA /RINGT0, SNA CLA RINREAD;RINGNONE&177+JMPC /RINREAD,JMP RINGNONE RINGT1; DCA INFLAG /RINGT1, DCA INFLAG RINGT2; IRB /RINGT2, IRB REMTSF / *REMTSF RMPTEMP&177+DCAC /REMTSF, DCA RMPTEMP RMPUT0; TAD OUTFLAG /RMPUT0, TAD OUTFLAG REMTLS; SNA CLA /REMTLS, SNA CLA RMPUT1; REMPUT&177+JMPIC /RMPUT1, JMP I REMPUT REMCLEA;RMPTEMP&177+TADC /REMCLEA,TAD RMPTEMP RMPUT2; OLS /RMPUT2, OLS 0 /THIS ENDS THE LIST PAGE / DECMATE I REPLACEMENT LIST. /050 CJL DM1LIST,CLDMZAP / *CLDMZAP DMINIT&177+JMSC /CLDMZAP,JMS DMINIT SETBAUD / *SETBAUD NOP /SETBAUD,NOP DMI01 / *DMI01 DM234&177+TADC /DMI01, TAD DM234/(234) DMI02; WCON0 /DMI02, WCON0 DMI03; NL0000 /DMI03, NL0000 DMI04; RACD /DMI04, RACD DMI05; DMWASTE&177+ISZC /DMI05, ISZ DMWASTE DMI06; DMI05&177+JMPC /DMI06, JMP DMI05 DMI07; DMWASTE&177+ISZC /DMI07, ISZ DMWASTE DMI08; DMI07&177+JMPC /DMI08, JMP DMI07 DMI09; RTFL0 /DMI09, RTFL0 DMI10; DM2516&177+TADC /DMI10, TAD DM2516/(2516) DMI11; DMSEND&177+JMSC /DMI11, JMS DMSEND DMI12; TAD RATE /DMI12, TAD RATE DMI13; DM2460&177+TADC /DMI13, TAD DM2460/(2460) DMI14; DMSEND&177+JMSC /DMI14, JMS DMSEND DMI15; DM3425&177+TADC /DMI15, TAD DM3425/(3425) DMI16; DMSEND&177+JMSC /DMI16, JMS DMSEND DMI17; RKRB0 /DMI17, RKRB0 DMISET / *DMISET RTFL0 /DMISET, RTFL0 DMISKP / *DMISKP RTSF0 /DMISKP, RTSF0 DMIOUT / *DMIOUT RTLS0 /DMIOUT, RTLS0 INSKIP / *INSKIP RKSF0 /INSKIP, RKSF0 INREAD / *INREAD RKRB0 /INREAD, RKRB0 COMWAIT / *COMWAIT GETFLOW&177+JMSC /COMWAIT,JMS GETFLOW NOWAIT / *NOWAIT RTSF0 /NOWAIT, RTSF0 CMOUT1; OWAIT&177+JMPC /CMOUT1, JMP OWAIT DM1AND / *DM1AND AND377 /DM1AND, AND [377] CMOUT4 / *CMOUT4 RTLS0 /CMOUT4, RTLS0 RINTEST / *RINTEST RKSF0 /RINTEST,RKSF0 RINREAD / *RINREAD RKRB0 /RINREAD,RKRB0 RINGT1; SKP /RINGT1, SKP DM1AN2 / *DM1AN2 AND377 /DM1AN2, AND [377] REMTSF / *REMTSF RTSF0 /REMTSF, RTSF0 REMTLS / *REMTLS RTLS0 /REMTLS, RTLS0 0 /THIS ENDS THE LIST / DECMATE I SECONDARY REPLACEMENT LIST /050 CJL DM1SEC, DMI02 / *DMI02 WCON1 /DMI02, WCON1 DMI03; NL4000 /DMI03, NL4000 DMI09 / *DMI09 RTFL1 /DMI09, RTFL1 DMI17 / *DMI17 RKRB1 /DMI17, RKRB1 DMISET / *DMISET RTFL1 /DMISET, RTFL1 DMISKP / *DMISKP RTSF1 /DMISKP, RTSF1 DMIOUT / *DMIOUT RTLS1 /DMIOUT, RTLS1 INSKIP / *INSKIP RKSF1 /INSKIP, RKSF1 INREAD / *INREAD RKRB1 /INREAD, RKRB1 NOWAIT / *NOWAIT RTSF1 /NOWAIT, RTSF1 CMOUT4 / *CMOUT4 RTLS1 /CMOUT4, RTLS1 RINTEST / *RINTEST RKSF1 /RINTEST,RKSF1 RINREAD / *RINREAD RKRB1 /RINREAD,RKRB1 REMTSF / *REMTSF RTSF1 /REMTSF, RTSF1 REMTLS / *REMTLS RTLS1 /REMTLS, RTLS1 0 /THIS ENDS THE LIST / ONCE-ONLY TEXT MESSAGES. /024 CJL FIELD BUFFLD%10 /FILE I/O BUFFER FIELD *FILBUFFER /OVER FILE I/O BUFFER / LOCAL PREFERENCE MESSAGE. /024 CJL / USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE. / THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE. XLIST OFF IFZERO GENMSG < XLIST ON LCLMSG, *LCLMSG+40 /EMPTY HOLE FOR USER MESSAGE /039 CJL XLIST OFF > IFNZRO GENMSG < IFNZRO LEDERLE < XLIST ON LCLMSG, TEXT "%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%" XLIST OFF > IFNZRO UMSG < XLIST ON LCLMSG, TEXT "%^I^NSERT LOCAL USER MESSAGE HERE!%^" XLIST OFF > IFZERO LEDERLE!UMSG < XLIST ON LCLMSG, TEXT "^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE XLIST OFF > IFNZRO LCLMSG+40-. < XLIST ON ZBLOCK LCLMSG+40-. /LEAVE PATCHING SPACE XLIST OFF > > XLIST ON CLOSMSG,TEXT "^]^" /CPU TYPE CLOSING MESSAGE / CPU IDENTIFICATION LIST; ALL MUST BE 5 WORDS LONG (EXCEPT LAST)./024 CJL CPULIST,TEXT "^U^NKNOWN" /00=UNKNOWN TEXT "^PDP^-5^^" /01=PDP-5 TEXT "^PDP^-8^^" /02=PDP-8 TEXT "^PDP^-8/S" /03=PDP-8/S TEXT "^LINC^-8^" /04=LINC-8 TEXT "^PDP^-8/I" /05=PDP-8/I TEXT "^PDP^-8/L" /06=PDP-8/L TEXT "^PDP^-12^" /07=PDP-12 TEXT "^PDP^-8/E" /10=PDP-8/E TEXT "^PDP^-8/A" /11=PDP-8/A TEXT "6100^^^^^" /12=6100 TEXT "6120^" /13=6120; LAST CAN BE SHORT! CPUTMSG,TEXT "%^[C^PU TYPE IS: " /CPU TYPE MESSAGE DAYMSG, DAY%12^66+DAY+6060 /DAY MESSAGE TEXT " " DMPOMSG,TEXT " ^[U^SING ^C^OMMUNICATIONS" /DECMATE PORT MESSAGE TEXT " ^P^ORT^]" DMPPMSG,TEXT " ^[U^SING ^P^RINTER ^P^ORT^]^" /DECMATE SERIAL PORT MESSAGE INITMSG,TEXT "%^PS/8 PS/12 OS/8 OS/12 " /INITIAL MESSAGE TEXT "OS/78 OS/278 K^ERMIT-12 ^V" INMSG2, VERSION%12^66+VERSION+6060 /VERSION DIGITS INMSG3, "^^100+REVISION /REVISION TEXT " " /END OF MESSAGE XLIST OFF IFZERO MONTH-1 < XLIST ON MONMSG, TEXT "^J^ANUARY ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-2 < XLIST ON MONMSG, TEXT "^F^EBRUARY " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-3 < XLIST ON MONMSG, TEXT "^M^ARCH ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-4 < XLIST ON MONMSG, TEXT "^A^PRIL ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-5 < XLIST ON MONMSG, TEXT "^M^AY ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-6 < XLIST ON MONMSG, TEXT "^J^UNE " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-7 < XLIST ON MONMSG, TEXT "^J^ULY " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-10 < XLIST ON MONMSG, TEXT "^A^UGUST " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-11 < XLIST ON MONMSG, TEXT "^S^EPTEMBER ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-12 < XLIST ON MONMSG, TEXT "^O^CTOBER ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-13 < XLIST ON MONMSG, TEXT "^N^OVEMBER " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-14 < XLIST ON MONMSG, TEXT "^D^ECEMBER " /MONTH MESSAGE XLIST OFF > IFNZRO MONMSG+7-. < XLIST ON ZBLOCK MONMSG+7-. /EMPTY SPACE FOR ALIGNMENT XLIST OFF > XLIST ON THLPMSG,TEXT "%^T^YPE ^HELP<CR>^ FOR HELP%^" /TYPE HELP MESSAGE YEARMSG,TEXT "19" /YEAR MESSAGE YEAR%12^66+YEAR+6060 /YEAR DIGITS TEXT "^" /END OF MESSAGE / CPU-SPECIFIC PROMPT LIST. /024 CJL CPUPRMP,TEXT "??^>^^^" /UNKNOWN TEXT "5^>^^^^" /PDP-5 TEXT "8^>^^^^" /PDP-8 TEXT "8^/S>^^" /PDP-8/S TEXT "LINC-8>" /LINC-8 TEXT "8^/I>^^" /PDP-8/I TEXT "8^/L>^^" /PDP-8/L TEXT "12^>^^^" /PDP-12 TEXT "8^/E>^^" /PDP-8/E TEXT "8^/A>^^" /PDP-8/A TEXT "78^>^^^" /6100 TEXT "278^>^^" /6120 / CPU-SPECIFIC IDENTIFICATION LIST. /025 CJL CPUIDLS,TEXT "^U^NKNOWN" /UNKNOWN TEXT "^PDP^-5^^" /PDP-5 TEXT "^PDP^-8^^" /PDP-8 TEXT "^PDP^-8/S" /PDP-8/S TEXT "^LINC^-8^" /LINC-8 TEXT "^PDP^-8/I" /PDP-8/I TEXT "^PDP^-8/L" /PDP-8/L TEXT "^PDP^-12^" /PDP-12 TEXT "^PDP^-8/E" /PDP-8/E TEXT "^PDP^-8/A" /PDP-8/A TEXT "^VT^-78^^" /VT-78 TEXT "^DEC^MATE" /6120 FIELD MSGFLD%10 /MESSAGE FIELD *FLD1ADR /PERMANENT LOAD ADDRESS /046 CJL /TEXT MESSAGES LOAD HERE/046 CJL ABMSG, TEXT "%^F^ILE ^A^BORT%^" /FILE ABORT MESSAGE CMERMSG,TEXT "?^I^NVALID COMMAND^" /COMMAND ERROR MESSAGE CONNMSG,TEXT "%(^C^ONNECTING TO HOST, TYPE " /FIRST CONNECT MESSAGE CONTMSG,TEXT "^C^ONTROL-^" /CONTROL CHARACTER MESSAGE CON2MSG,TEXT " ^C^ TO RETURN TO ^" /BRIDGING CONNECT MESSAGE CON3MSG,TEXT ")%^" /FINAL CONNECT MESSAGE CPUMSG, ZBLOCK 5 /CPU ID MESSAGE GOES HERE /CRLF, TEXT "%" /<CR>, <LF> MESSAGE DNERMSG,TEXT "?^E^RROR IN DEVICE NAME" /DEVICE NAME ERROR MESSAGE DSFLMSG,TEXT "?^D^ISK FULL!" /DISK OUT OF ROOM ERROR MESSAGE FCLEMSG,TEXT "?^E^RROR CLOSING FILE" /FILE CLOSE ERROR MESSAGE FNERMSG, TEXT "?^E^RROR IN FILE NAME" /FILE NAME ERROR MESSAGE FRECMSG,TEXT "^R^ECEIVING FILE: ^" /RECEIVING FILE MESSAGE FSENMSG,TEXT "^S^ENDING FILE: ^" /SENDING FILE MESSAGE FSERMSG,TEXT "?^F^ILE NAME SYNTAX ERROR" /FILE NAME ERROR MESSAGE HELPMSG,TEXT "%^S^UPPORTED COMMANDS ARE:%%" /HELP MESSAGE TEXT "^CONNECT^ (TO REMOTE SYSTEM) %" TEXT "^SEND DEV:FILNAM.EX^ %" TEXT "^RECEIVE DEV:^ (FILENAME AND EXTENSION ^NOT^ ALLOWED)%" TEXT "^GET DEV:FILNAM.EX^%" TEXT "^FINISH^ (SERVER)%" TEXT "^EXIT^ (TO OPERATING SYSTEM) %" TEXT "^HELP^ (THIS MESSAGE)%" TEXT "%^E^SCAPE CHARACTER: " KERRMSG,TEXT "%^K^EYBOARD INPUT ERROR!%" /KEYBOARD ERROR MESSAGE CRLF= .-1 /<CR>, <LF> MESSAGE NOFINIS,TEXT "?^U^NABLE TO TELL HOST THAT " /FINISH ERROR MESSAGE TEXT "SESSION IS FINISHED" NOTFND, TEXT "?^U^NABLE TO LOCATE FILE^" /FILE NOT FOUND MESSAGE PRMTMSG,TEXT "^K^ERMIT-^" /STATIC PORTION OF PROMPT MESSAGE PROMID, ZBLOCK 23 /MODIFIED PORTION OF PROMPT MESSAGE RERRMSG,TEXT "?^R^ECEIVE FAILURE^" /GENERAL RECEIVE FAILURE MESSAGE RFLNMSG,TEXT "?^E^RROR IN RECEIVED FILE NAME"/RECEIVED NAME ERROR MESSAGE TEXT "^" RHFEMSG,TEXT "^U^NABLE TO RECEIVE - HANDLER" /HANDLER FETCH ERROR MESSAGE TEXT " ERROR^" RIDEMSG,TEXT "?^U^NABLE TO RECEIVE -" /DIRECTORY FULL ERROR MESSAGE TEXT " INSUFFICIENT DIRECTORY SPACE" RIERMSG,TEXT "%^R^EMOTE LINE INPUT ERROR!%^" /REMOTE LINE ERROR MESSAGE RPERMSG,TEXT "?^U^NABLE TO RECEIVE LATEST " /LATEST PACKET ERROR MESSAGE TEXT "PACKET^" SDERMSG,TEXT "?^U^NABLE TO SEND - DIRECTORY "/DIRECTORY INPUT ERROR MESSAGE TEXT "ERROR" SHFEMSG,TEXT "?^U^NABLE TO SEND - HANDLER " /HANDLER FETCH ERROR MESSAGE TEXT "ERROR" SNDEMSG,TEXT "?^U^NABLE TO SEND" /GENERAL SEND ERROR MESSAGE UPERMSG,TEXT "?^U^NABLE TO RECEIVE - DATA " /RECEIVED DATA ERROR MESSAGE TEXT "ERROR" $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12mit.upd.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Date: Sat, 11 Jul 92 15:00:00 EDT From: Charles Lasner <lasner@watsun.cc.columbia.edu> Subject: A few more release files for Kermit-12 Now available are two new versions of K12DEC and K12ENC, which have a new feature for image transfer of an entire device optionally split into two parts. This comes at the request of a user, and was quite easy to add. As before, the sources document how to use the programs, etc. The new files have been installed in the regular places: BITNET/EARN Internet KERMSRV@CUVMA watsun.cc.columbia.edu Description K12MIT ANN kermit/d/k12mit.ann Announcement of KERMIT-12 K12MIT UPD kermit/d/k12mit.upd Release update (this) file K12ENB PAL kermit/d/k12enb.pal .BOO-format encoding program K12DEB PAL kermit/d/k12deb.pal .BOO-format decoding program K12MIT NOT kermit/d/k12mit.not Release notes file K12MIT DSK kermit/d/k12mit.dsk Description of RX02 diskettes ------------------------------ |
Added src/kermit-12/k12pch.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 | / KERMIT-12 PATCH FILE XLIST OFF IFNDEF OFF <OFF= 1> IFNDEF ON <ON= 0> XLIST ON / INDEPENDENT SOURCE FILE TO ALLOW CUSTOMIZATION OF KERMIT-12. / LAST EDIT: 06-SEP-1990 11:00:00 CJL / THIS FILE IS PROVIDED TO USERS OF KERMIT-12 TO ALLOW CUSTOMIZED VERSIONS TO BE / LOCALLY CREATED WITHOUT MODIFYING THE MAIN SOURCE (K12MIT.PAL). / CREATING KERMIT-12 FROM THE STANDARD DISTRIBUTION (AND THIS FILE). / KERMIT-12 IS DISTRIBUTED IN SEVERAL FILES WHICH CAN BE USED TO CREATE A / RUNNING KERMIT-12 VIA SEVERAL METHODS. THE MOST DIRECT METHOD IS TO JUST / ASSEMBLE THE MAIN SOURCE (K12MIT.PAL) POSSIBLY AUGMENTED BY A HEADER FILE / CONTAINING CUSTOMIZING PARAMETERS (PARAM.PAL), OR TO MODIFY AND ASSEMBLE THE / MAIN SOURCE FILE TO PRODUCE A CUSTOMIZED RESULT. THIS ALSO ALLOWS FOR LOCAL / CHANGES TO THE SOURCE ITSELF IF NECESSARY. THE MAIN SOURCE FILE IS RATHER / LARGE AND MIGHT BE DIFFICULT TO ASSEMBLE, ETC. ON SMALL SYSTEMS. MOST USERS / OF KERMIT-12 WILL FIND THE STANDARD ASSEMBLY PARAMETERS SUITING THEIR LOCAL / REQUIREMENTS, AS MOST USER-PREFERENCE ITEMS ARE CUSTOMIZABLE VIA THIS METHOD. / THE USER OF A SMALLER SYSTEM IS ENCOURAGED TO ACQUIRE KERMIT-12 FROM A LARGER / SYSTEM VIA DIRECT MEDIA COPY; AN ACCURATE LISTING OF KERMIT-12 WITH LOCAL / CUSTOMIZATION COULD THEN BE AVAILABLE. / SINCE IT IS NOT ALWAYS POSSIBLE FOR SMALLER INDEPENDENT USERS TO ACQUIRE / KERMIT-12 FROM OTHER INSTALLATIONS, THIS FILE (K12PCH.PAL) WAS CREATED TO / HANDLE MOST PARAMETER SETTINGS. VIRTUALLY ALL OF THE USER-PREFERENCE / PARAMETERS, ETC. HAVE BEEN DUPLICATED HERE TO ALLOW INDEPENDENT ASSEMBLY OF / THIS FILE WHICH IS SMALL ENOUGH TO ALLOW ASSEMBLY ON MODEST SYSTEMS. / NOTE: USING THE METHOD DESCRIBED BELOW ASSUMES THAT ALL CHANGES REQUIRED BY / THE USER HAVE BEEN UPDATED WITHIN K12PCH.PAL (THIS FILE), OR PLACED IN A / SEPARATE FILE (PARAM.PAL). SEE THE ASSEMBLY PARAMETERS SECTION FOR ANY / CUSTOMIZING INFORMATION. / THE STANDARD DISTRIBUTION OF KERMIT-12 INCLUDES A CORE-IMAGE COPY OF K12MIT.SV / WITH ALL STANDARD DEFAULT VALUES SET. IT IS AVAILABLE AS K12MIT.ENC WHICH IS / A "PRINTABLE" ENCODED VERSION OF THE SAVE IMAGE. ASSEMBLING AND RUNNING THE / DECODING PROGRAM K12DEC.PAL CAN PRODUCE K12MIT.SV FROM K12MIT.ENC. / ASSUMING THE AVAILABILITY OF K12MIT.SV AND K12PCH.PAL ON THE DEFAULT DEVICE / DSK:, THE FOLLLOWING CAN BE USED TO CREATE THE RUNNING KERMIT-12: / .PAL K12PCH<PARAM,K12PCH/E/F/W ASSEMBLE CUSTOMIZED PATCH FILE. / .LOAD K12MIT.SV/I$K12PCH$ LOAD IMAGE FILE K12MIT.SV WITH /I SWITCH SET. / $ INDICATES USING <ESC> TO TERMINATE LINE. / K12PCH.BN IS LOADED OVER K12MIT TO PATCH THE / BINARY TO THE DESIRED LOCAL VERSION. / .SAVE DEV KERMIT=1 SAVE RUNNING VERSION ON ANY AVAILABLE DEVICE / DEV (PREFERABLY SYS). / .R KERMIT OR RUN DEV KERMIT RUNNING VERSION NOW CAN BE INVOKED. / ASSEMBLY PARAMETERS. / NOTE: EDIT NUMBERS PLACED ON VARIOUS SECTIONS OF THIS FILE REFER TO THE / CORRESPONDING EDIT NUMBERS WITHIN K12MIT.PAL. SEE THE K12MIT.PAL EDIT HISTORY / FOR FURTHER INFORMATION. / SEVERAL PARAMETERS MUST BE CHANGED WITHIN THIS FILE (K12PCH.PAL) (OR PASSED TO / THE ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE THE / MAIN FILE): / SETTING KEY= [RECEIVE IOT CODE FOR CONSOLE KEYBOARD] DEFINES THE CONSOLE / KEYBOARD IOT CODE (DEFAULT IS 03). / SETTING TTY= [TRANSMIT IOT CODE FOR CONSOLE OUTPUT] CHANGES THE CONSOLE / PRINTER IOT CODE (DEFAULT IS 04). / THE FOLLOWING DEFINITIONS ARE ESSENTIALLY FOR KL8-TYPE DEVICES ONLY, AS THE / CODE DEMANDS KL8 HARDWARE COMPATIBILITY. MODELS OTHER THAN PDP-8 (SUCH AS / DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON AVAILABLE INTERFACES (OTHER / SOFTWARE DESIGNATES A SERIAL INTERFACE AS A LOGICAL PRINTER PORT; DECMATES / SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES THIS.), OR DON'T ALLOW / USABLE PLUG-IN OPTIONS. / IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE: / SETTING DEV30= 1 CREATES DEVICE 30/31 REMOTE LINE IOTS. / SETTING DEV40= 1 CREATES DEVICE 40/41 REMOTE LINE IOTS. / SETTING LEDERLE=1 CREATES DEVICE 43/44 REMOTE LINE IOTS (AND A CUSTOM / HEADER). / SETTING ORIGNAL=1 CREATES DEVICE 33/34 REMOTE LINE IOTS (ORIGINAL / SETTINGS). / SETTING SPRINT= 1 CREATES DEVICE 32/33 REMOTE LINE IOTS (SERIAL PRINTER / PORT). / SETTING USER= 1 CREATES DEVICE XX/XY REMOTE LINE IOTS. / IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT. / SETTING USER= 1 REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES: / XX= [RECEIVE IOT DEVICE CODE] (DEFAULT IS 40). / XY= [TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41). / SETTING SPRINT= 1 INHIBITS THE BUILT-IN CHECK FOR DECMATE OPERATION AND / USES THE SERIAL PRINTER PORT FOUND ON ALL / WPS-8-CONFIGURED PDP-8/E, PDP-8/A CONFIGURATIONS, / VT-78, AND ALL DECMATES (VT-278, DECMATE II, III, / III+) FOR REMOTE COMMUNICATIONS. / THE USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY BE / PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER / IS A MODEM (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC. REQUIRES A / GENDER CHANGER.), OR THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY / *ONLY* FOR A PRINTER, SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN" / KEY AS A SCREEN DUMP TO THE SERIAL PRINTER PORT, ETC. THESE ISSUES ARE NOT / RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY / KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE VERSIONS COULD REDEFINE THE / "PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.). / SETTING BRATE= NN SETS THE DEFAULT BAUD RATE (FOR SYSTEMS THAT SUPPORT / THIS FEATURE) FROM A TABLE OF VALUES (0-15) AS / FOLLOWS: / NN BAUD RATE / 00 50 / 01 75 / 02 110 / 03 134.5 / 04 150 / 05 300 / 06 600 / 07 1200 / 08 1800 / 09 2000 / 10 2400 / 11 3600 / 12 4800 / 13 7200 / 14 9600 / 15 19200 / SETTING ESCAPE= NNNN SETS THE DEFAULT ESCAPE CHARACTER TO NNNN. / SETTING FLOW= 1 ENABLES FLOW-CONTROL BY DEFAULT. / SETTING FLOW= 0 DISABLES FLOW-CONTROL BY DEFAULT. / SETTING FMODE= 0177 SETS THE DEFAULT FILE MODE TO ASCII. / SETTING FMODE= 4377 SETS THE DEFAULT FILE MODE TO BINARY. / SETTING GENMSG= 0 CAUSES NO BINARY TO BE GENERATED WHERE 'LCLMSG' IS / DEFINED. THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR / SUBSEQUENT OVERLAY BY K12PCH.BN TO DEFINE THE LOCAL / HEADER MESSAGE. THIS PARAMETER SHOULD NOT BE SET / UNLESS ONE OF THESE METHODS IS USED, ELSE THE HEADER / MESSAGE WILL BE UNDEFINED. (NOTE: IF K12PCH.BN / GENERATES A HEADER MESSAGE, THEN THIS PARAMETER IS / UNIMPORTANT, AS K12PCH.BN OVERLAYS THE BINARY OF / K12MIT.) / SETTING GENMSG= 1 CAUSES A HEADER MESSAGE TO BE GENERATED. THE CONTENTS / OF THE MESSAGE ARE CREATED BY SETTING LEDERLE=1 OR / UMSG=1. IF EITHER IS ZERO, A DEFAULT (NULL) MESSAGE / WILL BE GENERATED. / SETTING ICLOSE= 1 ENSURES A <^Z> AT <EOF> OF ASCII INPUT FILES BY / DEFAULT. / SETTING ICLOSE= 0 CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT. / SETTING INIECHO=0 CAUSES A FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL / CHARACTER ECHOING BY DEFAULT. / SETTING INIECHO=1 CAUSES A HALF-DUPLEX CONNECT MODE STATE WITH LOCAL / ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT. / SETTING LOWER= 0 ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT. / SETTING LOWER= -40 FOLDS LOWER-CASE CONSOLE OUTPUT TO UPPER-CASE BY / DEFAULT. / SETTING OCLOSE= 0 PREVENTS DEFAULT SENDING OF <^Z> AT <EOF> OF ASCII / FILES. / SETTING OCLOSE= 1 CAUSES <^Z> TO BE SENT AT <EOF> OF ASCII FILES BY / DEFAULT. / SETTING PORT= 0 CAUSES THE DP-278 PORT 0 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING PORT= 1 CAUSES THE DP-278 PORT 1 TO BE USED IF KERMIT-12 IS / RUN ON A DECMATE 1 (ASSUMING SPRINT=0). / SETTING RETCNT= NNNN SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT. / SETTING UMSG= 0 PREVENTS THE LOCAL USER HEADER MESSAGE FROM BEING / GENERATED. / SETTING UMSG= 1 CAUSES THE LOCAL USER HEADER MESSAGE TO BE GENERATED. / THE PARAMETER GENMSG=1 IS REQUIRED TO BE SET. THE / SOURCE MUST BE MODIFIED LOCALLY TO CHANGE THE MESSAGE / TEXT FROM "INSERT LOCAL USER MESSAGE HERE!," AS THIS / IS THE DEFAULT CONTENTS. / PASSING SHORT PARAMETER FILES. / WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM (PARAM.PAL) / THE FOLLOWING SHOULD BE NOTED: / ALWAYS PUT THE SHORT PARAMETER FILE (CONTAINING EQUATED SYMBOLS SUCH AS / USER=1, ETC.) IN FRONT OF K12PCH.PAL. / IF TTY: IS USED FOR DIRECT TYPE-IN OF THESE PARAMETERS, THE INFORMATION NEED / ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1. SUBSEQUENT PASSES REQUIRE THE / ENDING <^Z> ONLY. IF THIS METHOD IS USED, A LISTING WITHOUT THE USER INPUT / WHICH DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED. NOTE: IF BINARY IS / GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT / MESSAGE, ETC.), THE INFORMATION MUST BE TYPED IN DURING PASS 2. THE PASS 3 / LISTING MAY CONTAIN THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF / THE INPUT. PASS 1 INPUT OF THE INFORMATION IS EFFECTIVELY IGNORED, AS NO / DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.). / EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE: / DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED / DURING PDP-8 PAL8 B0 OPERATION. THE KL8E TTY: HANDLER WILL NO LONGER BE ABLE / TO BUFFER <^Z> DURING THE ASSEMBLY; YOU MUST WAIT UNTIL THE HANDLER ACCESSES / THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY. / CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE. / IF SO DESIRED, A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING THE / FOLLOWING INTO THE PARAMETER FILE: / BUFFLD= 10 /THESE PROBABLY / FILBUFF=2000 /WON'T CHANGE! / GENMSG= 0 /DON'T GENERATE STANDARD (NULL) MESSAGE / UMSG= 0 /DON'T GENERATE STANDARD (DUMMY) USER MESSAGE / FIELD BUFFLD%10 /FIELD FOR TEXT MESSAGE / *FILBUFFER /LOCAL MESSAGE LOADS THERE /LCLMSG,TEXT "%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%" / ZBLOCK LCLMSG+40-. /ZERO REST OF MESSAGE AREA / TEXT IS IN UPPER/LOWER-CASE SIXBIT WITH '^' MEANING SHIFT CASE (INITIALLY / LOWER-CASE) AND '%' MEANING <CR>, <LF>. / MAINTAINING THIS PATCH FILE. / IF ANY CHANGES ARE MADE TO K12MIT.PAL ITSELF WHICH MIGHT AFFECT THIS FILE, THE / GLOBAL TECO MACRO (K12GLB.TEC AKA GLOBAL.TEC) SHOULD BE USED TO RESOLVE ALL / EXTERNAL REFERENCES TO ROUTINES, ETC. IN K12MIT.PAL. TO UPDATE THIS FILE / (K12PCH.PAL), THE FOLLOWING METHOD IS REQUIRED: / .PAL ,K12MIT<DEV:K12MIT/E/F/N/W CREATE "SYMBOLS" LISTING FILE ON DSK: / .MUNG K12GLB.TEC,K12PCH UPDATE THIS FILE ON DSK: / N.B., DSK:K12PCH.PAL WILL BE UPDATED *WITH NO BACKUP*. DSK:EQUATE.TMP WILL BE / CREATED AS AN ARTIFACT. IT CONTAINS THE ACTUAL EQUATE STATEMENTS WHICH WERE / UPDATED IN K12PCH.PAL. / THIS WILL MODIFY THE EQUATED SYMBOLS BELOW IN THE SPECIALLY DELIMITED AREA. / ONLY EQUATED SYMBOLS (AND ANY WHITESPACE) SHOULD BE PLACED BETWEEN THE SPECIAL / DELIMITERS: "<CR><LF>//" WHICH ARE USED BY THE MACRO TO LOCATE THE GLOBAL / EQUATES TO UPDATE. / AS NEW FEATURES ARE ADDED/(DELETED) IN K12MIT.PAL, THE APPROPRIATE DEFINITIONS / AND CONDITIONAL ASSEMBLY PARAMETERS SHOULD BE ADDED TO BOTH K12MIT.PAL AND / K12PCH.PAL FOR CONSISTENCY AND USER FLEXIBILITY. / DEFINITIONS. /017 CJL / REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY. /046 CJL IFNDEF DEV30 <DEV30= 0> /USE DEVICE 30/31 VALUES IFNDEF DEV40 <DEV40= 0> /USE DEVICE 40/41 VALUES IFNDEF LEDERLE <LEDERLE=0> /USE LEDERLE LABS VALUES IFNDEF ORIGNAL <ORIGNAL=0> /USE ORIGINAL VALUES IFNDEF SPRINT <SPRINT=0> /USE DEVICE 32/33 VALUES IFNDEF USER <USER= 0> /USE USER-DEFINED VALUES REMOTE= DEV30+DEV40+LEDERLE+ORIGNAL /SET REMOTE LINE IOT CODE REMOTE= REMOTE+SPRINT+USER /SET REMOTE LINE IOT CODE IFZERO REMOTE <DEV40= 1> /DEFAULT TO DEVICE 40/41 VERSION / DEV30 PARAMETERS. IFNZRO DEV30 < IFNDEF REC <REC= 30> /DEVICE 30 INPUT IFNDEF SEN <SEN= 31> /DEVICE 31 OUTPUT > / DEV40 PARAMETERS (DEFAULT). IFNZRO DEV40 < IFNDEF REC <REC= 40> /DEVICE 40 INPUT IFNDEF SEN <SEN= 41> /DEVICE 41 OUTPUT > / LEDERLE PARAMETERS. /038 CJL IFNZRO LEDERLE < IFNDEF REC <REC= 43> /DEVICE 43 INPUT IFNDEF SEN <SEN= 44> /DEVICE 44 OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 0> /DON'T GENERATE USER MESSAGE > / ORIGNAL PARAMETERS. IFNZRO ORIGNAL < IFNDEF REC <REC= 33> /DEVICE 33 INPUT IFNDEF SEN <SEN= 34> /DEVICE 34 OUTPUT > / SPRINT PARAMETERS. /046 CJL IFNZRO SPRINT < IFNDEF REC <REC= 32> /DEVICE 32 INPUT IFNDEF SEN <SEN= 33> /DEVICE 33 OUTPUT > / USER PARAMETERS. IFNZRO USER < IFNDEF XX <XX= 40> /DEFAULT TO DEVICE 40 IFNDEF XY <XY= 41> /DEFAULT TO DEVICE 41 IFNDEF REC <REC= XX> /DEVICE XX INPUT IFNDEF SEN <SEN= XY> /DEVICE XY OUTPUT IFNDEF GENMSG <GENMSG=1> /GENERATE LOCAL HEADER MESSAGE IFNDEF UMSG <UMSG= 1> /GENERATE USER MESSAGE > / REMOTE LINE IOT DEFINITIONS. / RECEIVE DEFINITIONS. RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG / TRANSMIT DEFINITIONS. RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11] RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG / CONSOLE TTY: DEFINITIONS. /017 CJL / KEYBOARD DEFINITIONS. /017 CJL IFNDEF KEY <KEY= 03> /KEYBOARD DEVICE CODE KCCIOT= KEY^10+6002 /CLEAR CONSOLE KEYBOARD FLAG, AC KRBIOT= KEY^10+6006 /READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG KRSIOT= KEY^10+6004 /READ CONSOLE KEYBOARD BUFFER STATIC KSFIOT= KEY^10+6001 /SKIP ON CONSOLE KEYBOARD FLAG / TELEPRINTER DEFINITIONS. /017 CJL IFNDEF TTY <TTY= 04> /TELEPRINTER DEVICE CODE TLSIOT= TTY^10+6006 /PRINT CHARACTER, CLEAR FLAG TSFIOT= TTY^10+6001 /SKIP ON TELEPRINTER FLAG / DEFAULT ESCAPE CHARACTER DEFINITION. /025 CJL IFNDEF ESCAPE <ESCAPE="]&37> /DEFAULT IS CONTROL-] / DEFAULT LOWER-CASE ENABLE DEFINITION. /030 CJL IFNDEF LOWER <LOWER= 0/-40> /LOWER-CASE IS ALLOWED AS IS /CHANGE TO -40 IF LOWER-CASE /SHOULD BE FOLDED TO UPPER-CASE / DEFAULT RETRY COUNT DEFINITION. /031 CJL IFNDEF RETCNT <RETCNT=5> /DEFAULT IS FIVE RETRIES / DEFAULT FILE MODE DEFINITION. /031 CJL IFNDEF FMODE <FMODE= 0177> /DEFAULT IS ASCII FILE MODE /4377 IS BINARY FILE MODE / DEFAULT FLOW-CONTROL MODE DEFINITION. /031 CJL IFNDEF FLOW <FLOW= 1> /DEFAULT IS FLOW-CONTROL ENABLED / DEFAULT ASCII INPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF ICLOSE <ICLOSE=1> /ENSURE <^Z> AT ASCII <EOF> / DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION. /031 CJL IFNDEF OCLOSE <OCLOSE=0> /<^Z> NOT SENT AT ASCII <EOF> / DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS. /038 CJL IFNDEF GENMSG <GENMSG=1> /DEFAULT IS TO GENERATE A MESSAGE IFNDEF UMSG <UMSG= 0> /DEFAULT IS NO DUMMY USER MESSAGE IFNDEF LEDERLE <LEDERLE=0> /DEFAULT IS NO LEDERLE MESSAGE / THE NULL MESSAGE WILL BE GENERATED BY DEFAULT. / ECHO DEFINITION. /039 CJL IFNDEF INIECHO <INIECHO=0> /DEFUALT IS NO LOCAL ECHO / DEFAULT DECMATE I PORT DEFINITION. /050 CJL IFNDEF PORT <PORT= 0> /DEFAULT IS PORT ZERO / DEFAULT BAUD RATE DEFINITION. /050 CJL IFNDEF BRATE <BRATE= 7> /DEFAULT IS 1200 BAUD // GLOBAL EQUATED SYMBOLS FROM K12MIT.PAL. BUFFLD= 0010 /I/O BUFFER FIELD CMOUT4= 0712 /REMOTE OUTPUT WRITE CONTLS= 5701 /CONSOLE OUTPUT WRITE CONTSF= 5677 /CONSOLE OUTPUT TEST COUTINI=6601 /CONSOLE OUTPUT WRITE DAYMSG= 2145 /DAY MESSAGE DIRXR= 0012 /DIRECTORY AUTO-INDEX ECHOFLA=5153 /ECHO FLAG ESCHAR= 0101 /ESCAPE CHARACTER FILBUFF=2000 /FILE BUFFER FILMODE=0075 /INTERNAL FILE MODE FLAG FLOWFLA=0102 /FLOW CONTROL FLAG ICTLZFL=4033 /INPUT <^Z> FLAG INMSG2= 2242 /INITIAL MESSAGE INMSG3= 2243 /INITIAL MESSAGE INREAD= 0640 /REMOTE INPUT READ INSKIP= 0636 /REMOTE INPUT SKIP KCCZAP= 6501 /CONSOLE INPUT CLEAR KCCZP2= 6546 /CONSOLE INPUT CLEAR KGTEST= 5250 /CONSOLE INPUT TEST KGREAD= 5252 /CONSOLE INPUT READ KRSZAP= 6472 /CONSOLE KEYBOARD READ KSFLOC= 6470 /CONSOLE KEYBOARD SKIP LCLMSG= 2000 /LOCAL USER MESSAGE MONMSG= 2246 /MONTH MESSAGE MSGFLD= 0010 /TEXT MESSAGE FIELD NOWAIT= 0705 /REMOTE OUTPUT SKIP OCTLZFL=3762 /OUTPUT <^Z> FLAG PRGFLD= 0000 /PROGRAM FIELD P7TLS= 6540 /CONSOLE OUTPUT WRITE P7TSF= 6536 /CONSOLE OUTPUT TEST RATE= 0007 /BAUD RATE REMTLS= 5726 /REMOTE OUTPUT WRITE REMTSF= 5724 /REMOTE OUTPUT TEST RETRY= 0033 /RETRY COUNT RININIT=6613 /REMOTE INPUT READ RINREAD=5505 /REMOTE INPUT READ RINTEST=5503 /REMOTE INPUT TEST ROUTINI=6612 /REMOTE OUTPUT WRITE UPONLY= 0076 /UPPER-CASE ONLY FLAG YEARMSG=2274 /YEAR MESSAGE // END OF GLOBAL SYMBOLS FROM K12MIT.PAL / EQUATED SYMBOLS. NL7777= CLA CMA /LOAD AC WITH 7777 / STATIC DATE CALCULATIONS. /024 CJL / THESE EQUATIONS CAUSE PRINTABLE TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN / IN OS/8 INTERNAL FORMAT. PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION, / REVISION, REVDATE, AND REVDGRP. REVDATE AND REVDGRP SHOULD BE OBTAINED FROM / THE SYSTEM WHEN RELEASING A NEW VERSION AFTER FIRST CORRECTLY INVOKING THE / SYSTEM DATE COMMAND. / VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)] / REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77] / REVDATE=[THE CONTENTS OF 17666 (DATE WORD)] / REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)] IFNDEF REVDATE <REVDATE=4464> /REVISION DATE (LOCATION 17666) IFNDEF REVDGRP <REVDGRP=0400> /REVISION 8 YEAR DATE GROUP (LOCATION 07777) IFNDEF REVISIO <REVISIO="G&77> /REVISION OF KERMIT-12 IFNDEF VERSION <VERSION=12> /VERSION OF KERMIT-12 DAY= REVDATE&370%10 /REVISION DAY DGROUP= REVDGRP&600%20 /REVISION DATE GROUP (WHICH 8 YEARS) MONTH= REVDATE&7400%400 /REVISION MONTH YEAR= REVDATE&7+DGROUP+106 /REVISION YEAR (SINCE 1900) / PATCHED LOCATIONS. FIELD PRGFLD%10 /OVER MAIN PROGRAM CODE *RATE /OVER BAUD RATE VALUE RATE, BRATE /BAUD RATE VALUE /050 CJL *RETRY /OVER PACKET ERROR RETRY COUNTER RETRY, -RETCNT /PACKET ERROR RETRY COUNTER /031 CJL *FILMODE /OVER INTERNAL FILE MODE FLAG FILMODE,FMODE /ASCII=0177, BINARY=4377 /019 CJL *UPONLY /OVER UPPER-CASE ONLY FLAG / UPPER-CASE ONLY FLAG. /023 CJL UPONLY, LOWER /0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL *ESCHAR /OVER ESCAPE CHARACTER FOR CONNECT MODE / ESCAPE CHARACTER FOR CONNECT MODE. /025 CJL ESCHAR, ESCAPE /ESCAPE CHARACTER FOR CONNECT MODE /025 CJL *FLOWFLAG /OVER FLOW CONTROL FLAG / FLOW CONTROL FLAG. /026 CJL FLOWFLA,FLOW /0=NO FLOW CONTROL, NON-ZERO=FLOW /026 CJL /CONTROL VIA <^S>/<^Q> / I/O PATCHES. / REMOTE LINE (NON-CONNECT) PATCHES. / INPUT ROUTINE PATCHES. *INSKIP /OVER REMOTE INPUT SKIP INSKIP, RKSFIOT /FLAG UP YET? /049 CJL *INREAD /OVER REMOTE INPUT READ INREAD, RKRBIOT /GET THE CHARACTER /049 CJL / OUTPUT ROUTINE PATCHES. *NOWAIT /OVER REMOTE OUTPUT SKIP NOWAIT, RTSFIOT /OUTPUT FLAG UP? /049 CJL *CMOUT4 /OVER REMOTE OUTPUT WRITE CMOUT4, RTLSIOT /YES, OUTPUT THE CHARACTER NOW /049 CJL / INITIALIZATION PATCHES. *DIRXR /OVER DECMATE I PORT SELECT DIRXR, PORT /DECMATE I PORT SELECT VALUE /050 CJL *ROUTINITIALIZE /OVER REMOTE OUTPUT WRITE ROUTINI,RTLSIOT /INITIALIZE REMOTE OUTPUT /046 CJL *RININITIALIZE /OVER REMOTE INPUT READ RININIT,RKRBIOT /INITIALIZE REMOTE INPUT /046 CJL / CONSOLE (NON-CONNECT) PATCHES. / INPUT ROUTINE PATCHES. *KSFLOC /OVER CONSOLE INPUT ROUTINE KSFLOC, KSFIOT /SKIP ON KEYBOARD FLAG /023 CJL *KRSZAP /OVER CONSOLE INPUT ROUTINE KRSZAP, KRSIOT /READ KEYBOARD BUFFER /023 CJL *KCCZAP /OVER CONSOLE INPUT ROUTINE KCCZAP, KCCIOT /CLEAR KEYBOARD FLAG /023 CJL *KCCZP2 /OVER CONSOLE INPUT ROUTINE KCCZP2, KCCIOT /CLEAR KEYBOARD FLAG, AC /023 CJL / OUTPUT ROUTINE PATCHES. *P7TSF /OVER CONSOLE OUTPUT ROUTINE P7TSF, TSFIOT /TEST IF OUTPUT READY /023 CJL *P7TLS /OVER CONSOLE OUTPUT ROUTINE P7TLS, TLSIOT /OUTPUT THE CHARACTER /023 CJL / INITIALIZATION PATCH. *COUTINIALIZE /OVER CONSOLE INITIALIZE COUTINI,TLSIOT /INITIALIZE CONSOLE OUTPUT FLAG /046 CJL / CONNECT ROUTINE PATCHES. *KGTEST /OVER KEYBOARD TEST KGTEST, KSFIOT /SKIP ON KEYBOARD FLAG /047 CJL *KGREAD /OVER KEYBOARD READ KGREAD, KRBIOT /READ KEYBOARD BUFFER, CLEAR FLAG /047 CJL *CONTSF /OVER CONSOLE OUTPUT TEST CONTSF, TSFIOT /SKIP ON CONSOLE OUTPUT FLAG /047 CJL *CONTLS /OVER CONSOLE OUTPUT WRITE CONTLS, TLSIOT /OUTPUT TO CONSOLE /047 CJL *RINTEST /OVER REMOTE TEST RINTEST,RKSFIOT /SKIP ON REMOTE INPUT FLAG /047 CJL *RINREAD /OVER REMOTE READ RINREAD,RKRBIOT /READ REMOTE CHARACTER /047 CJL *REMTSF /OVER REMOTE OUTPUT TEST REMTSF, RTSFIOT /SKIP ON REMOTE OUTPUT FLAG /047 CJL *REMTLS /OVER REMOTE OUTPUT WRITE REMTLS, RTLSIOT /OUTPUT TO REMOTE /047 CJL / ADDITIONAL PATCHES. *OCTLZFLAG /OVER ASCII OUTPUT FILE <^Z> FLAG / ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG. OCTLZFL,OCLOSE /ZERO=DON'T SEND <^Z> AT <EOF>, /NON-ZERO=SEND <^Z> AT <EOF> *ICTLZFLAG /OVER ASCII INPUT FILE <^Z> FLAG / ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG. ICTLZFL,ICLOSE /ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z> /IF LAST CHARACTER WASN'T <^Z> *ECHOFLAG /OVER ECHO FLAG ECHOFLA,INIECHO /0=DON'T ECHO, NON-ZERO=ECHO / ONCE-ONLY TEXT MESSAGES. /024 CJL FIELD BUFFLD%10 /FILE I/O BUFFER FIELD *FILBUFFER /OVER FILE I/O BUFFER / LOCAL PREFERENCE MESSAGE. /024 CJL / USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE. / THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE. XLIST OFF IFZERO GENMSG < XLIST ON LCLMSG, *LCLMSG+40 /EMPTY HOLE FOR USER MESSAGE /039 CJL XLIST OFF > IFNZRO GENMSG < IFNZRO LEDERLE < XLIST ON LCLMSG, TEXT "%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%" XLIST OFF > IFNZRO UMSG < XLIST ON LCLMSG, TEXT "%^I^NSERT LOCAL USER MESSAGE HERE!%^" XLIST OFF > IFZERO LEDERLE!UMSG < XLIST ON LCLMSG, TEXT "^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE XLIST OFF > IFNZRO LCLMSG+40-. < XLIST ON ZBLOCK LCLMSG+40-. /LEAVE PATCHING SPACE XLIST OFF > > XLIST ON *DAYMSG /OVER DAY OF THE MONTH MESSAGE DAYMSG, DAY%12^66+DAY+6060 /DAY MESSAGE *INMSG2 /OVER INITIAL MESSAGE INMSG2, VERSION%12^66+VERSION+6060 /VERSION DIGITS *INMSG3 /OVER INITIAL MESSAGE INMSG3, "^^100+REVISION /REVISION *MONMSG /OVER MONTH MESSAGE XLIST OFF IFZERO MONTH-1 < XLIST ON MONMSG, TEXT "^J^ANUARY ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-2 < XLIST ON MONMSG, TEXT "^F^EBRUARY " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-3 < XLIST ON MONMSG, TEXT "^M^ARCH ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-4 < XLIST ON MONMSG, TEXT "^A^PRIL ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-5 < XLIST ON MONMSG, TEXT "^M^AY ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-6 < XLIST ON MONMSG, TEXT "^J^UNE " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-7 < XLIST ON MONMSG, TEXT "^J^ULY " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-10 < XLIST ON MONMSG, TEXT "^A^UGUST " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-11 < XLIST ON MONMSG, TEXT "^S^EPTEMBER ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-12 < XLIST ON MONMSG, TEXT "^O^CTOBER ^" /MONTH MESSAGE XLIST OFF > IFZERO MONTH-13 < XLIST ON MONMSG, TEXT "^N^OVEMBER " /MONTH MESSAGE XLIST OFF > IFZERO MONTH-14 < XLIST ON MONMSG, TEXT "^D^ECEMBER " /MONTH MESSAGE XLIST OFF > IFNZRO MONMSG+7-. < XLIST ON ZBLOCK MONMSG+7-. /EMPTY SPACE FOR ALIGNMENT XLIST OFF > XLIST ON *YEARMSG /OVER YEAR MESSAGE YEARMSG,TEXT "19" /YEAR MESSAGE YEAR%12^66+YEAR+6060 /YEAR DIGITS / END OF PATCH FILE. $ /THAT'S ALL FOLK! |
Added src/kermit-12/k12pl8.boo.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | PAL8.SV oX?lP40400SA0<076Sh@:`@86RLm?QPZ?cXP21XH6RXb9c`j80PJ61XZ9`PJ60`85aP=9ch86QP_ 9B0k90P>60h83QP?21Xi8@PK?QP[7`PG70lj80PJ70l86SP161LZ2`PJ>04L3`PH70lj80\i6cTk 80PJ61Pl42\a:Ph86RLm?QPW?3\030hH5``>61PC>BX>;P0007Tl=`Dg9CHO4BQj~33clb0C`X :SlK30\n7`\;33T:>0P3?B<12c`O~~~~~ZR\0`30Y0~BLUD40;<4~ZcaDRV^XP~B[4ZP00X<~B LUH4068<~T1nHQ3810~C@08Q8nH`9FHU;bIk4994^>nJNZ8@40KX4N0Aj6hB4PH`;bIP<9@U8dB6 ojV00;0<\RRZ2f8:3F:b[8IJaBH02P<02`O5ZTZ1Wl\0@0kn2cJ\2f:\44km42nhAZkl2bJ\ARh4 \>:b0;0J\RSFeV;N2f8:2V8<6F:bfHH;3BIJWbH02P>b060;iCJb3BL0i@8<WgCGPJc50;0_nfT9 HCh@X2og2J=Q4N:PmoX9HChBZ2l2POcU0;00[`Qn8?c308h05`K`<>8H66n0ok8?3f8>X6kinBHG LBhH>2oaB:hG6bHK;bIk5i8I668J6f8Q5n:XkOXI32HK3BKn6I@IHBhJT2o46J;mV9nW]jXIHBhJ T2o46Z;mV9noX:hJ6RJbo:VP6^8JYfXJ32HG3BKn6Y8_H6WT3^8>3V8?6V9Q6n:HgoXG3bNP6^8? 6W815nJ;6Z813nLH3bNPnN;ih6hJ62H@lOZ>6Z;mV9ol`9h>5cH>63KiSTZ00;00~2aNGMWfSD 0?l3PBS?_lbVo\\Wc4X^2?gP`Ob2bl]dc?\RndH>1PC^`L5RB<7Rn\dVnL4V6:GjcDXn2P[^ZLf3 ZLf4X02Pn?LPn<\Wbl54ZObbbl]dm\\WmO@`BP[^`LaRll42`H><P02`bo9B@<;jlL\Tbl]d`Efc ~HDb2BZ@6Z~BD2TA]ZHZ0;X0mPO`P?lO]Sl08?d?901?[Al0[kH?3IX<0@2P~6SolaK<dkG0<n RJ\R~4P000~3P000~9h0<0~90@GCoTn0~8H000~6P@0@074;\000~7l0oaG_Y2j?4?VP00@30P DPokn_l0QOoof082I4;MP180\13H:??lSO0JRB1cT?=00:R0CHZ:>0Y]IJ_RkS5RP9mo90S0KoHH 1`20IfPbjX2PP07PH3ooa3R5?a206`J2Pk^0Q3>15NIoX;hDOf\0P0J1PVInjBJ3869mo`9Po_;m PbCKjJ?YjGAlo9VAP:96PN86P^86P>:jP8941^j1@2kJ62n[@:8X0OkI@6h_fB8Hf_:j\hX0@0kJ 62nk@:8_NfUj420XeoXQP>:P^__X4N0QPN:P^__X4^0QP^:P^_^:X;j:0;00P`J3ARh4Pn86Pn;Y jG;kX2nPPnJLP:00809iX2oZO;W[f:hPN68OX6kjnGEo_KZlOJmV6Z3[i_l0?0HlMbT4ON1f:2Tl OB1f:2V0MKUdLiUb799a>PHLL20k:F:PX?Y_>Y961>i^9bU]OY:`M:WoZiYb799g19j]5j9\Jb0L 769ZJIUX8bHS4cH<>6IWMKUV_YYU^YYT<YH8IOUe89;nX2o1f:iSO9UnHcWmHcWlHcT_HbTbHbUe LYT8<SH8;cH8o3L8oCL8OSLeiTXiIIX8Id\bjTYRm9Yk798Q7N:P4?;0m?YQY9`L7BKX4N084CIP Ii^2P@13Io\0APh61^j00;0O7d<P[oXYj2nJGj8O7f<XV_YNZ2nIGJ8XGI8XgISo7RKn7bHOoDVW 7jLNWTZP7^JO7jLO7dMO7bJP7^J7GZ8XaoXco28XcO[k:2o7nZ8PnO:Pb?XNQTYf82J5:kCAN:8O f6hO83JP7^J5:k8XaOX[7f@OGS8XaO[h:2o3mj:XX?k=0:3n2RH::3oM:;UOh7Z0m^;\mF8XHFTX Jl\05`9[M`W^kk\Od`CU0\3?jOlbm0oNP?Z?[cl0V@HFX2n0V;B=<JB=8JC`G8TaVD9N:2nDFj8W P9^PV>K`P8_o0?00<@;4Z2nJ5[:PV_^^<J9J<BK`<HCckZ8aaV8W<IB[FZ8al6Pald[48BhaFF8; =6H;:3o79jTdF2:P^_[5]bXh:02]8P;C8H:Xd?[69bTQdbS`l8RJ0;07kf;`mVKK1jKfl4<Xj_X7 @2oIP:k`mT8XeoYG9bWHenX7Eb8Wdi_jM?\0F`8WI98Wl9\0F0;`FF8;GF8;l7CkmZ\08P@QG6W1 P9208M30Q[Tg66n0_k8e<69Q=n:HP?\g;bK3<RJQEZUFEYT`HBh_V2ndNjT@_RTA_RTB_RUf:2TM b2RoHBh_;bHH]?XbVDYK:2Tg=DB?G:Tg@2k2RRZ?bHoaQenUo0l0~61@IJ1RH5ARh41NH512ia E`8X1YC<b:\0:@8Xo?[8n_XkBRh8En8X>Y9G:2TGb2PHX2mEERTLb2QOZ3oe=j9FE9Wj=j8PE_UK :2Tgf6\L@2iCnYX070IYJ98U5f9\8`HU8ChS8bC8T_XS9BMYZ9UYDY8U8f8Q9N?0W?XS9BMA5i@G K22PP?]YJ98U9F<CP6^Qdi3Ic@32c`3<d`29R@29R@29;`I08BhTnfY6Z>o74Z;HaoX@4FHBH6VP <>8`;f@T^DYo0;00~6X02Pd031c02h[@3F`P2`X02PcP3?X034`@3Da@2PX02Pd031a`35X000 ;`JG]GQ@:2UK:2T`HBh_V2n^XJX;NbT@^RX0S@V::\T50@B9ol<Xo_;ooG<Xo?;mng>1n\2XU?[i VWY?n2WgZ0nBmZN9nl>1mL2Pm?N9f\kkPAbXZ?ZalbN9l\>1n\2X\_[anCO`R7o_RGcbPCaFZ0o1 2Z<>b7Bi2j<?bGBmkZ?]k0;^Rgc[jY_bk_o4a02Pf@3If@2=~2ZZX0ZZX0ZXd0~3aHd00?T?0>`: ~3P800P800P800P800081>0?l]i[Wb2d\RXeOi9R2@2_PQP2:b4:@?4hToSX@?JolY`?kboO`W 385\N?]gJolYf=QRn_T2Z?Sgf<P_UoNRmTmbooZ@nJP_mDmbolROXoNRm?=kPHHS@T4CPA94@DXf CYEB0DLea@m4e8l3Q4=ARO;3PO70Z?3kRF_3X<Wjg=\W`=]4cl1:POg2o85lRX7>:P:@^o]?eLjR knigl66i9?2kP?c=O83_0@44>8h`3@1OQOo`f08TI=dQP00Q\=P?:?`o<4:IQ250Xh[k_l3^`geB _o1On>4CWoS_b83k[2Po[J`WRKG3PKK0Z;OgRKS3PKW0Z:Oj[24n[J0_VjjR[k1b\Jib\ZYiP022 8:\;3@Tg\j1:]:JK0;ZGoi1jQnoe8ZhZX2kR<BmR<3P_0:?o12D:Y0;`CT:0c191e\a3AY3_cLbc c\l2f]1RfmURg<e[okGk>88<CZn@]P3`h^=XoZP_dn:b9R7<fejRX=?kI=@Z~37Vc0oB0_hl2n Jg:i[k?<97@9HbFM6P2@:J^k`>G9YJ6l9A[I0?d?m5Kh5@00D<d6P2Poaj0_PLfbOZP?cBdR;LeR ojP_Vj>XcOhRX87kCC@VPGJbcJ=X=74PX9gjP@2`Y@9?`KjZcDH^1TkPbLTgcDX^2PS^C\X3b\]b YLYTc<=:O_dYc\>:b\TVb\e2b\ebNL0_=010X`2`0:D:~4J`;<o6;:bf:U@6k>MKU<hRYeni;T 889;Z2mliYkTOh\0m`KjnGT8m?[gkdZPmnKa8:;hO9WWn:Wgld[T0;2YIUZenEn0f;EfMomlf9hc WVR0NJ8XP?Yf8BhM]FIlWYRK7J:XUOXPZBR<<jIlZIRY<hIoHKUSS:X080;XUoXPBR99X0nN84:N 0;1m]@B`]Z98ZI]g]YJP]NJY0;00:@;0Oo_o0;3nX3nkAk8W9iTWK9;mX1o2oJ=n82oHdh:::\T4 ~3k`Zk0;00~6H@;\m6;@kRK\BB961^h6A^3@d2K@D2ke\2ofljT0P0\0R0oHo;950;00~2ndD[ i0oR:RIY9DbEAcEC0202A2P_X?nR`83kO?jIP7GY8?dR:?cknjP_YfJY`h2XLSRB=aaRB7FIP669 HjFZ:bP_W@6^:gaYVgbYMG:I6SET[f6YKacB6aMRJb4>6f\PZ;gjM1VB61]RnQVb61]RJPbFIfBi <Q9Rb1gk8?TR:=7jn:P_mmRnUWbY<^1:5adVHQ2B315R3A9R3QeR3hUZ5b4^7JP_ef6YI8VZP:ig 7JBg]KEgY`1`770P:?KjKRLYkdRakeCo;_XO5EbOhki002`6>1aV=H1RHa^F;<P_ob2boTX^X9Cj 11_VO2bD84\R:=ojoBP_h_bR@23_njP_nVJinD>i`:jXU1^RFZP_n66iHon[0202mb0_mR0_mB0_ m2P___>Rb;kjIJjK[Zi;8aARZ23bl\0_gB>RA4C^9AAR8bD2A23RlB<VO4>I`B>R7A]Rl2<V8b<f 8fFidgbY5mHZ7am3GZP_janS7GaYef6YHj2^8?Q[J51_B;c`0^\?=2<?V01gP3>@a`c`EC7gI3:F 4\0_Qf6YL3:TScFT:LP_Sf6YLa7Bb23bNJ0_ogFi8<P_obbbX?ok;QeRHbjBHfJI2;KjI3:FfQ3P Z;Gj7BP_0@SS;WEYWbbRHB`VP]R^0G;Y22hf21df76\P:=Sj8AORJjP?cabRoQbFbcPV?l1122Ok hgj27AdV;WdPZ=SjHGZJ;VhPX>?h76`P7A`V22<f8`2`7B0^ER0?jf6YJAfR7N=[0?d20d9R10=S JgL2Z0?g0`A4lgjRkZNoZ]NF7A`R721RodX^::;j1_kRB2S_X@B^oDP^::3j1?cRZ9ojnh>J=JP_ nZ2n=AaVnT6n0@7^1?W[71dPPQbR8B?V7B<TZX:Z7B4^n1bbMfj@71aR81gPn22omb0_mR0_0BS_ mD6b:?CklbP_g`6^:>_jl_5Bg2URj=CjgMQ:X=gVlR<fg2<[g]a2g]Aj0=P?:>dbZ>SjkB9T8BUR h5ciFm`Vd^fTm@6`0;`;08`0P0fP`X6ZM84?PI5fH:if`PG`1UD?080>?Z]0P80dE_nBoRUbh:7j EWZB32P?WofY3OdY3_dY3b4^5jP_XH>R:0nB8AORo5^B:82K0?\22_YR2oUR8giR2P]g8j]:3:A[ 06T9:;;kJ80V4f4^P>Lf6=?j6QMRJh03JX2Cn:@VGf<iGjAc755Y5jA4P>MDb@RSGh1bmj@VY;9k MG:I720^9^9ZB2VBh?Kg9]i:boHWO`2`ik8VOV4^J>Lf6;;kJ6XiJ?DbaA>T720`Dn1?0N53b8lX <6^K0304<70^@;P_oojc4?eS4OaS4V1YP02`14S^X_]2@9;jnZ<XXJ1^XZ<XMj6BEZ:FS`2`~3 ::?knD0_n?LRXbVb`7okmP2``<7V`blR`A1>mA0_]4J^m0TV`DH^1<oR`@9_[`2`02l2[`V340US 4@US4PUS7H5\a02`~cOR3lEC\PeNGo9M\?PX40P>H1obVD5SYV>b]V8SmV53iV<aEVGoib26eY OQ<VOVXYoGBi6BUR:?ckb?_kGjPoY5fR:5fB:5BILaJFnoZCnEai?\<X?l<XG?RICoNb2XU\JdH` 2Seb2PYgPOK325C^mXYl:PJ@~33=5SdBQ?beJYaGJR9`bBmOnI`n^dm82@020Plh6jfZFZlRLV lRPVJo4W[ZYZ01L6:J0_hQNb650^6U=9P1[VhXRgVmjTdnm5Qe?biXko^cMBBh0RW0PVSg0bY?KV O7FI;6<Y6f<Y76<YmV<YLQbB299JZPR?jaf621`f21\f22`f8?lR8?kbZ7cio@2`Z:Oj>BFLXCVi YJ7[0?H65f\P:>ojmoaRjfiR1a=Rn?MRMfRB8n]R8bDfn24^8bPoc?RV9B4nmZP_iRFTn<A:mgLY D_PV8b4nn<PofONRXJ2>hJ2^8`L`Z=GjX2?S8b=cjbDVmRDWjb4^9OLRZP2`m^]RZ_MVnn\V@@LV O[HZ~4iPl34mACedK<EoooWb:DMFUb89;nZ2n<^:QeQIYl:i8Q`>JP:n8[7682oO\[`2;0oO\P oR8XX_[lX2nUi:hP:n8[GfMlUY[oWb:DMFUV\9ZhZhYT79HB`2n:HJU`RZX0H@US8:;8Oo]l^9\0 ;`;k49894G894W897G89PGc00;0SX6h822H8nR;8g?XS22NP2>88cF_iAB\080;h@2kgT2oNgT\0 @`WVI[WVi[CV0;0PmR90mN:@kOC]6[0U2_16YORC[lSn2OI42?00_0Cc_K:P`_[0Jb1g_i8@_oHH _OAj2^h:`>:DeVT0P0\0^0[0Jb1gUY:FU69[A0jDJb0Q_>JE_RJnlcRn_SA>U0JnlcRn_SA>BPh: U>8:2^kcYXZm`4nHoj_o0O00~3S`on:E;Xc?[mF9;lFG;k=7KjeRJ9`L>1:<o^RZ`Z0I000Pn9 e\9[M`:PnOTf`2K1@C0PA_9J2^jo`FC1USK1_DJ1Q\[hlbQKlbSg0;1\mP^ijG6TKPN1g^OMMW;] lGEeLYTY:2n>j:mo>;8gOf;oGG8XoY\LMbT4ON3m8bHS;B8]8f8W799m9`Uo8kHM8BhM76907N8@ Z?XSXTZ08n;likRbLZTL5RIOOg\FZ2l1[n[W`8Yb798Q5n8H6BJPnn\H5b8L=FJm8J@Yh2o>8:;8 Oo]lbI[Whh[jF9;WFF8:ff[WfdZPinKM8:8:X7hNO6TP`2oFG:Uo:K:50:1e8994Z2oW8;;0ioCW 0;3alD\HW<of0?3Cc`5f:RJ2`73[f2808`J98l=6o`8S8f>1P<^9o\>12\j@E_;mZGbk^XBQ^lRj VDbk^XBA^lRjo4?k:0nZBZh8^^JjnR;0nO8P^_J9n<>1ml2Xm__em2OclROf4;oal;;_lG\1~2 k\dWP<gS087\kJ0_bbZRJjP_^gjb:[]T^bZ`;hm:_BPYD2PY]C66P02`Jc8VORPY<[Q:]HB`>BX> ;P0007Tl=`Dg9CHO4BQj0484_UBoF@3l`TXQ`oT__`A0Y@G`nSS`ol?hXnooRR[92Q<1`84^0XCb nXUlh84lAUKPX>Cg49CjiNHWRN33PGk0Z9cjjnLWRNS3P@K>`:CjjNYeRN33hJP?h^>cX;;jk><W [>=4^:a:PH[<PB[Y0W4<nm7jg]lY`=7jf=LWf]TWg=\We;Mbe]Egg]dWmOIbmoQbnM1kP659i^:; ZS3Y@SBIC`PhP;K^?II^RX3kX`3b=XY?Uk5GKDaWY27a8STI0M80AQ<C3M9@AP0@ePY2K;l^Al0^ G010~6oongo`2`C@3@~20E4LXkWaP548X@0SPNV<X`21QIo;XFlfRbkUX[b8T1EUXPV4X5?7TjT0 ZU<PTZT1ZU<:T[lYRU>IT=hXR^N<PbN[R>N5Pj<iXNO1P@MJYNO5P9@=PM5UPPfgYLMUPPV5X<>l P>A5ZjPmPP<0ViTgPgAGQIUhP>:7T<C;\GYHR<80l00008AP\N@[ZoNGX@0U3?ONX00Q3?A_X00T 3?2oXP0V3>ZlX@0P3>ONX00R3>FDZ0000]VlX@0H3mTUX00P3mI@XP1A3m>lX@1@3]<UX02P3]5e XP033<lUX0183lflX@0@3ldUX00X3l`UX0103lY@XP083lXiXP003<KTXP063:jJXP0:3ZjlX@06 3ZkNX0053:gNX0093:a:X00:3:ZiX0083:ONX02T3:?NX02D3:=:X02L3:1_X00<39kNX02<39^J XP083Y^lX@043V?NX00A361_X00D35boXP0F35?NX00B35>iX00@33jJXP043c^JXP003QE@XP00 3_:lT@0A3o8UT0113kfoTP243j[NT00I3:VoTP0L3:U:T00N3:2iT00M39[NT00H39Y_T00J37no VP0027m@VP002V32V`0015cTTP0035`6TP0135cNT00234i_T0013SCTTP023aONT00430nGT@24 3YLUR0001WblP@0@3W`UP00P3W^lP@103W\UP0203WSNP02237PUP00Q3W?NP021373NP00735eC P`023S>DR0000040P000P0380Yo9HZE<HZJ9K<N1?:FUM<NVA8O9XP6UiZG:9hXZb@_;1lU6<2S5 nXXZb@4000;9lhXZb@<0~2_@[<cGVOOR:@E_;Ce2ODB3hQd^8fP6BOcRNUcbNVd2N0bK=1Z0oA bK=6b@NQbjF0P;n1dlG?AeG@CUGcm5GelEE1P7bE@:8Q9^H_NfWX4>0PHO8@H6T_9TCIOj\0l0K` 2Rh:2^i\9`W`OB0Wi9\0X0kjngGloBOnN58Ol6^l_JZ?`O[]oW9Q>BK6RY[7?CHETfR90;V9T\>1 Z<n4:J@0XnZ50?2K7bIn9bTOUTZCn;mc5II0;N9CTiS1`Y8X`fF^RJbm_SNm_TBoZ4Z1a\W0ag>0 _>;4^g;5^WViD[U`K297QBn0m_mG^iD002Fo`eD0m2FPfo[jb3o[n[=8V>o[j[;YlIU5j>WPeZkT i2KU_dX2P?\0~6P@a@8Mf7@Pkhn?6?mol58`aBJ?hf2@3nl?o_3o00?\f0Pob0P:D0o`V8P8dQ oP_mX3olnb?D@2I0@3I08BkjoG>PV_Z9i<kinAM^:RJ1n\<>oF=6n>:Y3:;gX2n[mZ:ZZRJP3>J9 3<L<37L<3WBQPJceI2NP<>Kd32H<3BH<NS3cj7h<maOX3>7b37Ca`;h=lcL=mcL=lSL=7CK`39;_ X2njP:]Dgo>kVg]ooOoOFcHm7JkmgO:kWfYmoNl0G@De7igmkoN]i4[odY\00@:0Wh22P023ALl8 P@3oi_oJ^P\:``SaQel0~~~~~S |
Added src/kermit-12/k12pl8.enc.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | (REMARK Image File Created by PDP-8: 30-Aug-1990) (REMARK File Date: 23-Jan-1984) (FILE PAL8.SV) (REMARK File decodes to PAL8.SV Version B0. Taken from) (REMARK DECUS DM-101 OS/278 for DECmate II.) (REMARK Should work on any OS/8 family system.) (REMARK A recent assembler is required for assembly of) (REMARK the KERMIT-12 source programs; Version B0 is the) (REMARK latest version.) <VVM86204838022000V01381U0AS08CDD4SHUK613U0T1120Q66H2KCJQ7G90K211H8D14> <UG80640O0BT3017GFH1LSC34MP00970G0C81O0EU61GH4D146O84FLHG4FN10OSK3OI18> <403I0F06GJG8CA2S8BK20JHG0H1U086750UCG91CORME8I1843330O640IM0L81OOQQ9P> <3SSC07G1R2340S0BU1G8O6603JOL05O006067ICRN0K95UDJH38K0000063P3U80O7G9A> <MFPGPO5G3UOB0353I0S3101T28OGNSU00000X003UX000472GC0G601800X000B0SI5A0> <04MC00X000R5JP1AAD0T800X000BLB04K00C1800X000B0SI5C00CC800X000N41OUCG6> <0G000X000C4G722OHM61H549B2V5TI23I4VE59K9T021GGTQ012O8UT00IC4H30ONPC11> <G89A27A39VUS00010P2P6L8GBC2H0R2P6LGIQDH800C5001OB9HDALI0RJS00SG1VSO5M> <LGGB9B710BUV22LOSHHFOO5ILJI6S11B1EP000GQHCJDCBB6ROGBC2H0KO62365IDM90M> <O6IB9KV001GKQP000OBDP9B4S6G00N5E329VBBSG6U50032V7TJ17J1447Q1BRJ17J144> <FQ1BRJ17J144NQHS1CG6V5000012NVFR10HGV000062VNG4C31HSCBG0NVC3P0UO7EK0N> <PDU91FPOI33POLSF4G8BM3CGRCBSNM8BM34GOC6H1NOGI2VT8LR91IO623DGDJVI1I8CU> <C4GQV45C88CPVNSOL9TBE8CUC4GQV45C88D9VNSOLFVA08D63ALIJV7A08D63AL746J0O> <8BM1MFU46J2V5GESGGEC3H0SO7I3BJ146VPHBFI2TOFT811KS7I3BG1C5T8M8DE05OF46> <3GVQG2V5NPTO11KOCF22NHL3H1L7UVJ2FSTG1GSOBJ1PGO9UD8TE000000006SBNITJT3> <8001VVI0V52LVDJ1FSV5IPJIAS20FR30IVHUB9IPCOBTGVFI6S1N08R0IO7I85G9FKR6I> <V5M1U65AAF6U9BGAS2KAIF6OL56DL8000BS0USNOFIQCMJ0RL4NSFIQCMBR7PCVL1T74L> <O56O4MC1SPC330SGES0002SMBPF82M25SACMV5KPEU16N8000000000X000CIKP21AKQ0> <400X000B2K0IIARAKO001ENVC03HG3VV1DG3U0GFVL14U00AQ0FGLVTM03E9L80G0000X> <000373OVUDMBPKQSS0P8IALG0000000800000000100000000000X00037O0000000000> <X0003A0AD7VV0G000X00040O0000000000000O200002RH1C000000000000001VOFU6I> <UUGGUG07GJ8O00G021T9FVFVQU07OA3VIR1024P0TQA01005GVM1IHVU0HKGQ12FN6E8A> <8200H054Q25A72JDMP9U47N9CBS00VS29V06DS0O01R811JO687A180O0FGFC0VVHH0OA> <0VGG1GRN0LO6E03GJK1C5DNVQG62IRV00380Q0MG8JUDQB868G0FKNVUO1FSBUKGEMR7Q> <BUIJKPFIFSL4981P32G7G650N0CA08N8K0SH70CA0U80MQU65AM90F53G1DMF408NIR7O> <O5MKBLAPG03I05MNHHATI81HFIUP7K08F52MNS8981UGBNBN804F22A0VK2TQTQ015OGI> <GBT0NELOLQGBH80000386A1U8RG450V0CA1NT4N95UVQ1QG6GEKS100008G2F7T0NQKNP> <BLUR1H04U31VQG7V9FPMVTBRAUFFMJ606NUNVJ001HS4F4NFO20FKJMIA13O1UIEQ98N0> <4NB5Q9EEBI47072OT23G3GCEP2JUGAK2BF4EN4DO22DQ97IR97TAO9EIFVLASN48E9EVG> <4LB91E9M0DDGS474ML5KID1H368R16O6672R7ITCMDAV9CMLQIP335S49CMBL481FTUGA> <O7MOIOSNODV9CCVTIOPVP5HI5UB34CKM75QPE8O8CCHGGONJ11VS623VQC47FP1LLPKJJ> <9IK12R78CLEL5HAUIBR477228EVK0GGVG5F95GSKGGSC7FEG08J11GHIO5ME210G7Q3MP> <O01P3E0RG6N0000GFJ3VP0LBP2JVKAJ8IVC7PHVSKAJ8IUVA59I9EP50ITIA4DQBVM3ON> <UC7Q1V7UQKTOV87L9TQG63QKVE7Q1USFIBTGVT831TA3IBRP8LHP36BUF52MD5UVIHB3I> <VBP05UFQ1B443QK64TJ21E2K5EMH4U31VRC33TH0T831TE2I5FP8LHB2MGFJ3SIUUA5CA> <BSF52M35TVQHQGAPK005VJ0KC5F52UTIA3LVBGEG0NMDR1FAOK9C718MQO008BGDEBNNR> <LUU0FKQF7500NSVVKG6BVKVNL80E7VLS00D691DUGBG14OL3A33A6K467GIN232ACIBRP> <8L515N4JRG3L0D64F1E0FVS0000132B2FL2SQ45NQ1EDALOHH4MJ333O466NJ5RJ32B39> <4T1HLAP5KOOOU11HLSPC9OGM64IPC2R38C5V52M7I9P389CFK2LQ5HDBE0S0505D48KD6> <8GVL2MG5HKIE8GOQE7GHS5PK0060SNFDS3FDBDM0T7M7S7IHBL20VQ0LMF80JO2URP8LL> <P5F4JUR2MN41P5F4JRQFVQMT0009DP4SJ4I9TV0002B1NG4MB0M9EN1D7GLUTVC00449H> <1IN4S220DG011NG4OCORV32S05FR3A8OEC4HNV65O08RM5SM3CCLA35B9AQAM4C7628NV> <J2LKIUP116V226DU44KRS9R950GTHI1BVPGI5THFU65B8GPAJ4IRIA23EGQQHUAS4DV40> <B1AHA4FVIAV3U3GKNVSX0005C195KO320NI6S130A82U0G3H4LSIGG3APIU80012JSKAV> <JU8LUH3NP5E10INIA13K9BP50GNHI11HUG2AMAM474CGDFVL2NL4DSLD5AAV8HNU84LC9> <DP51HNNM11PP09AENQ0031P5KID1H545O6OOHJ4NH148Q27V4AI8H3E9CMJ6K9D4IIC99> <27OGJ4NU0L7126SIPA50N45O6PUGBG2B94Q32ACIM2ES0J88D63CGPK621JOCO39GH449> <X1283CBP41OGM4INRSHNQHB3I2BUOLHR10O8M2AB0T8130OO45T14LEDNU0000000X000> <3180A0380O46C1E0AQ3B0O85G180A0370PS501H0C23A0OK50180A0380O4671H8A0006> <5TSNHD9514K2BE984C7628NVJ2LEL890N5TI22LQ004ORI59580580E8IFVV50NUFVPVR> <SK2VHVT7UU823TFL2KKFUD9K97PV07NVA594VRCH4VRP08FBUG7UJ49TMGVNI0VL2L85C> <BV7I4JUB411UNQHAP3U5VPFS7OGVNSH4VIP085DUKAO4OAE3ICHASJ1DOF9IDBQFN0TKN> <CFRM8N7LRTBVIVRGC8320K06P1M8DI26G005AX1AG413800000OK4D007VI00ATG00000> <80200G040X10048078080DVVV65E90M95VKEANI9G20851V2S048G11UI32FS913NO89L> <PVVU05VHFQVU61J41EU3VM9LPVTMO5M0FKBSVL1VO5M7SHABIUTVM4JSVU3T2V7T8FT94> <V7VVP2L35TRV9FPIG4S62GHK2I0K28Q1CIIKSAAJ05A79HA0U3A3HTC42GU8IFPCG47HV> <A5V1I4JDFT0LI9DOVDKO16R9JTC1I0IVLVSP0E8LQ0P58029EVVNBAIPPVFFRLV15GR4I> <VGP06VPPUFG001809JG2751NO0V18FUBC408J43N980400M3UO6A7VP4O9894408FQ7E5> <ENVM0BGP7QMVVU0FO7OF9VVSFP2S07B7IGAMNLJ497DE822RFL1TNP29RHI0GN7T8L9PQ> <POGILNT0L6PASUNIM1TH5BJR56L8G0G0085QMC6N155JL84R9EJ901TQFVT91U3LTSH2L> <BNA08N664HF4C7JHS0FKC04K9FQ80189O229J0H4JB3PJI6V45SQF60POMFDMHD0RDIR5> <MSNJFVVEQG7342IJGAVUR001N2HOPFTUKBQCN2O9M23BDIBRT0NKP69BA00000O7G6OBU> <V42V3TG5MN5PCLV5J094N95HT4M8Q005IJELSO2F5N9EA3KIP3800VVFV91B02K000K3C> <QE0F50M7V85O2B6GFRT85J92QOMIPKNVVA59N2HIPKNUV85O296M6IS14TJCR2HI6G3HV> <859RE0G0155U0LC3AV2PNI6S1G4SF4NP4MDSIN0LO409OUAFIHCMQIKP96CLGP7T7UOPQ> <M35IJCIJ52PLUA5J97JV046G00N8O0000AKK00000009LMPGNSDIHCMQIU82UEIT94PBH> <9EKNRHP12095VL2BSTPKE9DVG01NNFUKVJS4AUH7NLRVA0RRQU4H0JU4NPBJPV17NLSTU> <8005L6J6BDFVJE05R3RMUTSNPRC66E4UL017JSKAG0JMS8B1QQQPFI4UL6P1RUKAIKH0H> <AD8OOPPFI59HAB37DVPC6J3L30008GFT2KN4814K14VK14U485PS000FL5LLC1BD54BL6> <BNDDNA0QQRL4000012JV0BFUVV001VTUGBNCI7XI9O34R0VRUGAO8VT4VNI13C2QF4AIA> <G0800002NFNEO000000000000009GMTGNK5K3ESBM297I6S1N0C132Q1MG5K750BQVM2N> <MJSO01E0003S8NM1FPD2G0000001FND2USGGFCAKID4IL9HA76D8008G28JP8L81FVV0B> <G2BSJVN815QI40NTUA5VOBTVL2L7IPLC7209E8HOCDP1P549EM40IOD67AII5FP8L7F02> <OLPFIKRIV4NB5P6391LLBSM3LNI3HGR45O6NOGI3C3BVA5BR5Q235GO46TVK8CM30GRIQ> <J0PDJPCHHI44NSHCEI40NPUA5D2BSFL2VNTM59D5U46AN045R1R5H221GC44B0Q8961OG> <TC3T8I8BU44GTVA5DF5GQCIK9F03QTCENKHTLFDBQE0023G3GUA5FC9N94UVF2I7UVTA1> <5RVQI5FLOJHGNO00CB33GOE66KK0IOR1M8MFP2VV481FTP5FK2KKS131N5U45GH04IVIH> <BFIVNP8LOHFPP0F40NRVA5VL5JBV6A3LG4ATAA23CIQVA5VH5GQCEVV00120BRV40NMU8> <1FBSG2UJP8LFHF7V4ANQB5NBIATEN64CGKVA120BPFO2MT48V49P264KGK08P2BP2240N> <HC8SNP51QO4H3C791MBO64CP3C8TI75IQQEBS45TDCGFJ3SIUVA5EMCFM3MBSLLSM39HU> <K1H0NU36HT8F905S00NUM0QF4DSOE04O00PVOS0CULBJ35I668GIVG58F5GQE11IL3Q3A> <8KVP2KFIOEN688VP0H04UFQ1FVPEKH0VI5VU8MFK2VVCBH1R5HI5QB3IPNGHAR9CHHITM> <G11UKAMKGTUA702C465QBLL7P2O9GM5IK2TM7035P311HE6231Q8E0DFP8LM7228BGDFT> <8LJP1P7V63GMBCE23U70F12P7HOP7S8EM3KHE0VFQHBC9C6JQ4BG6TUG8SCGS0R11QOE3> <11H3M8O008EU402MU85EN5GQD4GTC7DU6002VLG34GJ08C1GDCJNVA3G6G1K0INJ4VLUT> <UJPL9MN4791OOE240NVSINIHAHE0ONUSI7IHAGU0GNTSI7IHAGE0GNSVA59V7TQGCHLVA> <5VLQG66LGSNUN43O0U07G4NU91O0EQG8GSS8B268EK4ELAL0H1ROGRV0GSITO6SOE23JH> <007DVHSG2UVP05TNI1O0V52VL4GFIHFQ2UFP8LNV03SKATDFI5SBDO8KVT2MK9NDDHQG6> <RKVIC8PDPCHKROMSFNLD800FR0P85RFQHBK6TL12C892JVG9BGIRDN5D4JMRUK01005RO> <000HIK003DC5A0GEJS1F0B92TG6LRU20180DTAG03K08FGAME04G2AM5VRVS8KVS2L1IL> <H7K06F52KVJV90R7UI1QFT43V228BVL2L150SIG87U44GNJV15N4KBG0005UR0KBT61CN> <PC8P7SS571D13LAR0PEI002B9UA5R49K6G0GJSO9O0RJV32MJC6H1E1LJG2BA701FGQI3> <BUB3ENPQ8OE9A50N992O0JJQP4O8ENP80BRMKHT4NCKNB5P23JH0C9LE554257V0FTI2D> <BF2PDVMMVO00BJMM8JUSO9MGRJV32TI6Q4MKDK2UMM584PHO0G4AFV0809U2B48HU9GMQ> <O00GO263JG4G7RHFVJVPGG7VB12FU62AB0N0001O2E91525UVK1A92VA53D8FA0AH8KEB> <N58CLCQHBHS0000001SKBKCNPUG1FGBRRKCH9VG5NVFR003M0DG9C68NKO7GG5TFH1AQE> <8ONKC29C3P3E0GMFDGFG5ENG00004BSAUC4M20O9C49GIO9315GTP0DS80000000X0010> <UVM209AG7FULVP82BVDGG841100UD7VK55GMCEJ3MOLM49HVC533SOPM2LQV5VJ0H5MIF> <PGJ4VKMLFUPEHGP4AFIHFUFP2VR6NVQHAI2BM984NCIH5A9EDGMJUPVKVSPBGHUHGP3V3> <1PBIFOMJPFEO5CH4RB0HJGK8UN19OAP09VDO4EAHVMP2KIK0300000C31T2J8V52MBILL> <CA9R94SGCJTCVVF1KTEFK101000GBUEK1LMLAABP64SNICA16MVOMLQLA0031E8KVK2V2> <45P1HP843AAJT031LFH7H2KR9NID6NNVGSIJVPNOSMTI6SIB5019OO43HSJGT93FD5U9E> <KHCIOP1N5HI3IB35TKM75P23H88L4KALS48TDGT6231OC463CO8CB120BVV40NUVA4NPF> <UG03T8L9SJJGIRK69PT9DQ2006UOGN0QVIHBNMUSNSDQP6SO3I2DNO5TSNE9K64CNB68R> <2ABSE44P3UA5CORS34NH15TNQHBJ44L7OLH1FF5RIA9NO68V22FSFP2MP5TSA3QGAS7L0> <68O0FUKAQNL068RI6CHITDH55TJIABLU44H55TTQK006UONBDAJFEBTMTCI1C1P7TAR00> <000007UDK1K2D2JDLVSPTBIVSKVD54NB5P240NUVA58P2S9EMK5IV12NOGMO3L04AR2M8> <EF0AVT4APC1V0BVKH05VNIHAH2VJT0L9FE9OG25DHBENSNPAB2VSKVD54NB5JAM25OLAS> <M8OE22BU0L2KM39OAH800IOD668GFP2RVIV5RG0025UFR443GI88N14GIE291QS4SG6U0> <00327QG211G8421FLV4ARGH3E27A084612UD5UDKA00240NOSG1FFU84RQUU004K7FJ9C> <QV69PLUC00240NMSG1FBU84TMVD06NIA05F8Q55P4SAVVV617Q402000IUBUCLTV85C4B> <00DEBN5FVH0QVV315TSUN0LO52O1KKJLG01E0002LO5G06N5RIIPKM5506NP22IG3BS8B> <BOAAMNOTUHSPRSIV09PKK7FKF6EV4NO2ESIN0KAAE1BGAHSTACIUVO2KONVVVU00G0000> <007OUNV257V8LJ4VQ9C7VGIPFUR38BT6QR497GE83SKATR4AIAG0200F0B495LG6M9RVK> <2FP4DJC0F0G87P04HN5LO56NT617GB9CJ0MNN41L1HFH3PIBE7JNTO001MBUPTP3Q8A8T> <NEG5UUFN97CVMLU6BLISH2JSKAHRV8MVP3GORIFTVV4NCIHFV23IBNS107QBUM4CH34BB> <2Q8HP4SGS0VCIFDVM4CGTS8B1Q8EE80GTU45AGGHQKBK048TVP3JQMABI4731CTFRFSGM> <VA703ANOSUM0ISH1POGI2SGOC6FA1FTI30GNC733BAUK44H9VO5CS8GFP2RVIV5CJ3JQS> <EFQ4M3EE9CM1AMR9PTDNQG6SUMT483GLQG63QBS487S1BB9BIRV4AD8A009EKH04H7QHF> <JI43U09PTUE004U6VHO67PPVR0006J3JP7COL7G8605QPDG0064F4968O4CBVM4CP3P0D> <O1I4JVR41S2NP09B7VN59HEQBLIGOND5QP6CBMITCI65R9EHVO3TV52LASIN0GQT2N8NQ> <VG1FJSG6NB497U6823RVL2VM5TBV8BPNUAVMU45V2BO7TUVH00800BN7PNK07JF01I0IT> <NT0LIP2K9LVL2TR4VJ2KITRNC1A8BT8UAUP50IGIA4BAOORG0004QR349V9511ILE5RA2> <2077HA0BG00C0CF4PNE18IBSR726H800245EVFAJQPO01C4552OFVP9FO09UIG0NVQ0E7> <VV31VKFVFP2KIK0512CM0T0FG4A27VB497O683P30ART0FP7H1AA2SLV6P29U1I0GFRT8> <L71EMVJSH4V8P0F0DV0AKHV9BQM8IFG0S7T8NOHU7UGAM8NCFOQAOJHKN2LCP0E8LQ0P5> <802OSFVNB8IRQEVVG5D2BC7QSMQFM9DOVDNQGLNFLJTABF7RLVL5TJVEBS7V6UG904M33> <JBSBLAIC4K54Q39U08T07BCOUUIRSAN07Q68046RSAB5RR2PMN9JT4288I54SG046I2HH> <H6K6GQ8A6002DC852DJLV4HVC0HE00000X0003NVRVVFVG03AD0000040AA4OSHE8F398> <H120028TEIE6801C1L7OSN1NR6QHE5PCRO24A2KJ5K288959JOUL9K04L68GAL6G1IKP0> <L2VQ56AJ16CDT8K8SSSCG9SAN3JJGML32ECEE70Q0TAQHPOCB2A11M6H4PD0QMROOSJ5K> <288B31GNIN4MHCAG8UP0EO0H69JF1Q5AU4P0U4U423ROGEBGUK5HV100000005O85GASI> <PBLTOPE00C4MNN1NG01GGQUG3F00629BO2NS00O9LEK6U00310LPODS00C4AN5H500080> <AR4DS007HHBCG4K00U85DC98003QHLKORO00EA2MJ09801QGAQ4JL00607B7G4K00UI5C> <Q6U003OGLJ82A00F52MC09801T0AP8IG007GHB527400O05CCBI00306LBH9K00E1ALE3> <F001O3ALO6U0060BAMGRO00O2DAO150030ALAGBI00C12L71NG01IIAKC6U00699AHG98> <00P75A01NG030CL7GDS00CHIKR56G01O4AJCDS007099HGRO00O4D601NG030KKN1BU00> <C2QIJ1NG01G9AAC5P006118V2J800U153MAD003G0K595000E02FI3F001S8PU815007K> <36UINS00V14QK3F0030PJA9BU00C3ID90IG01GF9K05P0061R6D0RO00O64PK1NG030QI> <VTBU00802BVKK001809C2U2002015E2SG00O04LO8300301IN0DS00C0AAE0RO01O0P6G> <N4007G54BGRO00O14GU6BG03K4H5S2A006023S3F001O88FG15007211THNG00SG47M0I> <G03K0GU0DS00CGA3O09801OGOEC6U006831O0RO00O1S5QD9G03G2GCS9800002010040> <000000M8D7PCIQII9HL6P29SFI0NKL559HQADA3IP7G1D99AAV5CHA9A02RSMF4G8RP8L> <HE8L4L00400U0HSJI59580300001AUNPIED57P7TU82AOMJFL1T9P4E44MICDI80AFNPO> <L5FJPACV8BG0U90GFQHF8JP426FIDA2N5RG3S0P0AT6N7L8TEGAJIV6NQ5ULFHEGE81AA> <I83H1C9J2V5TUT00GU8162O89C11F89LDJDVG01NG5S70LO5E183CI9PF01UP4UV4007A> <0VT5VCNSFVAVS9S63UVGLF5BRU7QO5VD5VH62OSPOQKA7HR3QOAOIES9I068IE9CG7T8L> <122JO0AKFS50019MOFIFQ9787T9DE9VV2BJC5F408MPAE4JJG9C4OK5OELEP29RQUV4NL> <5U9FTAHI0POPU07HV80AU7OGLRFHCRLESPA8JG4R14FU2VG3VMILQRM80501DVBGP00NQ> <FK2MR7UNSHFLJVBI8V65UMBL9T6FHSHCUHBGEQON4DP2EBAVV0AS0X0005P0EL1KGGGVI> <2VU0VHU7VUS05O8VL5PK06O09VVNV1VNG1V00QFNO1I1QG1C0004VV24DG011NVHVRUG2> <VGVR5L340D0680I0S8BVKFUVK2KQP2FE87SNV4JECAM82FT61OVTSHHFHAKI1GNNV85AM> <BR2L9LAT830PI4N1HOCE33GOG7AK7415TBM9QG660NKC310OO6J1G3QFSVEG467UVN823> <3V4G6BU7M063BV6C6NUSODFSHGQOEPU0GC5RVQ1ATBG3QK7NRRNEDVFVVT7NR5N8UU3NV> <T5NBBNAFUFNVT002LR4QT3VVTFRQARBI9VUUI00103200JS4210687T2G1041VVVUC3DB> <N80AHGQV3U3G0000X003UZMBS4DVVVVVVV> (END PAL8.SV) (REMARK End of File) |
Added src/kermit-12/k12prm.pal.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | / K12MIT PARAMETER FILE / KERMIT-12 CUSTOM PARAMETER FILE FOR VT-78. / LAST EDIT: 06-SEP-1990 11:00:00 CJL KEY= 03 /KEYBOARD RECEIVE IOT CODE TTY= 04 /CONSOLE TRANSMIT IOT CODE USER= 1 /USER XX/XY IOT CODES FOR REMOTE LINE XX= 30 /SLU2 RECEIVE IOT DEVICE CODE XY= 31 /SLU2 TRANSMIT IOT DEVICE CODE BRATE= 07 /USE 1200 BAUD ON SLU2 (FROM BAUD RATE TABLE) ESCAPE= 004 /USE <CNTRL/D> AS ESCAPE CHARACTER FLOW= 1 /FLOW CONTROL ENABLED FMODE= 0177 /ASCII FILE MODE (ONLY ONE THAT WORKS!) GENMSG= 0 /DON'T GENERATE LOCAL MESSAGE IN MAIN FILE /RATHER CREATE IT HERE IN THIS PARAMETER FILE ICLOSE= 1 /ENSURE A <^Z> AT <EOF> OF ASCII INPUT FILES INIECHO=0 /FULL-DUPLEX CONNECT MODE LOWER= 0 /ALLOW LOWER-CASE CONSOLE OUTPUT OCLOSE= 0 /<^Z> NOT SENT AT <EOF> OF ASCII FILES RETCNT= 5 /RETRY PACKETS 5 TIMES UMSG= 0 /DON'T GENERATE THE LOCAL MESSAGE IN MAIN FILE /RATHER CREATE IT HERE IN THIS PARAMETER FILE BUFFLD= 10 /THESE PROBABLY FILBUFF=2000 /WON'T CHANGE! FIELD BUFFLD%10 /FIELD FOR TEXT MESSAGE *FILBUFFER /LOCAL MESSAGE LOADS THERE LCLMSG, TEXT "%^VT/78 S^ERIAL ^L^INE ^U^NIT 2 ^V^ERSION%" ZBLOCK LCLMSG+40-. /ZERO REST OF MESSAGE AREA |