| 1 | / INITIAL PROGRAM LOADER |
| 2 | |
| 3 | / LAST EDIT: 06-OCT-1991 05:00:00 CJL |
| 4 | |
| 5 | / MAY BE ASSEMBLED WITH '/F' SWITCH SET. |
| 6 | |
| 7 | / THIS PROGRAM IS USED TO LOAD BINARY PROGRAMS IN .IPL FORMAT DIRECTLY. AN |
| 8 | / ERROR-FREE PATH IS ASSUMED BETWEEN THE PDP-8 (OR DECMATE) AND THE DATA SERVER. |
| 9 | / SUCH A CONNECTION COULD BE ESTABLISHED BETWEEN THE PDP-8 AND A NEARBY PC USING |
| 10 | / A SHORT RS-232 CABLE WITH NULL MODEM. THIS UTILITY IS WRITTEN FOR THE EXPRESS |
| 11 | / PURPOSE OF LOADING KERMIT-12 ON PDP-8 SYSTEMS WITHOUT IT. ONCE KERMIT-12 HAS |
| 12 | / BEEN LOADED, ITS USE SUPERSEDES THIS PROGRAM ENTIRELY. |
| 13 | |
| 14 | / THERE IS NO FLOW-CONTROL PROTOCOL PER SE BETWEEN SYSTEMS, SINCE THE UTILITY |
| 15 | / STORES DATA DIRECTLY INTO PDP-8 MEMORY AND THEREFORE DOESN'T REQUIRE |
| 16 | / SYNCHRONIZATION DELAYS. INITIAL SYNCHRONIZATION CAN BE ACCOMPLISHED BY |
| 17 | / SENDING A SINGLE CHARACTER FROM THE PDP-8 TO THE SERVER SIDE WHICH STARTS THE |
| 18 | / TRANSMISSION. ALTERNATIVELY THE PDP-8 PROGRAM CAN BE STARTED FIRST, THEN THE |
| 19 | / SERVER CAN SEND DATA DIRECTLY TO THE PDP-8; THIS ASSUMES THE ABILITY TO START |
| 20 | / THE SERVER TRANSMISSION FROM THE SERVER'S END. |
| 21 | |
| 22 | / THIS PROGRAM IS FOR ANY MODEL PDP-8 WITH A KL-STYLE REMOTE LINE SERIAL |
| 23 | / INTERFACE OR EQUIVALENT. DEFAULT PARAMETER VALUES ARE CONSISTENT WITH THE |
| 24 | / DISTRIBUTION SETTINGS FOR KERMIT-12 ITSELF AND ARE EASILY CHANGED. IT CAN BE |
| 25 | / MODIFIED FOR USE ON VARIOUS DECMATE MODELS, BUT WILL BECOME SOMEWHAT LARGER IN |
| 26 | / THE PROCESS DUE TO THE MUCH GREATER COMPLEXITY OF THE VARIOUS DECMATE |
| 27 | / COMMUNICATIONS INTERFACES UNLESS THE COMPATIBLE PRINTER PORT IS CHOSEN (DEVICE |
| 28 | / 32/33). |
| 29 | |
| 30 | / THIS PROGRAM SHOULD ONLY BE USED IF NO OTHER METHOD IS AVAILABLE AS THE |
| 31 | / ASSUMPTION OF AN ERROR-FREE CONNECTION IS UNRELIABLE. DISTRIBUTION PATHS SUCH |
| 32 | / AS INTERNET FTP OR CONTACTING THE AUTHOR CAN YIELD COMPLETE COPIES OF THE |
| 33 | / PROGRAM DISTRIBUTION ON APPROPRIATE MEDIA WHERE APPLICABLE. |
| 34 | \f/ USAGE: |
| 35 | |
| 36 | / THIS PROGRAM IS RESTRICTED TO A SINGLE-FIELD LOAD ONLY. SEVERAL VARIANT |
| 37 | / VERSIONS MUST BE CREATED TO COMPLETELY LOAD KERMIT-12. (AS OF THIS WRITING, |
| 38 | / ONLY A FIELD ZERO AND FIELD ONE VERSION NEED BE CREATED. HOWEVER, KERMIT-12 |
| 39 | / MAY BECOME LARGER!). THE EXAMPLE GIVEN BELOW ILLUSTRATES USAGE FOR FIELD ONE. |
| 40 | / REPEATING THE PROCESS WITH THE INTENDED CONTENTS OF ALL OTHER FIELDS WILL |
| 41 | / (EVENTUALLY) YIELD AN ENTIRE COPY OF KERMIT-12: |
| 42 | |
| 43 | / .R IPL1 (OR RUN DEV IPL1) |
| 44 | |
| 45 | / [PRESS AN APPROPRIATE KEY (SUCH AS CR) TO START WAITING FOR THE TRANSFER] |
| 46 | |
| 47 | / [THE DATA IS TRANSFERRED FROM THE OTHER SYSTEM AT THIS TIME AND THE PROGRAM |
| 48 | / EXITS AUTOMATICALLY TO THE KEYBOARD MONITOR.] |
| 49 | |
| 50 | / .SAVE DEV FIELD1.SV 10000-17577=0 |
| 51 | |
| 52 | / CHANGING ALL OF THE ONES IN THE ABOVE EXAMPLE TO ZERO WILL YIELD THE |
| 53 | / FIELD-ZERO LOAD FILE FIELD0.SV AS WELL. DEV IS ANY CONVENIENT OS/8 DEVICE |
| 54 | / SUCH AS SYS OR DSK. (IT ISN'T CRITICAL SINCE THESE FILES CAN BE DELETED ONCE |
| 55 | / KERMIT-12 IS CREATED.) ONCE ALL PORTIONS OF KERMIT-12 HAVE BEEN OBTAINED, THE |
| 56 | / FOLLOWING COMMANDS WILL COMBINE THEM INTO THE STANDARD RELEASE FILE K12MIT.SV: |
| 57 | |
| 58 | / .LOAD DEV:FIELD1.SV/I,FIELD0.SV/I$ LOAD IMAGE FILES FIELD1.SV, FIELD0.SV |
| 59 | / WITH /I SWITCH SET. (FUTURE VERSIONS |
| 60 | / MAY REQUIRE LENGTHENING THE COMMAND TO |
| 61 | / ADD MORE FILES SUCH AS FIELD2.SV, |
| 62 | / FIELD3.SV, ETC.) $ INDICATES USING |
| 63 | / <ESC> TO TERMINATE LINE. |
| 64 | |
| 65 | / .SAVE DEV K12MIT=1 SAVE COMPLETED FILE ON ANY AVAILABLE |
| 66 | / DEVICE DEV (PREFERABLY SYS). |
| 67 | |
| 68 | / CREATING THE VARIANT VERSIONS. |
| 69 | |
| 70 | / ONLY ONE PARAMETER NEED BE CHANGED TO PRODUCE THE VARIOUS VERSIONS REQUIRED. |
| 71 | / SETTING DFIELD=0 CREATES A VERSION USED TO OBTAIN THE FIELD-ZERO DATA. |
| 72 | / SETTING DFIELD=1 CREATES THE FIELD-ONE VERSION. LEGAL VALUES FOR DFIELD |
| 73 | / EXTEND UP TO SEVEN. THE DEFAULT VALUE IS ZERO. NOTE THAT THE FIELD-ZERO |
| 74 | / VERSION LOADS INTO FIELD ONE WHILE ALL OTHER VERSIONS LOAD INTO FIELD ZERO. |
| 75 | / THIS IS NECESSARY TO ALLOW UNRESTRICTED FILE LOADING WITHIN THE SELECTED |
| 76 | / FIELD. (OS/8 ITSELF GENERALLY BARS LOADING INTO 7600-7777 OF ANY FIELD, THUS |
| 77 | / LOADING IS ACTUALLY RESTRICTED TO 0000-7577 OF THE SELECTED FIELD.) |
| 78 | \f/ OTHER ASSEMBLY PARAMETERS. |
| 79 | |
| 80 | / SETTING REC= XX SETS THE REMOTE RECEIVE DEVICE CODE TO |
| 81 | / XX (DEFAULT VALUE IS 40). |
| 82 | |
| 83 | / SETTING SEN= XY SETS THE REMOTE TRANSMIT DEVICE CODE |
| 84 | / TO XY (DEFAULT VALUE IS 41). |
| 85 | |
| 86 | / SETTING BRATE= NN SETS THE BAUD RATE (FOR SYSTEMS THAT |
| 87 | / SUPPORT THIS FEATURE SUCH AS THE |
| 88 | / VT-78) FROM A TABLE OF VALUES (00-17) |
| 89 | / AS FOLLOWS: |
| 90 | |
| 91 | / NN (OCTAL) BAUD RATE |
| 92 | |
| 93 | / 00 50 |
| 94 | / 01 75 |
| 95 | / 02 110 |
| 96 | / 03 134.5 |
| 97 | / 04 150 |
| 98 | / 05 300 |
| 99 | / 06 600 |
| 100 | / 07 1200 |
| 101 | / 10 1800 |
| 102 | / 11 2000 |
| 103 | / 12 2400 |
| 104 | / 13 3600 |
| 105 | / 14 4800 |
| 106 | / 15 7200 |
| 107 | / 16 9600 |
| 108 | / 17 19200 |
| 109 | |
| 110 | / (THE DEFAULT VALUE IS 07 FOR 1200 |
| 111 | / BAUD COMMUNICATIONS.) |
| 112 | \f/ ASSEMBLY INSTRUCTIONS FOR ANY VARIANT VERSION. |
| 113 | |
| 114 | / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ZERO DATA IS CALLED |
| 115 | / IPL0.PA, THE FOLLOWING COMMANDS WILL CREATE IPL0.SV: |
| 116 | |
| 117 | / .PAL IPL0<IPL0/E/F ASSEMBLE VARIANT FOR FIELD ZERO |
| 118 | / .LOAD IPL0 LOAD THE BINARY |
| 119 | / .SAVE DEV IPL0 ;10200=0 SAVE THE IMAGE ON ANY DEV (SUCH AS |
| 120 | / SYS). |
| 121 | |
| 122 | / NOTE THE NON-STANDARD STARTING ADDRESS FOR THE FIELD ZERO VERSION (10200). |
| 123 | |
| 124 | / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ONE DATA IS CALLED IPL1.PA, |
| 125 | / THE FOLLOWING COMMANDS WILL CREATE IPL1.SV: |
| 126 | |
| 127 | / .PAL IPL1<IPL1/E/F ASSEMBLE VARIANT FOR FIELD ONE |
| 128 | / .LOAD IPL1 LOAD THE BINARY |
| 129 | / .SAVE DEV IPL1=0 SAVE THE IMAGE ON ANY DEV (SUCH AS |
| 130 | / SYS). |
| 131 | |
| 132 | / IF NECESSARY FOR FIELD TWO AND FOLLOWING, ADDITIONAL VERSIONS CAN BE CREATED. |
| 133 | / THE SAVE COMMAND WILL BE THE SAME AS FOR IPL1. |
| 134 | \f/ EQUATED SYSMBOLS. |
| 135 | |
| 136 | / LOADING FIELD DEFINED HERE. REMOVE THE / FROM THE APPROPRIATE LINE. |
| 137 | |
| 138 | / DFIELD= 0 /LOAD FIELD ZERO DATA |
| 139 | / DFIELD= 1 /LOAD FIELD ONE DATA |
| 140 | |
| 141 | IFNDEF DFIELD <DFIELD=0> /DEFINE LOADING FIELD ZERO BY DEFAULT |
| 142 | |
| 143 | / REMOTE LINE RECEIVE DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE |
| 144 | / APPROPRIATE VALUE. |
| 145 | |
| 146 | / REC= 31 /REMOTE RECEIVE DEVICE CODE |
| 147 | |
| 148 | IFNDEF REC <REC= 40> /DEFAULT RECEIVE DEVICE CODE IS 40 |
| 149 | |
| 150 | / REMOTE LINE TRANSMIT DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE |
| 151 | / APPROPRIATE VALUE. |
| 152 | |
| 153 | / SEN= 32 /REMOTE TRANSMIT DEVICE CODE |
| 154 | |
| 155 | IFNDEF SEN <SEN= 41> /DEFAULT TRANSMIT DEVICE CODE IS 41 |
| 156 | |
| 157 | / BAUD RATE CONTROL VALUE DEFINED HERE FOR VT-78, ETC. REMOVE THE / AND FILL IN |
| 158 | / THE APPROPRIATE VALUE. |
| 159 | |
| 160 | / BRATE= 7 /BAUD RATE CONTROL VALUE |
| 161 | |
| 162 | IFNDEF BRATE <BRATE= 7> /DEFAULT IS VALUE FOR 1200 BAUD |
| 163 | |
| 164 | / REMOTE LINE IOT DEFINITIONS. |
| 165 | |
| 166 | / RECEIVE DEFINITIONS. |
| 167 | |
| 168 | / RKCCIOT=REC^10+6002 /CLEAR REMOTE INPUT FLAG, AC |
| 169 | RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG |
| 170 | RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG |
| 171 | |
| 172 | / TRANSMIT DEFINITIONS. |
| 173 | |
| 174 | RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11] |
| 175 | RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG |
| 176 | / RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG |
| 177 | |
| 178 | / OTHER DEFINITIONS. |
| 179 | |
| 180 | DATFLD= DFIELD^10 /LOADING FIELD FOR CDF INSTRUCTIONS |
| 181 | \f/ THE PROGRAM CODE STARTS HERE. |
| 182 | |
| 183 | IFZERO DFIELD <FIELD 1> /FIELD ZERO VERSION LOADS HERE |
| 184 | |
| 185 | IFNZRO DFIELD <FIELD 0> /ALL OTHER VERSIONS LOAD HERE |
| 186 | |
| 187 | *200 /START AT THE BEGINNING |
| 188 | |
| 189 | START, KCC /CLEAR KEYBOARD FLAG AND AC |
| 190 | TAD INPUT /GET BAUD RATE CONTROL VALUE |
| 191 | RSBIOT /SETUP THE BAUD RATE |
| 192 | / RKSFIOT /**** FOR DECMATE PRINTER PORT ONLY **** |
| 193 | KSF /WAIT FOR |
| 194 | JMP .-1 /KEYBOARD INPUT |
| 195 | KRB /GET THE CHARACTER |
| 196 | RTLSIOT /OUTPUT TO REMOTE |
| 197 | TLS /LET USER SEE IT ALSO |
| 198 | RKRBIOT /CLEAR REMOTE INPUT FLAG NOW |
| 199 | CDF DATFLD /SETUP LOADING FIELD |
| 200 | JMS INPUT /TRY TO GET A VALID DATA CHARACTER |
| 201 | JMP .-1 /LEADER FOUND, IGNORE IT |
| 202 | JMP GOTDATA /LOAD FIRST DATA CHARACTER THERE |
| 203 | |
| 204 | DATLUP, JMS INPUT /TRY TO GET A VALID DATA CHARACTER |
| 205 | JMP LOADEND /TRAILER FOUND, GO FINISH THERE |
| 206 | GOTDATA,CLL RTL;RTL;RTL /MOVE HALF-WORD UP |
| 207 | DCA I LOADPTR /STORE HIGH-ORDER HALF |
| 208 | JMS INPUT /TRY TO GET A VALID DATA CHARACTER |
| 209 | JMP LOADEND /TRAILER FOUND, GO FINISH THERE |
| 210 | TAD I LOADPTR /COMBINE LATEST WITH PREVIOUS |
| 211 | DCA I LOADPTR /STORE BACK COMPOSITE |
| 212 | ISZ LOADPTR /BUMP TO NEXT |
| 213 | L177, 177 /CONSTANT 0177; HERE JUST IN CASE IT SKIPS |
| 214 | JMP DATLUP /GO BACK FOR MORE |
| 215 | |
| 216 | / COMES HERE WHEN LOADING IS DONE. |
| 217 | |
| 218 | LOADEND,CLA!400 /CLEAN UP; ALSO CONSTANT 7600 |
| 219 | CIF CDF 00 /GOING TO MONITOR FIELD |
| 220 | JMP I LOADEND/(7600) /EXIT TO MONITOR |
| 221 | |
| 222 | LOADPTR,0000 /LOADING POINTER |
| 223 | \fINPUT, BRATE /INPUT ROUTINE; ALSO HOLDS BAUD RATE VALUE |
| 224 | INPAGN, RKSFIOT /ANY REMOTE INPUT? |
| 225 | JMP INPAGN /NO, WAIT FOR IT |
| 226 | RKRBIOT /YES, READ IT IN |
| 227 | AND L177/(177) /REMOVE PARITY BIT |
| 228 | TAD L7737/(-41) /COMPARE TO LOWER LIMIT |
| 229 | SPA /SKIP IF GREATER THAN THAT |
| 230 | JMP INPAGN /ELSE IGNORE IT |
| 231 | TAD L7700/(-100) /COMPARE TO UPPER LIMIT |
| 232 | SMA /SKIP IF IN RANGE |
| 233 | JMP I INPUT /ELSE TAKE IMMEDIATE RETURN ON LEADER/TRAILER |
| 234 | AND L77/(77) /REMOVE JUNK BITS |
| 235 | ISZ INPUT /BUMP RETURN |
| 236 | JMP I INPUT /TAKE SKIP RETURN TO CALLER |
| 237 | |
| 238 | L77, 77 /CONSTANT 0077 |
| 239 | L7700, 7700 /CONSTANT 7700 |
| 240 | L7737, 7737 /CONSTANT 7737 |
| 241 | |
| 242 | $ /THAT'S ALL FOLK! |