ASMB,A,B,L,C HED SCE2 91700-16162 REV A 760315 * (C) HEWLETT-PACKARD CO. 1976 ORG 0 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 SPC 1 ************************************************* * *SCE2 SCE2 * *SOURCE PART # 91700-18162 REV 1621 * *ABS PART # 91700-16162 REV 1621 * *WRITTEN BY: JIM HARTSEL * *DATE WRITTEN: * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: 05-17-76 * **************************************************** SUP * ************************************ * * * SCE/2 TERMINAL EXECUTIVE * * INDIRECT ENTRY POINT * * * ************************************ * * * ORG 2 JMP 3,I * B EQU 1 SDI EQU 14B REMOTE COMPUTER CHANNEL. TTY EQU 15B LOCAL TTY CHANNEL. * ************************************ * * * TEMPORARY BASE PAGE LINKAGES * * * ************************************ * ORG 100B THIS BASE PAGE AREA NOT USED JMP *+1,I BY TCE/2. DEF CNFIG RE-CONFIGURATION ENTRY POINT. * ******************************************** * * * OVERLAYABLE RECONFIGURATION SECTION * * S-REGISTER SETTING: * * BITS 0- 5 = REMOTE COMPUTER CHANNEL * * BITS 6-11 = TTY CHANNEL * * BITS 12-14= CORE SIZE (VALUE+1 * 4K) * * * ******************************************** * ORG 6440B * ERR HLT 13B INCASE OF ERROR CNFIG LIA 1 READ SWITCH REGISTER. AND O77 SZA,RSS JMP ERR STA RCH STORE REMOTE COMPUTER CHANNEL. LIA 1 ALF,ALF RAL,RAL AND O77 SZA,RSS JMP ERR STA TCH STORE TTY CHANNEL. * SET CONFIGURED INSTRUCTIONS FOR CORE SIZE LIA 1 AND P7000 ISOLATE BITS 12-14 STA TEMP LDA NCAD STA PNTR SAVE POINTER TO CONFIGURABLE "DEF"S LDB NCON NUMBER TO CONFIGURE LDA PNTR,I IOR TEMP INCLUDE HIGH ADDRESS BITS STA PNTR,I ISZ PNTR INB,SZB JMP *-5 ITERATE * LDA RCH LDB RTBL CONFIGURE REMOTE I/O INSTRUCTIONS. JSB CONFG LDA TCH LDB TTBL CONFIGURE TTY INSTRUCTIONS. JSB CONFG * LDB PSIZ - PGM SIZE LDA QUERA STA PNTR IOR TEMP STA LOC POINTER TO HIGH CORE FOR MOVE STA 3 STARTING ADDR INTO LOC.3 LDA PNTR,I STA LOC,I MOVE INTO HIGHER CORE ISZ PNTR ISZ LOC INB,SZB JMP *-5 MOVE NEXT JMP 3,I NOW GO TO SCE-2 * * CONFG NOP STA CHANL STB PNTR CNFL LDB PNTR,I FETCH NEXT I/O INSTR. ADDRESS. SZB,RSS DONE IF ZERO. JMP CONFG,I LDA B,I FETCH I/O INSTRUCTION. AND MASK CLEAR CHANNEL. IOR CHANL INSERT NEW CHANNEL. STA B,I REPLACE I/O INSTRUCTION. ISZ PNTR JMP CNFL LOOP TILL DONE. * RCH NOP TCH NOP CHANL NOP PNTR NOP MASK OCT 177700 O77 OCT 77 P7000 OCT 70000 NCAD DEF INIT NCON ABS INIT-SIZE # OF RECONFIGURED DEFS QUERA DEF QUERY PSIZ ABS QUERY-SIZE SIZE OF SCE-2 MAIN AREA * RTBL DEF *+1 TABLE OF ADDRESSES OF I/O DEF INIT1 INSTR. FOR REMOTE COMPUTER. DEF RCH1 DEF RCH2 DEF RCH3 DEF RCH4 DEF RCH5 DEF RCH6 DEF RCH7 DEF RCH8 DEF RCH9 DEF RCH10 NOP END OF TABLE. * TTBL DEF *+1 TABLE OF I/O INSTRUCTIONS DEF TCH1 FOR TTY. DEF TCH2 DEF TCH3 DEF TCH4 DEF TCH5 DEF TCH6 DEF TCH7 DEF TCH8 NOP END OF TABLE. * ORG 6600B ************************************ * * * MAIN ENTRY POINT * * * ************************************ * * QUERY CLA,INA DISPLAY ":" PROMPT. JSB TTYO OCT 35137 * LDA BFSIZ INPUT THE COMMAND. LDB BUFAD JSB TTYIN * JMP TMESS GO PROCESS THE COMMAND. * * M0950 LDA B6 DISPLAY "SYNTAX ERROR". JSB TTYO ASC 6,SYNTAX ERROR JMP QUERY SKP ******************************** * DECIPHER OPERATOR MESSAGES. ********************** ******************************** * * B CONTAINS # CHARACTERS. * DATA IN BUFFR. * TMESS CLA STA TEMP+2 CLEAR CHARACTER FLAG. CMB,INB,SZB,RSS CHECK IF COUNT ZERO. JMP QUERY YES STB TEMP+3 NEGATIVE CHAR. COUNT. * LDB MD33 CLEAR PARAMETER AREA. STB TEMP LDB PARPT STA B,I INB ISZ TEMP JMP *-3 * LDB BUFAD INPUT BUFFER CLE,ELB BYTE ADDRESS. STB TEMPP LDA INIT STA TEMP+5 INITIAL PARAM POINTER. LDA TEMP+5,I STA TEMP+4 INITIAL STORE POINTER. ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. * DEC10 LDB TEMPP FETCH NEXT BYTE. CLE,ERB LDA B,I SEZ,RSS CHECK IF TO EXAMINE UPPER/LOWER. ALF,ALF UPPER, SO ROTATE. AND M377 ISOLATE CHARACTER. * CPA COM CHECK FOR JMP DEC60 COMMA OR CPA BLNK BLANK JMP DEC65 DELIMITER. * LDB TEMP+6,I ADD -1 TO CHAR COUNT. ADB MD1 STB TEMP+6,I * LDB TEMP+2 CHECK IF TO BE UPPER/LOWER. SZB UPPER. JMP DEC40 LOWER. * ALF,ALF STA TEMP+4,I STORE CHARACTER. ISZ TEMP+2 SET FLAG TO LOWER CHARACTER. JMP DEC50 GO INCREMENT DATA CHAR. * DEC40 IOR TEMP+4,I COMBINE UPPER & LOWER. STA TEMP+4,I STORE. CLA STA TEMP+2 RESET FLAG TO UPPER CHAR. ISZ TEMP+4 BUMP STORE LOCATION. * DEC50 ISZ TEMPP BUMP BUFFER ADDR. ISZ TEMP+3 BUMP CHAR. COUNT. JMP DEC10 GO PROCESS NEXT CHAR. ISZ PARAM DONE- BUMP PARAM COUNT. JMP M0000 GO TO EXIT. * DEC65 LDA PARAM FIRST PARAM? SZA JMP DEC50 NO, IGNORE BLANKS DEC60 CLA STA TEMP+2 CLEAR CHAR. FLAG. * ISZ TEMP+5 BUMP PARAM POINTER. ISZ PARAM BUMP PARAM COUNT. LDA PARAM CPA B10 EIGHT PARAMS? JMP M0000 YES, GO PROCESS. * LDA TEMP+5,I STA TEMP+4 ADA MD1 STA TEMP+6 PARAM CHAR COUNT ADDR. JMP DEC50 GO INCREMENT DATA BUFFER. SKP * * IDENTIFY THE COMMAND (LOAD OR RUN). * M0000 LDA OP ADD UP THE THREE WORDS. ADA OP+1 ADA OP+2 * CPA SM.LO = SUM OF "LOAD"? JMP M0100 YES. CPA SM.RU = SUM OF "RUN"? JMP M0200 YES. CPA SM.RA = SUM OF "RUNAT"? JMP GETAD YES. JMP M0950 NO, SYNTAX ERROR. * A.LO EQU 046117B "LO" A.AD EQU 040504B "AD" A.RU EQU 051125B "RU" A.N EQU 047000B "N0" A.NA EQU 047101B "NA" A.T EQU 052000B "T0" * SM.LO ABS A.LO+A.AD SM.RU ABS A.RU+A.N SM.RA ABS A.RU+A.NA+A.T * * * LOAD XXXXX * LOAD INTO THE TERMINAL THE PROGRAM XXXXX WHICH * RESIDES ON THE CENTRAL STATION DISC. * M0100 LDA CP1 IS THERE A NAME? SZA,RSS JMP M0950 NO. * FILL TRAILING BLANKS, SCHEDULE PROGL, & DOWNLOAD JSB LODIT JMP QUERY RETURN TO OPERATOR. SKP * * RUN(*,P1,P2,P3,P4,P5) * * RUNAT NNN (,P1,P2,P3,P4,P5) * * RUN XXXXX (,P1,P2,P3,P4,P5) * * P1...P5 = OPTIONAL PARAMETERS. * NNN = START ADDRESS. * XXXXX = PROGRAM NAME. * M0200 LDA CP1 IS 1ST PARAM NULL OR "*"? LDB P1 SZA CPB ASTER JMP MOVIT YES. * * FILL TRAILING BLANKS, SCHEDULE PROGL, & DOWNLOAD JSB LODIT JMP MOVIT RUN. * GETAD LDA CP1 IS THERE A START ADDR? SZA,RSS JMP M0950 NO, ERROR. LDB P1AD JSB CVT1 CONVERT START ADDRESS. STA IADR * * CONVERT OPTIONAL PARAMETERS TO BINARY AND STORE. * MOVIT LDA P2AD STA DCVTA ADDR OF DATA BUFFER. ADA MD1 STA DCVTB ADDR OF CHAR COUNT. * LDA DO.P1 STA TEMP+4 DESTINATION ADDR. LDA MD5 STA TEMP+5 COUNTER * TRANS LDA DCVTB,I CHAR. COUNT. SZA,RSS ZERO? JMP STORE YES, STORE ZERO. * LDB DCVTA JSB CVT1 CONVERT TO BINARY. * STORE STA TEMP+4,I STORE VALUE. ISZ TEMP+4 LDA DCVTA ADA B4 STA DCVTA LDA DCVTB ADA B4 STA DCVTB * ISZ TEMP+5 DONE? JMP TRANS NO. * LDB DO.P1 (B) = ADDR OF 1ST PARAM. CLC 0,C "PRESET" LDA IADR IS THERE A START ADDR? SZA JMP IADR,I YES, USE IT. LDA B6 JSB TTYO TYPE MESSAGE ASC 6,NO START ADR JMP QUERY * * DCVTA NOP DCVTB NOP O.P1 OCT 0 O.P2 OCT 0 O.P3 OCT 0 O.P4 OCT 0 O.P5 OCT 0 SKP * SCHEDULE PROGL AT REMOTE AND PASS LU, PROGRAM NAME. * THEN LOAD THE PROGRAM INTO TERMINAL CORE. * CALLING * SEQUENCE: (B) = ADDR OF ASCII PROGRAM NAME. * JSB LODIT * LODIT NOP LDA P1AD STA TEMP LDA MD3 STA TEMP+1 TLOOP LDB BLNKW FILL TRAILING BLANKS LDA TEMP,I SZA LDB BLNK AND M377 SZA JMP *+3 ADB TEMP,I STB TEMP,I ISZ TEMP ISZ TEMP+1 JMP TLOOP * * NOW SEND THE DOWNLOAD REQUEST TO PROGL * JSB LSTN SET CARD IN LISTEN MODE LDB RC JSB OUT SEND "REQUEST COMING" JMP *-2 RETRY LDB MD6 -LENGTH-1 JSB OUT SEND IT JMP *-2 RETRY LDB B2 GET MODE WORD (2) JSB OUT SEND IT JMP *-2 RETRY RCH10 CLC SDI TURN CARD TO TRANMITTER LDB MD3 INB,SZB DELAY A WHILE JMP *-1 LDB K9 JSB OUT1 SEND STREAM CLB JSB OUT1 2ND WORD = 0 LDB P1 JSB OUT1 SEND 1ST 2 CHARS OF NAME LDB P1+1 JSB OUT1 SEND 3RD & 4TH CHARS OF NAME JSB LSTN SET CARD BACK TO LISTEN MODE LDB P1+2 JSB OUT SEND LAST WORD (FINAL NAME CHARS) JMP RCH10 ERROR IN TRANSMISSION, TRY AGAIN LDB TNW JSB OUT1 SEND REPLY TO COMPLETE REQUEST * CLA,CLE CLEAR LOCATION 3. STA ERFLG INITIALIZE ERROR INDICATOR STA 3 * READ-IN PROGL DOWNLOAD DATA RECORD LOAD1 JSB IN READ 1ST WORD OF DATA CPB RC IS IT EOT (RC) JMP END YES (EOT). STB RL SAVE NEGATIVE RECORD LENGTH ADB K100 SEZ,RSS DOES -99 < LEN < 0? ISZ ERFLG NO, FLAG ERROR JSB IN READ STARTING ADDRESS STB ADDR AND SAVE. STB CKSUM INITIALIZE CHECKSUM * DATA JSB IN READ DATA WORD. LDA ERFLG SZA,RSS SKIP IF ANY ERRORS OCCURRED STB ADDR,I STORE DATA WORD. ADB CKSUM STB CKSUM UPDATED RUNNING CHECKSUM LDB ADDR GET ADDRESS FOR SWR OTB 1 OUTPUT SOMETHING ISZ ADDR ISZ RL LAST DATA WORD? JMP DATA NO. * JSB IN YES, READ CHECKSUM. LDA ERFLG ERROR FLAG CPB CKSUM CKSUM OK? CLE,SZA YES, ANY OTHER ERRORS? JMP ERRX FAILED, ERROR RETURN JMP LOAD1 ALL OK, DO NEXT RECORD * END JSB IN JSB IN JSB IN GET STATUS WORD. LDA ERFLG SZA SKIP IF NO ERRORS LDB B2 SET ERROR CODE. JMP CLNUP * IN NOP CLA RCH3 SFS SDI WORD RECEIVED? JMP *-1 NO. RCH4 LIB SDI READ DATA WORD. RCH5 LIA SDI,C READ STATUS WORD. SSA PARITY ERROR? ISZ ERFLG YES, SET ERROR FLAG. LDA TNW RCH6 OTA SDI OUTPUT "XMIT NEXT WORD". JMP IN,I * OUT NOP TRANSMIT A WORD. JSB OUT1 GO TRANSMIT FOR CARD...WAIT FOR READY RCH9 LIA SDI CPA RLW JMP OUT,I ERROR RETURN..TRY AGAIN ISZ OUT SET FOR NORMAL RETURN CPA TNW JMP OUT,I DO NORMAL RETURN ERRX LDB B2 UNKNOWN RETURN..ERROR * CLNUP SZB ANY ERRORS? JMP ERRFD YES, GO PROCESS. LDA 3 SET DEFAULT STA IADR START ADDRESS. JMP LODIT,I RETURN. * ERRFD LDA B6 CPB B2 JMP ERR2 COM LINE ERROR. CPB MD1 JMP ERR4 CAN'T LOCATE. JSB TTYO TYPE MESSAGE ASC 6,PROGL ERROR JMP QUERY * ERR2 JSB TTYO ASC 6,COM LINE ERR JMP QUERY * ERR4 JSB TTYO ASC 6,CAN'T LOCATE JMP QUERY * * SUBROUTINE TO SET THE CARD IN LISTEN MODE * LSTN NOP INIT1 CLC SDI,C LISTEN..INHIBIT INTERUPTS RCH1 LIA SDI,C READ STATUS RCH2 LIA SDI READ WORD...CLEARS CARD JMP LSTN,I RETURN * * *SUBROUTINE TO OUTPUT A WORD THE CARD AND WAIT *UNTIL CARD IS READY TO CONTINUE * OUT1 NOP RCH7 OTB SDI SEND WORD RCH8 SFS SDI WAIT JMP *-1 JMP OUT1,I RETURN...WHEN CARD READY SKP * * KEYBOARD INPUT DRIVER. * (A) = RECORD SIZE, WORDS. * (B) = BUFFER ADDRESS. * JSB TTYIN * ON RETURN, (B) = # CHAR. INPUT. SPC 3 TTYIN NOP ENTRY. RAL,CLE STORE # CHAR. STA RSIZE CLA STA RL CLEAR CHAR. COUNTER. STB ADDR STORE BUFFER POINTER. * CLC 0,C TURN OFF INTERRUPTS. TYIN JSB TYI READ A CHARACTER. AND M177 CPA LF LINE FEED? JMP TYIN YES, IGNORE. CPA CR CARRIAGE RETURN? JMP EOI YES, ALL DONE. CPA RBOUT RUBOUT? JMP CANCL YES. CPA CONTH BACKSPACE CHAR? JMP BAKUP YES. CPA BKSPC BACKSPACE KEY? JMP BAK * LDB RL BUFFER FULL? CPB RSIZE JMP TTYIN,I YES, IGNORE CHAR. ISZ RL SEZ,CME INSERT CHAR IN BUFFER JMP RIGHT ALF,ALF STA ADDR,I JMP TYIN RIGHT IOR ADDR,I STA ADDR,I ISZ ADDR JMP TYIN * EOI LDA LF OUTPUT LINE FEED. JSB TYO LDB RL SET (B) = CHAR. COUNT. JMP TTYIN,I RETURN. * CANCL LDA BSLSH OUTPUT BACKSLASH. JSB TYO LDA CR OUTPUT CARRIAGE RETURN. JSB TYO LDA LF OUTPUT LF. JSB TYO JMP QUERY RE-PROMPT THE OPERATOR. * BAKUP LDA BKARW OUTPUT BACK ARROW. JSB TYO BAK LDA RL DECREMENT CHAR. COUNT. ADA MD1 STA RL LDB ADDR ADJUST BUFFER POINTER. CME,SLA FLIP E. ADB MD1 STB ADDR LDA B,I SEZ AND MASKU CLEAR RIGHT CHAR. STA B,I JMP TYIN GO INPUT NEXT CHAR. * TYI NOP LDA DA ECHO INPUT. TCH1 OTA TTY TCH2 STC TTY,C INPUT A CHARACTER. TCH3 SFS TTY JMP *-1 TCH4 LIA TTY JMP TYI,I RETURN SPC 3 * * DISPLAY DEVICE OUTPUT DRIVER. * (A) = # WORDS. * JSB TTYO * (BUFFER) SPC 3 TTYO NOP ENTRY. RAL FORM NO. OF CHARS CMA,CLE,INA NEGATE COUNT STA RL * TO LDA TTYO,I PICK UP NEXT BUFFER WORD. SEZ,CME LEFT CHAR? ISZ TTYO NO, BUMP BUFFER POINTER. SEZ LEFT CHAR? ALF,ALF YES, RIGHT JUSTIFY. AND M377 MASK CHAR. CPA BKARW IS IT A BACKARROW? JMP TTYEX YES, RETURN. JSB TYO OUTPUT THE CHARACTER ISZ RL BUMP COUNT JMP TO ITERATE * LDA CR JSB TYO DO CARRAIGE RETURN LDA LF OUTPUT LINE FEED. JSB TYO TTYEX SEZ ON LHW? ISZ TTYO YES, BUMP POINTER TO RETURN ADDR JMP TTYO,I RETURN. * TYO NOP OUTPUT A CHARACTER. LDB LOUT PRINT OUTPUT. TCH5 OTB TTY TCH6 OTA TTY TCH7 STC TTY,C TCH8 SFS TTY JMP *-1 JMP TYO,I * * CR OCT 15 CARRIAGE RETURN. LF OCT 12 LINE FEED. BKSPC OCT 31 BACKSPACE KEY. BSLSH OCT 134 BACKSLASH. BKARW OCT 137 BACKARROW. DA OCT 160000 ECHO INPUT. LOUT OCT 120000 PRINT OUTPUT. RSIZE NOP SKP * * ASCII TO BINARY CONVERSION ROUTINE. * * CALLING SEQUENCE: * * A= CHARACTER COUNT * B= DATA BUFFER ADDRESS * JSB CVT1 * * IF THE DATA BUFFER BEGINS WITH AN "@" SIGN, * THE DATA IS TAKEN TO BE OCTAL, ELSE DECIMAL. * * ON RETURN, (A) = CONVERTED VALUE * CVT1 NOP ENTRY. STA TMP+1 SAVE CHAR COUNT CLA STA TMP CLEAR ACCUMULATING VALUE. CLE,ELB STB TEMP+2 STORE CHAR. ADDR. RBR IS FIRST CHAR = @? LDA B,I AND MSK14 STA TEMP+3 (ZERO IF OCTAL NUMBER). SZA JMP CV015 NO. LDA B,I YES, CHANGE TO ASCII ZERO. AND M377 IOR UPR60 STA B,I * CV015 LDA TMP ALF,RAR LDB TEMP+3 OCTAL NUMBER; SZB,RSS JMP CV018 YES ADA TMP ADA TMP TMP=10*TMP CV018 STA TMP STORE MULTIPLIED VALUE. LDB TEMP+2 GET CHAR ADDR. CLE,ERB LDA B,I GET DATA VALUE. SEZ,RSS IF E SET, THEN LOWER CHAR. ALF,ALF UPPER, SO ROTATE. AND M377 * ADA MD48 CHECK IF LEGAL DATA CHAR. STA TMP+2 SSA JMP M0950 ERROR IN SYNTAX. ADA MD8 LDB TEMP+3 OCTAL NUMBER? SZB ADA MD2 NO. SSA,RSS JMP M0950 ERROR. * LDA TMP+2 LDB TEMP+3 SZB,RSS AND B7 ADA TMP ADD TO ACCUMULATED STA TMP VALUE AND STORE. ISZ TEMP+2 INCR CHAR ADDR. ISZ TMP+1 INCR CHAR COUNT. JMP CV015 GO PROCESS NEXT CHAR. * LDA TMP LOAD CONVERTED VALUE. JMP CVT1,I RETURN. SKP B2 OCT 2 B4 OCT 4 B6 OCT 6 B7 OCT 7 B10 OCT 10 CONTH EQU B10 K9 DEC 9 K100 DEC 100 MD1 DEC -1 MD2 DEC -2 MD3 DEC -3 MD5 DEC -5 MD6 DEC -6 MD8 DEC -8 MD33 DEC -33 MD48 DEC -48 M177 OCT 177 RBOUT EQU M177 M377 OCT 377 COM OCT 54 BLNK OCT 40 BLNKW ASC 1, ASTER OCT 25000 UPR60 OCT 30000 MSK14 OCT 137400 MASKU OCT 177400 IADR NOP RL OCT 0 ADDR OCT 0 TNW OCT 170360 RLW OCT 007417 RC OCT 170017 "REQUEST COMING" LOC NOP ERFLG NOP CKSUM NOP TMP BSS 3 * TEMPP OCT 0 TEMP BSS 7 TEMPORARY STORAGE. BFSIZ DEC 18 BUFFR BSS 18 OPER I/O MESSAGE BUFFER. * * PARAM NOP PARAMETER COUNTER. OP1 NOP CHAR. COUNT - COMMAND MNEMONIC. OP BSS 3 MNEMONIC. CP1 NOP CHAR. COUNT-PARAM 1. P1 BSS 3 PARAM 1 (UP TO 3 WORDS). CP2 NOP ETC. P2 BSS 3 CP3 NOP P3 BSS 3 CP4 NOP P4 BSS 3 CP5 NOP P5 BSS 3 CP6 NOP P6 BSS 3 CP7 NOP P7 BSS 3 * * THE FOLLOWING ADDRESSES ARE RELOCATED AT CONFIGURATION TIME. * INIT DEF *+1 PARAMETER INITIALIZATION POINTER DEF OP COMMAND MNEMONIC BUFR ADDR P1AD DEF P1 PARAMETER P2AD DEF P2 DEF P3 N DEF P4 DEF P5 BUFFER DEF P6 DEF P7 POINTERS. DO.P1 DEF O.P1 BUFAD DEF BUFFR PARPT DEF PARAM SIZE EQU * END