|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 23826 (0x5d12)
Notes: pts_type(SC)
Names: »SIMHOP.SC«
└─⟦fce1dcf99⟧ Bits:30009704 Philips computer tape "KMD15"
└─⟦this⟧ »DLCSIM/SIMHOP.SC«
IDENT SIMHOP REL 1.1 78-04-21 870150240110 * * * CC SIMULATION TOOL * * OPERATOR CONTROL * * PROGRAMMER: HSON * * 76-04-30 * ******************************************************* * * THIS MODULE COMMUNICATES WITH * THE OPERATOR * * ALLOWED INPUT KEYS: * * O: OPEN RECEIVER * C:CLOSE RECEIVER * * I: INSERT IN BUFFER SPECIFIED BY FOLLOWING HEXDEC NUMBER * THEN FILL THE BUFFER WITH CHARACTERS * TO DELETE LAST CHARACTER PRESS: FEL * *: END OF BUFFER * * L: LIST BUFFER * *: ALL BUFFERS * <HEXDEC>: ONE BUFFER * * <HEXDEC>: PUT THIS BUFFER IN TRANSMITT QUEUE * (TIME OUT FOR RESPONSE MAY BE SPECIFIED AFTER: * WITH UP TO TWO HEXDEC CHARACTERS) * N,: NEW BUFFER IN QUEUE * SEND: TRANSMITT THE BUFFER QUEUE * * R: RESET RECEIV BUFFER * * B:READ BUFFERS FROM CASSETTE * W:WRITE BUFFERS ON CASSETTE * ************************************************************** EJECT * * * ENTRY ASTART ENTRY PROTYP * * EXTRN TAB1 CHAR TABLE 1 EXTRN AREA TRANSMIT AREAS EXTRN LENGTH TOTAL INDIVIDUAL AREA LENGTH EXTRN TRQ TRANSMIT QUEUE EXTRN TRQE END OF TRANSMIT QUEUE EXTRN SIMHIN LOG INPUT TASK START ADDRESS EXTRN SIMHWR SIMHWR TASK ACTIVATION EXTRN WRECB WRITE ECB EXTRN PRPOOL OCCUPIE PRINTER BUFFER POOL EXTRN TEXT1 EXTRN TEXT2 * * * EQUATES * * ECBBA EQU 2 ECBRL EQU 4 ECBRC EQU 8 ECBCW EQU 10 * * RES 20 STACK FOR A14 STB EQU *-2 PROCCB DATA 0 ADDRESS TO PRINTER OCCUPIED BUFFFER HEXCHA DATA 0 PROTYP DATA 1 COMMON FLAG FOR HDLC SDLC EJECT * * * START LOOP TEST TOOL * * ASTART EQU * LD A8,PROCCB RF(Z) ASTA20 LKM DATA -8,PRPOOL RELEASE PRINTER CM PROCCB RELEASE PRINTER BUFFER ASTA20 EQU * LDK A1,/80 SC A1,WRECB SET WRITE ECB NOT BUSY LDKL A7,'OP' LKM DATA -4,OPCTRL ACTIVATE OPERATOR CONTROL TASK LDKL A7,'IN' LKM DATA -4,SIMHIN ACTIVATE LOG TASK LKM DATA 3 EJECT * * * OPERATOR CONTROL TASK * * OPCTRL EQU * LDKL A14,STB LDK A7,' ' CF A14,OCCPR OCCUPIE PRINTER OPCT10 EQU * CF A14,CRLF LDKL A2,TEXT1 ADKL A11,1 CF A14,PRTXT * * HERE TO SET COMMON FLAG FOR HDLC/SDLC * ADKL A11,1 LDKL A8,CTECB LDK A7,/84 LD A1,PROTYP ST A1,ECBBA,A8 LDK A1,6 ST A1,ECBCW,A8 LKM SET FLAG DATA 1 EJECT OPCT40 EQU * ADKL A11,1 CF A14,CRLF OPCT50 LDKL A2,TEXT2 ADKL A11,1 CF A14,PRTXT CF A14,READE READ 2 OR 4 DATA KT075,FT075 LDK A7,'?' CF A14,PRCH CF A14,CRLF RB OPCT50 * * KT075 DATA /0232,'4' FT075 DATA OPCT60,OPCT70 * * OPCT60 LDK A2,1 2-WIRE WANTED RF OPCT80 OPCT70 LDK A2,0 4-WIRE WANTED OPCT80 ADKL A11,1 CF A14,CRLF LDKL A8,CTECB LDK A7,/84 ST A2,ECBBA,A8 LDK A1,7 ST A1,ECBCW,A8 LKM DATA 1 LDKL A8,CTECB RF OPCONT EJECT * * PRINT TEXT * PRTXT EQU * LDR* A3,A2 GET LENGTH ST A2,PRXECB+2 ADK A3,2 ST A3,PRXECB+4 LDK A7,/86 LDKL A8,PRXECB LKM DATA 1 STANDARD WRITE CF A14,CRLF RTN A14 * * PRXECB DATA /31,0,0,0,0,0 * * EJECT OPCONT EQU * LD A8,PROCCB GET BUFFER ADDRESS RF(Z) OPCO10 NO BUFFER LKM DATA -8,PRPOOL RELEASE PRINTER CM PROCCB OPCO10 EQU * LDKL A14,STB CF A14,CRLF CF A14,READ READ COMMAND DATA KT100,FT100 CF A14,HEXCH ABL(Z) QT QUEUE AREA FOR TRANSM. EJECT * * * TYPE: ? * ERRORA EQU * CF A14,OCCPR OCCUPIE PRINTER ERROR EQU * LDKL A14,STB LOAD STACK BASE LDK A7,'?' INVALID KEY CF A14,PRCH PRINT '?' RB OPCONT * * KT100 DATA /0749,'LORWSH' FT100 DATA INPUT,LIST,OPEN,RESET,WRTC,RDTC,HALT EJECT * * * INPUT TO TRANSMIT BUFFER * * A9 =LRC * A10=AREA POINTER * A11=CHAR COUNTER FOR CURRENT LINE * * INPUT EQU * CF A14,OCCPR OCCUPIE PRINTER CF A14,PRSPAC SPACE CF A14,READE READ AREA NUMBER DATA 0 DATA FT200 FT200 EQU * CF A14,HEXCH RB(NZ) ERROR IN050 EQU * LDKL A10,AREA COMPUT E AREA BASE IN100 SUK A7,1 RF(N) IN120 ADKL A10,LENGTH RB IN100 IN120 LDR A12,A10 SAVE AREA BASE CF A14,CRLF ADKL A10,2 ADJUST POINTER LDKL A11,0 LDK A5,0 RESET INDEX EJECT * * * READ INPUT CHAR * * IN200 CF A14,READE DATA KT300,FT300 CM HEXCHA CF A14,ITAB1 SEARCH IN TABLE 1 RB(NZ) ERROR NOT FOUND IN230 CWK A11,/70 RB(NG) IN200 LINE NOT FULL CF A14,CRLF NEW LINE RB IN200 KT300 DATA /042A,/2F23,/2900 FT300 DATA IN900,IN800,IN700,IN600 EJECT * * * END OF INPUT AND DECLARATION OF * NR OF SIGNIFICANT BITS * * IN600 CF A14,RDHEX READ '1-7' LDR A6,A7 ANK A6,8 ABL(NZ) ERROR SLL A7,13 ORR A5,A7 RF IN900 * * * BACKSPACE * * IN700 SUK A5,1 RF(N) IN710 BUFFER BEGIN SUKL A10,1 RB IN200 IN710 LDK A5,0 RB IN200 EJECT * * * HEXADECIMAL INPUT * * IN800 CF A14,RDHEX READ HEXADECIMAL LDR A6,A7 SAVE FIRST DIGIT SLL A6,4 CF A14,RDHEX READ 2ND DIGIT IM HEXCHA ADR A7,A6 CF A14,STORE STORE IT CF A14,PRSPAC SPACE RB IN230 * * * END OF INPUT * * IN900 STR A5,A12 SAVE LENGTH ABL OPCONT WAIT FOR NEXT COMMAND EJECT * * * QUEUE AREA FOR TRANSMISSION * * QT EQU * LDR A2,A7 SAVE CHAR. LDR A5,A7 CF A14,TRANSL TRANSLATE FOR PRINTER CF A14,OCCPR OCCUPIE PRINTER LDKL A8,CTECB LDK A1,4 ST A1,ECBCW,A8 REMOVE REQUEST IF ANY LDK A7,/84 LKM DATA 1 LDR A7,A2 RESTORE A7 LDKL A5,TRQ LDK A6,1 QT050 EQU * STR A7,A5 ADK A5,2 INCR. INDEX LDK A7,':' CF A14,PRCH PRINT @ LDK A3,0 CF A14,QTREAD READ TIME OUT LDR A3,A7 LDR A3,A3 RF(NZ) QT060 LDKL A3,/8000 QT060 EQU * CF A14,QTREAD SLL A3,4 ORR A3,A7 LDR A3,A3 RF(NZ) QT070 LDKL A3,/8000 QT070 EQU * CF A14,QTREAD ABL ERROR * * * COMMA; READ NEXT TANSMITT BUFFER NUMBER * * QT100 EQU * LDKL A14,STB STR A3,A5 STORE TIME OUT ADK A5,2 INCR INDEX CWK A6,60 RF(NG) QT101 LDKL A11,1 LDK A6,1 CF A14,CRLF QT101 EQU * CF A14,QTRED1 ABL QT050 * * * SEND; ACTIVATE WRITE TASK * * QT150 EQU * STR A3,A5 STORE TIME OUT ADK A5,2 INCR INDEX LDKL A3,/FFFF STR A3,A5 LDKL A7,'WR' LKM DATA -4,SIMHWR ABL OPCONT * * + ; READ TRANSMIT DELAY * QT200 EQU * LDKL A14,STB LDKL A3,/8000 CF A14,RDHEX ADR A3,A7 CF A14,QTREAD SLL A3,4 ADKL A3,/8000 ORR A3,A7 RB QT070 EJECT * * * READ TIME OUT * * QTREAD EQU * LDKL A1,TRQE SUK A1,10 CWR A5,A1 ABL(G) ERROR ADK A6,1 CF A14,READE DATA KT600,FT600 CF A14,HEXCH ABL(NZ) ERROR RTN A14 * * KT600 DATA /022C,/2800 FT600 DATA QT100,QT150 * * READ BUFFER NR OR + * QTRED1 EQU * LDKL A1,TRQE SUK A1,10 CWR A5,A1 ABL(G) ERROR ADK A6,1 CF A14,READE DATA KT650,FT650 CF A14,HEXCH ABL(NZ) ERROR RTN A14 * KT650 DATA /012B FT650 DATA QT200 EJECT * * * CHECK HEXADEC. INPUT AND TRANSLATE * * CR=0 OK * CR=1,2 ILLEGAL CHAR * * HEXCH EQU * ADKL A14,4 SKIP STACK LDR A1,A7 SUK A1,'0' RF(N) HEXC90 SUK A1,9 RF(NP) HEXC10 NUMBER SUK A1,8 RF(N) HEXC90 SUK A1,5 RF(P) HEXC90 ADK A1,15 TRANSLATE HEX LETTER LDR A7,A1 RF HEX20 HEXC10 EQU * ADK A1,9 LDR A7,A1 HEX20 EQU * SUR A1,A1 RF HEX99 HEXC90 EQU * LDK A1,1 HEX99 EQU * ABR* A14 EJECT * * * LIST COMMAND * * LIST EQU * CF A14,OCCPR OCCUPIE PRINTER CF A14,PRSPAC CF A14,READE DATA 0,FT400 FT400 EQU * CF A14,HEXCH RF(Z) LI100 CWK A7,/2A ABL(NZ) ERROR EJECT * * * LIST ALL AREAS * * LISALL LDK A5,0 AREA NUMBER IN A5 LISA10 CF A14,LISAR LIST ONE AREA ADK A5,1 CWK A5,16 RB(NE) LISA10 ABL OPCONT * * * LIST ONE AREA * * LI100 EQU * LDR A5,A7 CF A14,LISAR ABL OPCONT * * * TRANSLATE NUMBER IN A7 TO ASCII * * TRANSL EQU * CF A14,CRLF LDK A7,'0' ADR A7,A5 PRINT AREA NUMBER CWK A7,/39 RF(NG) LI180 ADK A7,7 LI180 EQU * RTN A14 EJECT * * * LIST ONE AREA * * A5 CONTAINS AREA NUMBER * * LISAR EQU * CF A14,TRANSL CF A14,PRCH LDK A1,2 ST A1,PRECBL EMPTY PRINTBUFFER LDK A1,1 ST A1,LSPACE LDKL A10,AREA LDK A1,0 LI200 CWR A1,A5 RF(E) LI210 ADKL A10,LENGTH ADK A1,1 RB LI200 LI210 LDR* A9,A10 GET LENGTH LDKL A12,0 LDR A1,A9 ANKL A1,/E000 RF(Z) LI211 NO ODD BITS SRL A1,13 LDR A12,A1 LI211 EQU * ANKL A9,/1FFF CWK A9,500 RF(NG) LI215 LDKL A9,0 LI215 EQU * ADKL A10,2 LI220 SUKL A9,1 RF(N) LI250 ALL EDITED LCR A7,A10 GET CHARACTER ADKL A10,1 CF A14,STAB1 RF(Z) LI230 LI225 EQU * CF A14,EDHEXL EDIT IN HEXA LI230 EQU * LDK A1,100 CW A1,PRECBL RB(G) LI220 LI240 EQU * CF A14,PRLINE RB LI220 LI250 EQU * LDR A12,A12 RF(Z) LI260 LDK A1,'S' CF A14,STOREL LDK A1,'=' CF A14,STOREL LDR A7,A12 CF A14,EDHEXL LI260 EQU * CF A14,PRLINE RTN A14 EJECT * * * CONTROL COMMANDS * * OPEN LDK A2,1 RF WRCTRL RESET LDK A2,2 WRCTRL EQU * CF A14,OCCPR OCCUPIE PRINTER LDKL A8,CTECB LOAD ECB ADDRESS LDK A7,/84 AND AORDER ST A2,ECBCW,A8 STORE COMMAND IN CW LKM DATA 1 ABL OPCONT NEXT COMMAND * * CTECB DATA /62,0,0,0,0,0 * * * HALT INPUT FROM THE FLYING PIGEON * * HALT EQU * CF A14,OCCPR LDK A1,5 LDKL A8,CTECB LDK A7,/84 ST A1,ECBCW,A8 LKM DATA 1 ABL OPCT40 EJECT * * * PRINT ONE CHARACTER FROM A7 * * PRCH LDKL A8,PRECB SC* A7,ECBBA,A8 LDK A7,/85 LKM DATA 1 ADKL A11,1 COUNT CHARACTERS LDK A7,0 ST A7,XSPACE RESET SPACE INDICATOR LC* A7,ECBBA,A8 RESTORE A7 RTN A14 * * TYECB DATA /20,TYBUF,1,0,0,0 TYBUF RES 1 PRECB DATA /31,PRBUF,1,0,0,0 PRBUF DATA 0 EJECT * * * GENERATE CRLF * * CRLF LDR A11,A11 RF(Z) CRLF90 ALREADY NEW LINE LDK A7,/0D CF A14,PRCH LDK A7,/0A CF A14,PRCH IM XSPACE SET SPACE INDICATOR SUR A11,A11 CRLF90 EQU * RTN A14 EJECT * * * READ ONE CHARACTER FROM KEYBOARD TO A7 * * TWO WORDS FOLLOWING CALL GIVE KEYTABLE AND FUNCTION TABLE ADDRESSES * * ON ERROR GO TO NEXT INSTRUCTION ELSE TO FUNCTION * * A1 IS DESTROYED * * READ LD A7,4,A14 LD A1,2,A7 GET FUNCTION TABLE ADDRESS LDR* A7,A7 GET KEYTABLE ADDRESS LDKL A8,TYECB ST A7,ECBCW,A8 STORE KEYTABLE ADDRESS LDK A7,/82 STANDARD READ LKM DATA 1 READ05 EQU * ADKL A11,1 COUNT CHARS LDK A7,1 ST A7,XSPACE SET SPACE INDICATOR LC* A7,ECBBA,A8 GET CHARACTER TO A7 ANK A7,/7F LD A2,ECBRC,A8 RF(Z) READ10 READING OK LDK A1,4 ADS A1,4,A14 INCR RETURN ADDRESS RTN A14 READ10 AD A1,ECBCW,A8 ADD INDEX ADKL A14,4 ABR* A1 RETURN TO FUNCTION * * * READ AND ECHO * * READE EQU * LD A7,4,A14 * LD A1,2,A7 GET FUNCTION TABLE ADDRESS LDR* A7,A7 GET KEYTABLE ADDRESS LDKL A8,TYECB ST A7,ECBCW,A8 STORE KEYTABLE ADDRESS LDK A7,/82 STANDARD READ LKM DATA 1 LC* A7,ECBBA,A8 CF A14,PRCH ECHO LDKL A8,TYECB RB READ05 EJECT * * * SEARCH FOR A7 CHAR IN TABLE 1 * * CR=0 IF FOUND * CR=1 IF NOT FOUND * * ITAB1 LDK A2,3 LDK A1,1 CR IF NOT FOUND ITAB10 CW A2,TAB1 RF(G) ITAB30 END OF TABLE CC A7,TAB1-1,A2 RF(E) ITAB20 FOUND ADK A2,2 RB ITAB10 ITAB20 LC A7,TAB1,A2 GET CODE CF A14,STORE AND STORE IT LDK A1,0 CR=0 ITAB30 ADKL A14,4 ADK A1,0 ABR* A14 RETURN EJECT * * * STORE A7 CHARACTER IN TRANSMIT AREA * * A10=BUFFER POINTER * * STORE EQU * STOR10 CWK A5,LENGTH ABL(E) ERROR OVERFLOW ADK A5,1 COUNT CHAR SCR A7,A10 ADKL A10,1 STOR20 RTN A14 EJECT * * * READ HEXADECIMAL CHARACTER * * RDHEX CF A14,READE DATA KTRDH KTRDH DATA 0 NO KEYTABLE RDH100 SUK A7,/30 ABL(N) ERROR CWK A7,9 RF(NG) RDH110 SUK A7,7 ABL(N) ERROR CWK A7,/F ABL(G) ERROR RDH110 RTN A14 EJECT * * * EDIT CHAR FROM A7 IN HEXADECIMAL FORM * * EDHEX LDR A6,A7 SAVE A7 CF A14,SPACE LDK A7,'/' CF A14,PRCH LDR A7,A6 SRL A7,4 LC A7,HEXTAB,A7 CF A14,PRCH 1ST CHAR LDR A7,A6 ANK A7,/F LC A7,HEXTAB,A7 CF A14,PRCH 2ND CHAR CF A14,SPACE SPACE RTN A14 HEXTAB DATA '0123456789ABCDEF' * EJECT * * * EDIT CHAR FROM A7 IN HEXADECIMAL FORM * * EDHEXL CF A14,SPACEL LDK A1,'/' CF A14,STOREL LDR A1,A7 SRL A1,4 LC A1,HEXTAX,A1 CF A14,STOREL 1ST CHAR LDR A1,A7 ANK A1,/F LC A1,HEXTAX,A1 CF A14,STOREL 2ND CHAR CF A14,SPACEL SPACEL RTN A14 HEXTAX DATA '0123456789ABCDEF' EJECT * * * PRINT ONE LINE ON PRINTER * * PRLINE LDK A1,2 CW A1,PRECBL RF(E) PRLI10 NOTHING IN BUFFER LDK A7,/86 STD WRITE AND WAIT LDKL A8,PRLECB LKM DATA 1 PRLI05 EQU * ST A1,PRECBL RESET LENGTH LDK A1,1 ST A1,XSPACE SET SPACE INDICATOR PRLI10 RTN A14 PRLECB DATA /31,PRLBUF,2,0,0,0 PRECBL EQU PRLECB+4 REQUESTED LENGTH PRLBUF DATA 0 RES 60 EJECT * * * SEARCH FOR A7 CHAR IN TABLE 1 * * * CR=1 IF NOT FOUND ELSE * CR=0 AND CORRESPONDING CODE IS STORED * * STAB1 LDK A2,3 SET INDEX LDK A1,1 CR IF NOT FOUND STAB10 CW A2,TAB1 RF(G) STAB30 END OF TABLE CC A7,TAB1,A2 RF(E) STAB20 FOUND ADK A2,2 RB STAB10 TRY NEXT STAB20 LC A1,TAB1-1,A2 GET CORRESPONDING CODE CF A14,STOREL AND PRINT IT LDK A1,0 STAB30 LC A2,2,A14 SET CR FOR RETURN ANK A2,/FC ANK A1,3 ADR A1,A2 SC A1,2,A14 RTN A14 EJECT * * * STORE CHAR FROM A1 IN PRINT BUFFER * * STOREL LD A2,PRECBL SC A1,PRLBUF,A2 IM PRECBL LDK A1,0 ST A1,LSPACE RTN A14 * * PUT SPACE IN BUFFER * SPACEL LD A1,LSPACE RF(NZ) LSP100 LDK A1,/20 CF A14,STOREL IM LSPACE LSP100 RTN A14 LSPACE DATA 0 SPACE INDICATOR EJECT * * * PUT SPACE IN BUFFER * * SPACE LD A1,XSPACE RF(NZ) SPA100 PRSPAC LDK A7,' ' CF A14,PRCH IM XSPACE SPA100 RTN A14 XSPACE DATA 0 SPACE INDICATOR * * * * OCCUPIE PRINTER AND ECHO CHARACHTER IN A7 * * OCCPR EQU * LDR A1,A7 SAVE CHAR LDK A7,1 LKM DATA -7,PRPOOL GET BUFFER ST A8,PROCCB SAVE BUFFER ADDRESS CF A14,CRLF LDR A7,A1 RESTORE CHAR CF A14,PRCH ECHO RTN A14 * * * EJECT * * * WRITE BUFFERS ON CASSETTE * * WRTC EQU * CF A14,LOAD LOAD CASSETTE CM TCECB+10 CF A14,WRTM WRITE TAPE MARK LDK A1,32 LDKL A2,AREA WRTC10 EQU * ST A2,ECBBA,A8 LDKL A3,256 ST A3,ECBRL,A8 LDK A7,/86 LDKL A8,TCECB LKM DATA 1 WRITE ONE BLOCK LD A3,TCECB+8 ANK A3,4 RF(NZ) WRTC20 ADKL A2,256 SUK A1,1 RB(NZ) WRTC10 NOT END OF AREA CF A14,WRTM CF A14,UNLOAD ABL OPCONT WRTC20 EQU * CF A14,UNLOAD ABL ERROR TCECB DATA /12,AREA,256,0,0,0 * * LOAD CASSETTE * LOAD EQU * LDK A7,/B7 LDKL A8,TCECB IM TCECB+10 NO SEQUENCE NUMBER LOAD10 EQU * LKM DATA 1 LOAD CASSETTE LD A3,TCECB+8 ANKL A3,/0201 RB(NZ) WRTC20 RTN A14 * * WRITE TAPE MARK * WRTM EQU * LDK A7,/A2 LDKL A8,TCECB RB LOAD10 * * UNLOAD CASSETTE * UNLOAD EQU * LDK A7,/B8 LDKL A8,TCECB LKM DATA 1 RTN A14 * LOAD1 EQU * LDK A7,/B7 LDKL A8,TCECB IM TCECB+10 LKM DATA 1 LD A3,TCECB+8 ANK A3,1 RB(NZ) WRTC20 RTN A14 EJECT * * * READ BUFFERS FROM CASSETTE * * RDTC EQU * CF A14,LOAD1 LOAD1 CASSETTE RDTC10 EQU * LDK A7,/82 LDKL A8,TCECB LDKL A2,AREA ST A2,ECBBA,A8 LDK A1,32 LKM DATA 1 READ ONE BLOCK LC A3,TCECB+8 ANK A3,/10 RB(NZ) RDTC10 TAPE MARK RDTC20 EQU * ADKL A2,256 SUK A1,1 RF(Z) RDTC30 AREA FILLED ST A2,ECBBA,A8 LKM DATA 1 READ ONE BLOCK LC A3,TCECB+8 ANK A3,/10 RF(NZ) RDTC30 TAPE MARK RB RDTC20 RDTC30 EQU * CF A14,UNLOAD ABL OPCONT END ASTART