|
|
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: 34124 (0x854c)
Notes: pts_type(SC)
Names: »DRDY01.SC«
└─⟦4358b8014⟧ Bits:30009669 Philips computer tape "600124"
└─⟦this⟧ »MON10/DRDY01.SC«
└─⟦79fbed147⟧ Bits:30009697 Philips computer tape "600414"
└─⟦this⟧ »M:DECE/DRDY01.SC«
└─⟦bf903a231⟧ Bits:30009665 Philips computer tape "600109"
└─⟦this⟧ »MON10/DRDY01.SC«
IDENT DRDY01 REL 10.0 80-06-09 870105041000 =9,BYTE COUNTER RESET IN RECOVERY REL 10.0 80-05-19 =8,MMU BUFFER SIZE CHANGED REL 10.0 80-03-14 =7,CUR.POS FOR ALL ORDERS EXCEPT ERASE PRR 10.0 79-12-07 =6,CORRECTION OF SPECIAL CHARTACTER HANDLING REL 10.1 79-10-19 =5,ABORT ROUTINE REL 10.1 79-10-15 =4,CORRECTION OF ERASE REL 9.1 79-05-23 =3,STEADY CURSOR PROBLEM CORRECTED PRR 9.1 79-04-06 =2,ERASE ONLY TO LAST POS. OF SCREEN PRR 9.1 79-01-31 =1 DRIVER ADAPTAD TO HANDLE PTS 6385 PRR 9.1 79-01-12 * ************************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRDY01 = DRIVER VIDEO AND GRAPHIC DISPLAY * * * * * * ************************************************** * * * THIS DRIVER HANDLES OUTPUT TO THE VIDEO DISPLAYS * PTS 6344, PTS 6342 AND TO THE PLASMA DISPLAYS PTS 6351 * AND PTS 6386 * THE DISPLAYS MUST BE CONNECTED TO THE SYSTEM * VIA CHLT OR CHRT. * * THE DRIVER INCLUDES DEVICE DEPENDENT ECHO-FUNCTIONS * WHICH MAKES IT POSSIBLE TO USE THE DISPLAY AS AN * ECHO-DEVICE TO ANY KEYBOARD, THAT RUNS UNDER THE * GENERAL KEYBOARD DRIVER DRKB01. * * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C D Y ACTIVATION PART * * I H D Y INTERRUPT HANDLER * * R C D Y RECOVERY ROUTINE * * E C H O D Y ECHO FUNCTIONS * * * THE FOLLOWING ORDERS ARE TREATED: * * ORDER 00: TEST STATUS * 05: BASIC WRITE * 06: STANDARD WRITE * 07: WRITE GRAPHIC DISPLAY * 0B: CURSOR POSITIONING * 31: ERASE * * NORMAL REGISTER USAGE * * REGISTER A1 = RETURN CODE * A2 = OUTPUT CHARACTER * A3 = BUFFER INDEX * A4 = WORK REGISTER * A5 = STACK BASE * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS * EJECT * * * SYSTEM ADAPTATION * * DISPLAY TYPE MUST BE DEFINED IN FIRST WORD IN DWT. * * --------------------------------- * BIT: 10 11 * -------------- * 0 0 PTS 6344 * 0 1 PTS 6351 & 6342 * 1 0 PTS 6386 & 6385 * --------------------------------- * * BY MEANS OF CONDITIONAL ASSEMBLY THE DRIVER: * -CAN HANDLE GRAFIC MODE FOR PTS 6351 OR NOT * -IS ADAPTED TO CONTROL ONLY PTS 6344 * -CAN USE LOWER CASE CHAR. GENERATOR COLUMN 6 AND 7 * -CAN SUPPRESS ECHOING OF END OF RECORD CHARACTER * -CAN SUPPRESS TRAILING BLANKS * AND ALSO UNDERLINE START (/12), LOW INT (/1E), HIGH INT (/1F) EJECT * * * * *********** * ENTRIES * *********** * * * ENTRY DYAD ADDRESS TO ADDRESSBLOCK ENTRY ECHODY DEVICE-DEPENDENT ECHO-ROUTINE * * * * ***************************************** * EXTERNAL TOSS MODULE ENTRIES * ***************************************** * * EXTRN DISIOE I/O REQUEST ERROR EXTRN OUTPUT SUBROUTINE TO SEND CHARACTER EXTRN TDISP DISPATCHER EXTRN LDREG LOAD REGISTERS A4, A3, A5, A7, A8 AND RETURN EXTRN TENDIO END I/O EXTRN SAVE8 SAVE 8 REGISTERS ON A15 STACK EXTRN ECHRTN RETURN TO KEYBOARD AFTER ECHO EXTRN GETCHR GET CHARACTER FROM ECB-BUFFER EJECT * ************************ * DWT PARAMETERS * ************************ * EXTRN DWTST STATUS EXTRN DWTBC BYTE COUNTER EXTRN DWTOR ORDER * EJECT ************* * CONSTANTS * ************* * FASTO EQU /14 FAST OUTPUT SCADD EQU /11 SET CURSOR ADDRESS ULSTAR EQU /12 UNDERLINE START ULSTOP EQU /13 UNDERLINE STOP LISTAR EQU /1E LOW INTENSITY START LISTOP EQU /1F LOW INTENSITY STOP BACKSP EQU /08 BACKSPACE LF EQU /0A LINE FEED HOME EQU /0B CURSOR HOME CLEHOM EQU /0C CLEAR AND CURSOR HOME CR EQU /0D CARRIAGE RETURN CURRIG EQU /10 CURSOR RIGHT SPACE EQU /20 SPACE STX EQU /82 START OF MESSAGE ETB EQU /97 END OF MESSAGE ETX EQU /03 LAST DUMMY RETURN EQU /12 RETURN TO ALPHANUMERIC MODE ESCAPE EQU /11 ESCAPE TO GRAPHIC MODE POINT EQU /2E POINT CHARACTER EQU EQU 6 THRESHOLD FOR AUTOMATIC FAST OUTPUT STILL EQU /18 CURSOR STEADY CTYCOD EQU /1B SET COUNTRY CODE * ******************** * RETURN CODES * ******************** * CCERR EQU /4 CODE CHECK ERROR OPERR EQU /1 NOT OPERABLE, POWER OFF * EJECT * * ***************************************** * CONDITIONAL ASSEMBLY * ***************************************** * * * BY SETTING X:A TO 1 DRIVER CAN HANDLE GRAFIC MODE FOR PTS 6351 * X:A EQU 0 GRAFIC EQU 0 * * BY SETTING X:B = 1 THE DRIVER HANDLES ONLY PTS 6344 * X:B EQU 1 WHATDY EQU 1 * * * BY SETTING X:C TO 1 LOWER CASE CHAR. GENERATOR * (COLUMNS 6 AND 7) CAN BE USED X:C EQU 0 LOWCHA EQU 1 * * * BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE * TO SUPPRESS ECHOING OF END OF RECORD CHARACTER. * THIS IS ATTAINED BY SETTING THE CONSTANT X:G=0 * X:D EQU 0 EORECH EQU 0 * * BY SETTING THE CONSTANT TRASPA = 1 IT IS * POSSIBLE TO SUPPRESS TRAILING BLANKS, /12, /1E AND /1F. * X:E EQU 0 TRASPA EQU 1 EJECT * * BY SETTING X:F = 1, CURSOR WILL BE STEADY * INSTEAD OF BLINKING X:F EQU 0 STEADY EQU 0 * * THIS DRIVER CAN BE ADAPTED TO MEMORY MANAGEMENT UNIT * BY SETTING MMUPAG = 1 * MMUPAG EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE * TO CHOOSE BETWEEN NINE (9) DIFFERENT CHARACTER SETS. * CODE COUNTRY * 0 GB/NL/B * 1 D/A/L/CH * 2 F/CH/B/L * 3 E * 4 I/CH * 5 S/SF * 6 DK/N * 7 P * 8 YU * 9 US X:G EQU 0 COUNTRY EQU 0 * * MEMORY MANAGEMENT BUFFER SIZE * * X:H EQU 80 =8 DVBLEN EQU 130 * EJECT * * ******************************** * DWT-DISPLACEMENT * ******************************** * * DWTDRD EQU /10 START OF DRIVER DEFINED PART * IFT MMUPAG=0 START EQU DWTDRD XIF * IFT MMUPAG=1 START EQU DWTDRD+4 XIF * DWTAP EQU START+/12 HEAD POSITION POINTER DWTPOS EQU START+/15 POSITIONS DWTLIN EQU START+/14 LINES DWTBIN EQU START+/16 BUFFER INDEX * EJECT * * ********** * TABLES * ********** * * DATA DVBLEN BUFFER LENGTH DATA 2 DEVICE INDEX DYAD EQU * ADDRESS BLOCK DATA ACDY ACTIVATION DRIVER DATA ABDY ABORT ROUTINE ADDRESS DATA IHDY INTERRUPT HANDLER DATA RCDY RECOVERY ROUTINE DATA ECHODY DEVICE-DEPENDENT ECHO-ROUTINE * * TABSPE EQU * TABLE OF SPECIAL CHARACTERS DATA /0712,/131E,/1F14 EJECT * * A C D Y * * ACDY = ACTIVATION DRIVER DISPLAY * * ORDER 00: TEST STATUS. DUMMY IS SENT TO DISPLAY AND RETURN CODE * IS SET IF DISPLAY NOT OPERABLE * * * ORDER 05: BASIC WRITE. CHARACTER ARE SENT TO DISPLAY * FROM ECB-BUFFER WITHOUT ANY CHECK. * * ORDER 06: STANDARD WRITE. CHARACTERS ARE SENT TO DISPLAY FROM * ECB-BUFFER AFTER INDIVIDUAL CODE CHECK. * * IF A PREDEFINED NUMBER OF CHARACTERS (SEE CONSTANT 'EQU') * ARE FOUND EQUAL, FAST OUTPUT IS EXECUTED FOR THE NUMBER * OF CHARACTERS FOUND EQUAL (> 'EQU') ON 6344 & 6386> * IFT GRAFIC=1 * ORDER 07: WRITE GRAPHIC DISPLAY. THE DISPLAY IS SWITCHED * TO GRAPHIC MODE AND INFORMATION IN ECB-BUFFER * IS SENT TO THE DISPLAY. * XIF * ORDER /B: CURSOR POSITIONING AND STANDARD WRITE. * THE CURSOR IS SENT TO THE POSITION GIVEN * IN CONTROL WORD. NO INFORMATION ON DISPLAY * IS ERASED. THEN STANDARD WRITE (SEE ORDER 6) * IS EXECUTED. * * ORDER 31: ERASE. THE DISPLAY IS ERASED ON THE LINE * WHERE THE CURSOR IS POSITIONED THE NUMBER * OF CHARACTERS THAT ARE DEFINED IN THE CONTROL * WORD OF ECB. 0-80 CHARACTERS. ERASING STARTS * IN THE CURSOR POSITION. THE CURSOR RE- * MAINS IN THAT POSITION. ACDY EQU * LDK A3,0 START BUFFER INDEX LDK A4,0 COUNTER LDR A7,A7 ORDER 0 ? ABL(E) ADY410 YES LDK A2,STX START OF MESSAGE CF A5,OUTPUT SEND IFT WHATDY=0 LDR* A1,A6 CHANNEL PARAMETER ANK A1,/10 GRAPHIC DISPLAY RF(E) ACDY02 NO IFT GRAFIC=1 CWK A7,7 ORDER ' ? ABL(E) ADY500 XIF IFT WHATDY=0 LDK A2,/12 INDICATE SWITCH TO ALPHA MODE CF A5,OUTPUT * XIF * ACDY02 EQU * CWK A7,5 ORDER 5 RF(E) ACDY90 YES SUK A7,6 ORDER 6 ? RF(E) ACDY20 YES SUK A7,5 ORDER /B ? ABL(E) ADY200 YES SUK A7,/26 ORDER ERASE ? ABL(E) ADY160 YES * DYERR ABL DISIOE I/O REQUEST ERROR EJECT * ACTIONS SPECIFIED BY USER IN RIGHT BYTE IN BUFFER * ARE CARRIED OUT. * /2B NO MOVING OF PRINT HEAD * /30 CR, LF, LF * /31 ERASE DISPLAY AND WRITE FROM HOME POSITION * OTHER VALUE CR, LF * ACDY20 EQU * LD A2,4,A8 GET REQUESTED LENGTH RF(E) ACDY25 LDK A3,2 START BUFFER INDEX LD A2,2,A8 GET BUFFER ADDRESS LC A2,1,A2 GET CONTROL CHARACTER ANK A2,/FF ACDY25 EQU * SUK A2,/2B POSITIONING BEFORE WRITE ? RF(E) ACDY90 SUK A2,6 /31 ? RF(E) ACDY65 LDK A4,1 INDICATE LINE FEED ADK A2,1 DOUBLE LINE FEEED ? RF(NE) ACDY30 ADK A4,1 INDICATE DOUBLE LINE FEED ACDY30 LDK A2,CR CARRIAGE RETURN ACDY35 LDK A1,1 SC A1,DWTAP+1,A6 RESET HEAD POSITION COUNTER * SEND CARRIAGE RETURN AND ONE OR TWO LINE FEEDS * ACDY50 EQU * CF A5,OUTPUT SEND CHARACTER ACDY52 SUK A4,1 RF(N) ACDY90 START SECTION ENDED? LC A1,DWTLIN,A6 LINES CC A1,DWTAP,A6 LAST LINE ? RF(L) ACDY55 LDKL A2,/100 INCREMENT LINE COUNTER ADS A2,DWTAP,A6 ACDY55 LDK A2,LF LINE FEED TO SEND RB ACDY50 ACDY65 LDK A2,CLEHOM CLEAR AND HOME LDK A1,1 SC A1,DWTAP,A6 RESET LINE COUNTER RB ACDY35 EJECT * * GET, CHECK AND SEND CHARACTER * (IF ORDER 5 NO CHECK) * ACDY70 EQU * IFT WHATDY=0 LDR* A4,A6 GET CHANNEL PARAMETER ANK A4,/10 RF(NZ) ACDY75 NOT 6344 OR 6386 XIF LD A4,2,A8 ADR A4,A3 GET ADDRESS TO NEXT CHAR IN BUFFER CCR A2,A4 CHAR EQU TO CURRENT? ABL(E) CHECK YES! ACDY75 EQU * CF A5,OUTPUT ACDY80 CF A15,POSUPD POSITION COUNTER UPDATING IFT TRASPA=1 LD A1,2,A8 GET BUFFER ADDRESS (BA) LD A2,4,A8 GET REQUESTED LENGTH(RL) ADR A1,A2 GET ADD END OF BUFFER SKIP05 CWK A2,2 RF(NG) SKIP30 RL < 3 SUK A1,1 DECR. BA LCR A4,A1 GET CHAR CCK A4,/2020 SPACE ? RF(NE) SKIP20 NO SKIP07 SUK A2,1 DECR RL RB SKIP05 GET NEXT SKIP20 CWK A2,4 RF(NG) SKIP30 RL < 5 LC A4,-2,A1 GET CHAR CCK A4,/1111 TABULATION CHAR ? RF(NE) SKIP25 NO! SUK A1,2 DECR BA SUK A2,2 DECR RL RB SKIP07 GET NEXT SKIP25 LCR A4,A1 GET CHARACTER AGAIN ANK A4,/FF SUK A4,/12 UNDER LINE START? RB(Z) SKIP07 YES! SKIP IT! SUK A4,/C LOW INT. START? RB(Z) SKIP07 YES! SUK A4,1 LOW INT. STOP? RB(Z) SKIP07 YES! * SKIP30 ST A2,4,A8 STORE NEW RL XIF ACDY90 LDK A4,0 ADY100 CF A15,GETCHR GET CHARACTER FROM ECB-BUFFER LDR A1,A1 LAST CHARACTER? ABL(NP) ADY405 SUK A7,5 ORDER 5? RB(E) ACDY75 ANK A2,/7F LDK A1,5 SET TABLE POINTER CC A2,TABSPE,A1 FAST OUTPUT? RF(E) ADY125 SUK A1,1 NO! LDR* A7,A6 CHANNEL PARAMETER ANK A7,/30 GRAFIC DISPLAY ? RF(E) ADY110 NO LDK A1,5 SET TABLE PONTER ADY110 CC A2,TABSPE,A1 CHARACTER FOUND RF(NE) ADY128 CCK A2,/1E1E LOW INTENSITY ? RF(NE) ADY122 NO LDK A4,/80 ADY120 ORRS A4,A6 SET LOW INTENSITY MODE LDK A4,0 RB ACDY50 ADY122 CCK A2,/1212 UNDERLINE ? RF(NE) ADY125 LDK A4,/40 SET UNDERLINE MODE RB ADY120 ADY125 CCK A2,/1414 FAST OUTPUT ? LDK A4,0 RB(NE) ACDY50 NO LDR A4,A2 CF A15,GETCHR GET OUTPUT CHARACTER LDR A1,A2 LDR A2,A4 LD A4,4,A8 REQ LENGTH SUR A4,A3 NUMBER OF CHARS RF(Z) ADY127 NONE * IFT WHATDY=0 LDR* A7,A6 GET CHANNEL PARAMETER ANK A7,/10 RF(NZ) OTHER OTHER DISPLAY THAN 6344 OR 6386? XIF LDR A3,A1 NO! CF A5,FASTER ADY127 EQU * LD A3,4,A8 REQ LENGTH ST A3,6,A8 EFF LENGTH ABL ADY405 ADY128 EQU * SUK A1,1 GET NEXT RB(NN) ADY110 NOT AT END LDR A1,A2 MOVE CHARACTER SUK A1,/11 TAB CHAR? (11) RF(E) ADY140 SUK A1,/F LESS THAN /20 ? RF(N) ADY130 CODE CHECK ERROR SUK A1,/3F GREATER THAN /5F RB(NP) ACDY70 IFT LOWCHA=0 SUK A2,/20 TRANSFORM CHARACTER BETWEEN /60 TO /7F TO CHARACTER BETWEEN /40 TO /5F XIF RB ACDY70 * * IFT WHATDY=0 OTHER EQU * ************************ * A3 = INDEX * A1 = CHARACTER * A4 = NUMBER ************************ LC A2,DWTBC,A6 AD A2,DWTAP,A6 GET POSITION ANK A2,/FF ADR A2,A4 ADD LENGTH OF REQUEST LD A3,DWTPOS,A6 GET MAX-POS AND ANK A3,/FF ST A4,10,A8 SAVE LENGTH SUR A3,A2 COMPARE RF(NN) OT030 LENGTH OK ADR A4,A3 ST A4,10,A8 SAVE LENGTH ADK A4,1 ADJUST NUMBER OF OUTPUT CHARACTERS OT030 EQU * LDR A3,A1 SAVE CHARACTER TO SEND OT010 LDR A2,A3 CF A5,OUTPUT SENT CHAR (IN A2) SUK A4,1 DECREMENT COUNTER RB(P) OT010 LD A4,10,A8 GET ACT. LENGTH OT040 LDK A2,BACKSP CF A5,OUTPUT SENDBACKSPACE SUK A4,1 DECREMENT LENGTH RB(P) OT040 RB ADY127 XIF EJECT * * CODE CHECK ERROR * ADY130 EQU * LDK A1,CCERR ORS A1,8,A8 RETURN CODE RB ADY100 EJECT * * TABULATION * ADY140 EQU * CF A15,GETCHR GET FIRST ASCII CHARACTER LDR A4,A2 CF A15,GETCHR GET SECOND ASCII CHARACTER ANK A2,/F ANK A4,/F RF(E) ADY144 ADY143 ADK A2,/A FROM DECIMAL TO HEXADECIMAL SUK A4,1 RB(NE) ADY143 ADY144 LC A4,DWTAP+1,A6 SUR A2,A4 SUBTRACT HEAD POSITION POINTER LC A4,DWTBC,A6 SUR A2,A4 AND REQUESTS POSITION COUNTER TO GET NUMBER OF SPACES TO SEND RB(NP) ADY100 LDR A4,A2 ADY145 LDK A2,CURRIG CURSOR RIGHT ADY146 CF A5,OUTPUT CF A15,POSUPD POSITION COUNTER UPDATING SUK A4,1 READY ? RB(NE) ADY145 NO ABL ADY100 EJECT * * ERASE ORDER /31 * ADY160 LD A4,10,A8 GET NUMBER OF CHAR TO ERASE IFT WHATDY=0 LDR* A1,A6 CHANNEL PARAMETER ANK A1,/10 GRAFIC DISPLAY? RF(NE) ADY166 YES =2 XIF CF A5,ERA GET LENGTH TO ERASE =2 LDK A3,/20 CF A5,FASTER FAST OUTPUT ADY165 LDK A2,ETB CF A5,OUTPUT ABL ADY410 END OF REQUEST IFT WHATDY=0 ADY166 EQU * YES =2 CF A5,ERA GET LENGTH TO ERASE =2 * ADY170 SUK A4,1 DECR NO OF CHAR RF(N) ADY180 ERASE READY LDK A2,/20 SPACE CF A5,OUTPUT SEND IT RB ADY170 ADY180 LD A4,10,A8 CF A5,ERA GET LENGTH TO ERASE =2 LDR A3,A3 OVER EDGE =4 RF(NN) ADY186 NO =4 SUK A4,1 ADJUST LENGTH =4 ADY186 EQU * SUK A4,1 DECREMENT =2 RB(N) ADY165 CURSOR IN ORIGIN POSITION LDK A2,BACKSP CURSOR LEFT CF A5,OUTPUT SEND IT RB ADY186 AGAIN XIF EJECT * * ORDER /B CURSOR POSITIONING PART * ADY200 EQU * * IFT WHATDY=0 LDR* A1,A6 CHANNEL PARAMETER ANK A1,/10 GRAFIC DISPLAY? RF(NE) ADY205 YES * IF VIDEO (6344) SET CURSOR ADDRESS DIRECT XIF LD A4,10,A8 GET REQUESTED CURSOR POS ST A4,DWTAP,A6 UPDATE LINE & POS COUNTER CF A5,CURPOS SET CURSOR RF ADY380 IFT WHATDY=0 * GET LINE ADY205 LC A4,10,A8 GET REQUESTED LINE CC A4,DWTLIN,A6 OUTSIDE SCREEN? RF(NG) ADY207 NO! LC A4,DWTLIN,A6 YES! SET CURSOR AT END OF LINE ADY207 EQU * LC A3,DWTAP,A6 GET ACTUAL LINE ADY210 CWR A4,A3 RF(N) ADY250 REQUESTED LINE ABOVE ACTUAL RF(E) ADY300 SAME LINE LDK A2,LF LINE FEED ADK A3,1 INCREMENT ACTUAL LINE NUMBER ADY230 CF A5,OUTPUT SEND LDR A4,A4 REQUESTED LINE RB(NZ) ADY210 NOT EQUAL ZERO LDK A4,1 RF ADY300 ADY250 LDK A2,HOME HOME LDK A3,1 RESET ACTUAL LINE NUMBER ST A3,DWTAP,A6 RESET POSITION RB ADY230 * * GET POSITION * ADY300 SC A4,DWTAP,A6 UPDATE HEAD LINE COUNTER LC A4,11,A8 GET REQUESTED POSITION CC A4,DWTPOS,A6 OUTSIDE SCREEN? RF(NG) ADY303 NO! LC A4,DWTPOS,A6 SET LAST LINE ADY303 EQU * CWK A4,1 FIRST POSITION ? RF(NE) ADY305 NO CWR A4,A3 FIRST LINE ? RF(NE) ADY305 NO LDK A2,HOME CURSOR GO HOME RF ADY330 ADY305 RF(NL) ADY307 REQ. POS NOT ZERO LDK A4,1 ADY307 LC A3,DWTAP+1,A6 GET ACTUAL POSITION CC A3,DWTPOS,A6 MAX-POS? RF(NG) ADY310 NO! SUK A3,1 ADY310 CWR A4,A3 FORWARDS OR BACKWARDS RF(E) ADY370 POSITION FOUND RF(N) ADY340 BACK LDK A2,CURRIG CURSOR RIGHT ADK A3,1 UPDATE POSITION COUNTER ADY330 CF A5,OUTPUT SEND RB ADY310 ADY340 SUR A3,A4 ACTUAL POS. - WANTED POS. CWR A3,A4 COMPARE BACKSTEPS WITH CR-WAY RF(L) ADY345 BACKSPACE WAY LDK A2,CR CARRIAGE RETURN LDK A3,1 INDICATE FIRST POSITION RB ADY330 ADY345 LDK A2,BACKSP BACKSPACE CF A5,OUTPUT SEND SUK A3,1 LAST BACKSPACE ? RB(NE) ADY345 ADY370 SC A4,DWTAP+1,A6 UPDATE HEAD POSITION POINTER XIF ADY380 LDK A3,2 START BUFFER INDEX ABL ACDY90 IFT WHATDY=0 * ADY400 LDK A2,/22 START CHARACTER CF A5,OUTPUT * XIF * EJECT * * * SEND LAST DUMMY, SET CURSOR POSITION IN CONTROL * WORD, LOAD A1 WITH RETURN CODE AND END I/0. * ADY405 EQU * LDR* A1,A6 GET CHANNEL PARAMETER ANK A1,/30 6344 ? RF(NE) ADY407 NO LDR* A1,A6 LDR A4,A1 ANK A1,/40 UNDERLINE MODE ? RF(E) ADY406 NO LDK A2,ULSTOP UNDERLINE STOP CF A5,OUTPUT ADY406 ANK A4,/80 LOW INTENSITY MODE ? RF(E) ADY407 LDK A2,LISTOP LOW INTENSITY STOP CF A5,OUTPUT ADY407 EQU * LDK A2,ETB END OF TEXT MESSAGE CF A5,OUTPUT SEND CHARACTER CF A15,UPDAPP UPDATE HEAD POSITION COUNTER ADY410 LDK A2,ETX LAST DUMMY CF A5,OUTPUT SEND DUMMY SUK A7,/31 =7 RF(Z) ADY415 ORDER ERASE =7 LD A4,DWTAP,A6 GET CURSOR POSITION =4 ST A4,10,A8 SAVE CURSOR POS. IN ECB =4 ADY415 EQU * ADK A7,/31-5 =7 RF(NE) ADY420 NOT ORDER BASIC WRITE LDKL A4,/101 HOME POSITION ST A4,DWTAP,A6 ADY420 EQU * ENDIO CF A15,TENDIO END I/O EXIT ABL TDISP GO TO DISPATCHER * IFT GRAFIC=1 * EJECT * * GRAPHIC PART * ADY500 EQU * LDK A2,/11 CF A5,OUTPUT SWITCH TO GRAFIC MODE ADY510 CF A15,GETCHR GET CHARACTER LDR A1,A1 BUFFER EMPTY RB(E) ADY400 LDR A4,A2 CF A15,GETCHR GET NEXT CHARACTER LDR A1,A4 ANK A4,/80 ADDRESS OR DATA RF(E) ADY530 DATA MESSAGE * * ADDRESS MESSAGE * * SET FIRST OUT PUT IN A2 * AND SECOND IN A4 * SLL A1,4 LDR A4,A2 SRL A4,4 ORR A4,A1 ANK A2,/F ANK A4,/7F ORK A2,/20 ADY515 CF A5,OUTPUT SEND FIRST CHARACTER LDR A2,A4 GET SECOND CHARACTER CF A5,OUTPUT SEND SECOND CHARACTER RB ADY510 EJECT * * DATA MESSAGE * * FIRST OUTPUT IS SET IN A2 * AND SECOND IN A4 * ADY530 SLL A1,13 LDR A4,A2 SLL A2,5 ORR A1,A2 LDK A7,10 LDK A2,0 ADY540 SLL A1,1 RF(NN) ADY550 ORKL A2,/200 ADY550 SUK A7,1 RF(E) ADY560 SRL A2,1 RB ADY540 ADY560 LDR A4,A2 SRL A4,4 ANK A4,/3F ANK A2,/F ORK A2,/60 RB ADY515 * XIF * EJECT * * UPDAPP = SUBROUTINE TO UPDATE HEAD * POSITION POINTER WHEN END * OF REQUEST IS REACHED UPDAPP EQU * LC A3,DWTBC,A6 GET POSITION COUNTER ADS A3,DWTAP,A6 UPDATE HEAD POSITION POINTER LDK A3,0 SC A3,DWTBC,A6 RESET POSITION COUNTER RTN A15 * * POSUPD = SUBROUTINE TO UPDATE ACTUAL POSITION * POINTER WHEN REQUEST RUNNING. * A CHECK THAT POINTER NOT EXCEEDS 80 IS DONE * POSUPD EQU * LC A2,DWTBC,A6 GET POSITION POINTER ANK A2,/FF AD A2,DWTAP,A6 INCLUDE HEAD POSITION POINTER ANK A2,/FF CC A2,DWTPOS,A6 END OF ROW ? RF(P) POSU10 IM DWTST,A6 INCREMENT POSITION COUNTER POSU10 RTN A15 EJECT * * I H D Y * * INTERRUPT * IHDY EQU * LD A4,DWTST,A6 BUSY? RB(N) EXIT NO SLL A4,2 ECHO MODE ? RF(N) IHDY10 LDR A1,A1 RETURN CODE FROM CHANNEL UNIT ? RB(NE) ADY420 YES IHDY10 ABL LDREG RELOAD A3-A5 AND RETURN VIA A5 EJECT * * R C D Y * * RCDY = RECOVERY ROUTINE DISPLAY * * * RECOVERY IS CARRIED OUT ONLY IF * ORDER 6 IS RUNNING * * AT ENTRY: * * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS RCDY EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * =3 LDKL A2,/7FFF ANS A2,DWTST,A6 SET BUSY =1 =1 =1 =1 =1 =1 =1 =1 * IFT WHATDY=0 * LDR* A2,A6 CHANNEL PARAMETER ANK A2,/10 GRAPHIC DISPLAY ? RF(E) RCDY10 NO LDK A2,RETURN RETURN TO ALPHANUMERIC MODE CF A5,OUTPUT * XIF * EJECT RCDY10 EQU * LDK A2,/00 DUMMY TO SEND CF A5,OUTPUT LDR A4,A4 LRC-ERROR IN BLOCK ? RF(NE) RCDY20 IFT WHATDY=0 =1 IFF STEADY+COUNTRY=0 =1 LDR* A2,A6 GET CHANNEL PARAMETERS =1 ANK A2,/20 PTS 6385/6386 ? =1 RF(Z) RCDY14 NO =3 LDK A3,100 SET UP TRANSFER COUNTER =3 RCDY12 LDK A2,STILL-1 SET UP CURSOR BLINKING =3 ADK A2,STEADY ADJUST TO STEADY IF SO =3 CF A5,OUTPUT SEND CURSOR INF =3 SUK A3,1 DEC TRANSFER COUNTER =3 RB(P) RCDY12 NOT ENOUGH OF TRANSFERS =3 LDK A2,CTYCOD SEND 'SET COUNTRY CODE' =1 CF A5,OUTPUT =1 LDK A2,COUNTRY SEND 'COUNTRY CODE' =1 ORK A2,/30 =1 CF A5,OUTPUT =1 =3 =3 RCDY14 EQU * =3 XIF =1 LD A3,DWTST,A6 SAVE STATUS WORD =3 LDK A2,CLEHOM CLEAR AND HOME CF A5,OUTPUT SEND LDKL A2,/101 ST A2,DWTAP,A6 SET HEAD LINE-AND-POSITION COUNTER LDK A2,0 =9 SC A2,DWTBC,A6 RESET BYTE COUNTER =9 LDR A3,A3 GET OLD STATUS RB(N) ENDIO NOT BUSY LDK A1,OPERR SET RETURN CODE RCDY15 ABL ADY420 EJECT * * LRC-ERROR IN BLOCK SENT REMOTE * RCDY20 EQU * SUK A7,5 ORDER 5 ? RF(NE) RCDY25 NO LDK A1,2 INDICATE THROUGHPUT ERROR RB RCDY15 RCDY25 LDK A2,STX START OF MESSAGE CF A5,OUTPUT LC A4,DWTBC,A6 GET NUMBER OF POSITIONS TO BACK ANK A4,/FF RF(E) RCDY30 CF A5,BACCAN SEND BACKSPACES AND RUB OUT LDK A3,2 START BUFFER INDEX RCDY30 ABL ACDY90 EJECT * * E C H O D Y * * ECHODY = DEVICE-DEPENDENT ECHO-ROUTINE * ECHODY EQU * LDR A7,A7 EOR? RF(N) ECDY17 YES LDR A3,A2 SAVE CHARACTER * IFT EORECH=0 * SUK A2,/80 RF(NN) ECDY20 NOT TO BE ECHOED ADK A2,/80 * XIF * SUK A3,/8 RF(E) ECDY40 BACKSPACE SUK A3,/10 RF(E) ECDY50 CLEAR ECDY10 CF A5,OUTPUT SEND CHARACTER CF A15,POSUPD POSITION COUNTER UPDATING RF ECDY20 ECDY17 CF A15,UPDAPP UPDATE HEAD CURSOR POINTER ECDY20 ABL ECHRTN RETURN TO KEYBOARD * * BACKSPACE * ECDY40 EQU * LC A4,DWTBC,A6 GET POSITION COUNTER ANK A4,/FF RB(E) ECDY20 FIRST POSITION LDK A4,1 INDICATE ONE BACKSTEP CF A5,BACCAN BACK RB ECDY20 EJECT * * CLEAR * ECDY50 EQU * LC A4,DWTBC,A6 GET POSITION COUNTER ANK A4,/FF RB(E) ECDY20 FIRST POSITION IFT WHATDY=0 LDR* A1,A6 GET CHANNEL PARAMETER ANK A1,/10 GRAFIC DISPLAY RF(E) ECDY60 N CF A5,BACCAN BACK RB ECDY20 XIF ECDY60 LDR A3,A4 SAVE POSITION COUNTER LD A4,DWTAP,A6 GET HEAD LINE-AND-POSITION COUNTER CF A5,CURPOS SET CURSOR LDR A4,A3 GET POS COUNTER ADK A4,1 UPDATE POS COUNTER LDK A3,/20 CF A5,FASTER FAST OUTPUT LDK A2,0 SC A2,DWTBC,A6 RESET POSITION COUNTER RB ECDY20 EJECT * * * BACCAN = SUBROUTINE TO POSITION CURSOR * AT THE PLACE BEFORE REQUEST IF * CLEAR OR BACKWARDS ONE STEP IF * BACKSPACE. * BACCAN EQU * LDR A3,A4 LC A2,DWTBC,A6 GET POSITION COUNTER ANK A2,/FF AD A2,DWTAP,A6 ADD HEAD POSITION COUNTER ANK A2,/FF CC A2,DWTPOS,A6 LAST POSITION RF(NP) BACA10 NO LDK A2,SPACE DESTRUCTIVE SPACE RF BACA20 BACA10 LDK A2,BACKSP BACKSPACE CF A5,OUTPUT SEND LDK A2,SPACE DESTRUCTIVE SPACE CF A5,OUTPUT SEND LDK A2,BACKSP BACKSPACE BACA20 CF A5,OUTPUT SEND SUK A4,1 RB(NE) BACA10 NGR A3,A3 NEGATE REGISTER ADS A3,DWTST,A6 UPDATE POSITION COUNTER RTN A5 EJECT *********************************************** * CHECK = SUBROUTIN TO CHECK USER BUFFER IN * * ORDER TO GET A REASON FOR USING * * 'FAST OUTPUT FACILITY' ON 6344 * * AND 6386 * *********************************************** CHECK EQU * * * LD A1,4,A8 SUR A1,A3 END OF BUFFER? ABL(NP) ACDY75 YES! LDR A7,A2 SAVE CHER TO SEND (AND CHECK) LDR A2,A4 SAVE BUFFER ADDRESS+INDEX LDK A4,1 RESET COUNTER NEXT ADK A4,1 INCREMENT COUNTER SUK A1,1 END OF BUFFER? RF(NP) OUT YES! ADK A2,1 INCREMENT POINTER CCR A7,A2 CHAR EQU TO PREVIUS? RB(E) NEXT YES! OUT EQU * CWK A4,EQU CONDITION FOR FAST OUTPUT FULLFILLED? RF(L) NOFAST NO! ********************************** * UPDATE ACTUAL POSITION POINTER * FASTOK LC A2,DWTBC,A6 GET HEAD POSITION AD A2,DWTAP,A6 ANK A2,/FF ADR A3,A4 UPDATE BUFFER-INDEX ST A3,DWTBIN,A6 SAVE INDEX LC A3,DWTPOS,A6 GET MAXNUMBER OF CHAR/LINE SUR A3,A2 AND COMPARE SUR A3,A4 RF(NN) HIT ADR A4,A3 ADK A4,1 HIT ADS A4,DWTST,A6 UPDATE POSITION *********************** * EXECUTE FAST OUTPUT * LDR A3,A7 GET CHAR TO SEND CF A5,FASTER ************** * SET CURSOR * LD A4,DWTST,A6 GET ACTUAL POS ANK A4,/FF AD A4,DWTAP,A6 INC HEAD POS POINTER CF A5,CURPOS ***************************** * RESTORE A3 (BUFFER INDEX) * LD A3,DWTBIN,A6 RESTORE BUFFER INDEX SUK A3,1 ABL ACDY90 READ NEXT CHAR * NOFAST LDR A2,A7 RESTORE OUTPUT CHARACTER ABL ACDY75 EJECT * * * FASTER = SUBROUTINE TO OUTPUT SPACE AT FAST OUTPUT * AT ENTRY A4 = NUMBER OF CHARACTERS * FASTER EQU * CWK A4,/60 RF(L) FAS010 NUMBER OF CHAR NOT TOO LONG LDK A4,/59 FAS010 EQU * ADK A4,/20 ADD CONSTANT LDK A2,FASTO FAST OUTPUT CF A5,OUTPUT SEND LDR A2,A4 NO OF CHAR CF A5,OUTPUT SEND LDR A2,A3 CF A5,OUTPUT SEND RTN A5 EJECT * * * CURPOS = SUBROUTINE TO SET CURSOR * AT ENTRY A4 = CURSOR POS (POSITION AND LINE) * CURPOS EQU * ADKL A4,/1F1F CONVERT LDK A2,SCADD SET CURSOR CF A5,OUTPUT SEND ECR A2,A4 POS. X < /80? LDR A2,A2 RF(NN) CURR05 YES! LCK A4,/7F00 CURR05 EQU * LDR A2,A4 CF A5,OUTPUT OUTPUT POSITION (X) LDR A2,A4 RF(NN) CURR10 Y < /80! LDK A2,/7F RF CURR15 CURR10 EQU * SRL A2,8 SHIFT RIGHT CURR15 EQU * CF A5,OUTPUT OUTPUT LINE(Y) RTN A5 EJECT * =2 * =2 * =2 * ERA - SUBROUTINE TO AVOID UNNECESSARY OUTPUT =2 * =2 * =2 * AT ENTRY A4 = CHAR TO ERASE FROM USER =2 * AT EXIT A4 = CHAR TO END OF SCREEN =2 * =2 ERA EQU * =2 LD A2,DWTPOS,A6 MAX CHAR. =2 ANK A2,/FF GET MAX CHAR. =2 LC A3,DWTAP+1,A6 CURRENT POS. ON SCREEN =2 ANK A3,/FF =2 SUR A2,A3 NUMBER OF CHAR. TO END OF SCREEN =2 ADK A2,1 ADJUST LENGTH =2 CWR A4,A2 OUTSIDE SCREEN =2 RF(L) ERAEND NO =2 LDR A4,A2 OUTSIDE SCREEN MODIFY LENGTH =2 LDKL A3,/FFFF SET OVER =4 ERAEND EQU * END SUBROUTINE =2 RTN A5 RETURN =2 ABDY EQU * CF A15,UPDAPP UPDATE CURSOR POSITION =5 RTN A15 RETURN TO ABORT ROUTINE =5 END