|
|
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: 24820 (0x60f4)
Notes: pts_type(SC)
Names: »DRKB01.SC«
└─⟦781e933ac⟧ Bits:30009686 Philips computer tape "600310"
└─⟦this⟧ »M:92T1/DRKB01.SC«
IDENT DRKB01 9.2DK 1 79-11-16 870105040920 =DK1, TIME OUT =2400 80-03-11 * * ******************************************* * * PHILIPS TERMINAL SYSTEM PTS * * DRKB01 = DRIVER KEYBOARD * * * * * * ******************************************* * * * THIS DRIVER HANDLES INPUT FROM NUMERIC * AND ALPHANUMERIC KEYBOARDS PTS 6231, * 6232, 6233, 6234, 6331,AND 6342 * CONNECTED TO CPU VIA CHLT OR CHRT. * * ONLY INPUT DATA FROM DEPRESSED KEYS * ARE HANDLED BY THE DRIVER. * * AN ECHO-DEVICE CAN BE ATTACHED TO EVERY * KEYBOARD WHERE RECEIVED CHARACTERS ARE * ECHOED. * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C K B : ACTIVATION PART * * I H K B : INTERRUPT HANDLER * * E C H O : ECHO HANDLER * * R C K B : RECOVERY ROUTINE * EJECT * * * THE FOLLOWING ORDERS ARE THREATED: * * ORDER 01: BASIC READ * ORDER 02: STANDARD READ * ORDER 03: NUMERIC READ * ORDER 04: RESET INPUT BUFFER * * * NORMAL REGISTER USAGE : * * REGISTER A1 : RETURN CODE * A2 : INPUT CHARACTER * A3 : BUFFER INDEX * A4 : WORK REGISTER * A5 : STACK BASE * A6 : DWT-ADDRESS * A7 : ORDER * A8 : ECB-ADDRESS * EJECT * * * SYSTEM ADAPTATION * * KEYBOARD TYPE MUST BE DEFINED IN FIRST WORD * IN DWT. BIT 10 IS RELEVANT FOR ALPHANUMERIC READ * AND BIT 11 FOR NUMERIC READ. * * BIT 10 = 0 FOR PTS 6231, 6233, 6234 * BIT 10 = 1 FOR PTS 6232, 6331 AND 6342 * BIT 11 = 0 FOR ALL KEYBOARDS BUT PTS 6342 AND 6234 * BIT 11 = 1 FOR PTS 6234,6342 * * CODES FOR SPECIAL CHARACTERS CLEAR, BACKSPACE, * MULTIPLE ZERO AND STANDARD EOR MUST BE DEFINED * IN DWT. * * DWT-ADDRESS OF ECHO-OUTPUT-DEVICE MUST BE * DEFINED IN DWT. * * IF TIMING IS WANTED, TIMER POINTER * IN DWT MUST BE SET UNEQUAL TO ZERO. * STANDARD VALUE FOR TIME-OUT IS 30 SECONDS * SINCE LAST DEPRESSED KEY. IF ANOTHER VALUE * IS WANTED FOR A SYSTEM, INDICATOR * IN DRIVER MUST BE CHANGED. * * THE LENGTH OF THE CIRCULAR INPUT BUFFER IS * DEFINED IN DWT. STANDARD VALUE IS 7 CHARACTERS * NOTE !!! THAT LENGTH MUST BE THE SAME FOR ALL * DWT:S IN SYSTEM EJECT * * BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE * TO EXCLUDE FROM THE DRIVER FOLLOWING FUNCTIONS: * * -----ECHO-FUNCTION * -----STANDARD READ * -----TIME-OUT-FUNCTION * -----CODE CONVERSION VIA "8-BIT" SETTING * AND CONVERSION TABLES * BY MEANS OF CONDITIONAL ASSEMBLY IT IS ALSO * POSSIBLE TO GIVE A KEY THE MEANING OF TWO, * THREE OR MORE ZEROES. * * THE DRIVER IS PREPARED TO HANDLE THE SPECIAL * NORWAY-PROBLEM, WITH BETWEEN THEMSELVES * DEPENDENT KEYBOARDS CONNECTED TO THE SAME * SELECTOR UNIT. * BY ASSEMBLING THE DRIVER CONDITIONALLY THIS * FUNCTION IS INCLUDED. EJECT * * ************** * ENTRIES * ************** * ENTRY KBAD ADDRESS-BLOCK ENTRY EOQUEU QUEUE POINTER ROUTINE ENTRY DWTINQ,DWTUTQ QUEUE POINTERS * * * ********************************************** * EXTERNAL TOSS MODULE ENTRIES * ********************************************** * EXTRN DISIOE I/0 REQUEST ERROR EXTRN DISEND END I/O AND GO TO DISPATCHER EXTRN TENDIO END I/O EXTRN TDISP DISPATCHER ENTRY EXTRN LDREG LOAD REGISTERS A2,A3,A5,A7,A8 AND RETURN EXTRN STREG STORE REGISTERS AND GO TO DISPATCHER EXTRN LDREGE RETURN FROM ECHO HANDLING EXTRN LDREGF EXTRN SETIME SET TIME EXTRN SETIMP SET TIME EXTRN SAVE8 SAVE 8 REGISTERS EXTRN ECHRTN RETURN FROM ECHO EXTRN ECHO ECHO ROUTINE EXTRN ECHEND END OF ECHO * EJECT * ************************* * DWT PARAMETERS * ************************* * EXTRN DWTST STATUS EXTRN DWTBC BYTE COUNTER EXTRN DWTADR DRIVER ADDRESS BLOCK EXTRN DWTA3 SAVE AREA A3 EXTRN DWTA4 SAVE AREA A4 EXTRN DWTA5 SAVE AREA A5 EXTRN DWTSB2 STACK BASE 2 IN DWT EXTRN DWTTP TIMER POINTER EXTRN DWTWAT SAVE INPUT DWT * *************** * CONSTANTS * *************** * OVMASK EQU /2 OVERFLOW IN INPUT BUFFER * X:F EQU 8 LENGTH OF CIRCULAR INPUT BUFFER DWTLNG EQU 10 NUMBER OF BYTES IN DECIMAL FORM * * TIME BEFORE TIME-OUT * TIME EQU 2400 TIME OUT CONSTANT (FROM 300) DK1 * EJECT * * **************************************** * CONDITIONAL ASSEMBLY * **************************************** * * TIME OUT FUNCTION MAY BE EXCLUDED BY * SETTING X:A = 0. * X:A EQU 0 CTIMUT EQU 0 * * ECHO FUNCTION MAY BE EXCLUDED BY * SETTING X:B = 0. * X:B EQU 1 CECHO EQU 1 * * STANDARD READ MAY BE EXCLUDED BY * SETTING X:C = 0. * X:C EQU 1 CSTAND EQU 1 * * DOUBLE ZERO MAY BE INCLUDED IN SYSTEM * BY SETTING X:D = 2. SETTING X:D * = 3 GIVES A THREE ZERO FUNCTION AND * X:D = 4 GIVES FOUR-ZERO FUNCTION AND SO ON * X:D = 0 EXCLUDES THE MULTIPLE ZERO FUNCTION * X:D EQU 2 CMULTZ EQU 2 * EJECT * * BY SETTING X:E = 1 FOLLOWING POWER OFF FUNCTION * CAN BE INCLUDED IN THE DRIVER. * IF THERE IS A READ REQUEST, THIS IS COMPLETED WITH -2 * SET IN THE CONTROL WORD OF ECB. IF NOT A POWER OFF FLAG * IS SET, CAUSING THE FIRST READ REQUEST AFTER POWER ON TO * BE COMPLETED WITH CONTROL WORD SET TO -2. * X:E EQU 0 POWOFF EQU 1 ** ** * BY SETTING X:G TO 1 THE CODE CONVERSION VIA * "8-BIT" SETTING AND CONVERSION TABLES IS * INCLUDED IN THE DRIVER. ** X:G EQU 0 CONVER EQU 1 * * * THIS DRIVER CAN BE MADE TO HANDLE CREDIT ORDERS * BY SETTING CREDIT = 1 * ORDER /04 IS THEN REPLACED BY ORDER /31 * BY SETTING CREDIT=1 THIS DRIVER INDEX THE EOR-KEYS * IN THE FOLOWING WAY: THE FIRST KEY IN THE EOR-KEY-TABLE * IS GIVEN INDEX =1, THE SECOND EOR-KEY IS GIVEN INDEX=1 * AND SO ON. (INDEX= 1,2,3,4,... ) * CONTROL WORD OF ECB IS SET TO ZERO INSTED OF -2 * * CREDIT EQU 0 * * BY SETTING NOLJE=1 THIS DRIVER IS PREPARED * TO HANDLE THE NORWAY-CASE WITH BETWEEN * THEMSELVES DEPENDENT KEYBOARDS ON THE * SAME SELECTOR UNIT. * NOLJE EQU 0 * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 0 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 1 * * * MMU BUFFER SIZE * * X:J EQU 10 DVBLEN EQU 000 * * * MMU KEY TABLE SIZE * * X:K EQU 10 DVBKTB EQU 00 * 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 * DWTCON EQU START+/00 CONVERSION TABLE DWTINQ EQU START+/18 POINTER TO FIRST PLACE IN QUEUE DWTUTQ EQU START+/1A POINTER TO LAST PLACE IN QUEUE DWTSQ EQU START+/1C START OF QUEUE DWTEQ EQU DWTSQ+DWTLNG END OF QUEUE * ***************************************** * SPECIAL KEYS DEFINED IN DWT * ***************************************** * KBBSP EQU START+/14 BACK-SPACE CHARACTER KBCLR EQU START+/15 CLEAR CHARACTER KBEOF EQU START+/16 EOR-CHARACTER KBMZ EQU START+/17 DOUBLE ZERO CHARACTER * EJECT * * ************** * TABLES * ************** * DATA DVBKTB KEY TABLE SIZE DATA DVBLEN MMU BUFFER SIZE DATA 6 DEVICE INDEX KBAD EQU * DATA ACKB ACTIVATION DRIVER DATA 0 ABORT ROUTINE ADDRESS DATA IHKB INTERRUPT HANDLER * IFF POWOFF=1 * DATA 0 NO RECOVERY * XIF * * IFT POWOFF=1 * DATA RCKB RECOVERY ROUTINE EJECT * * * R C K B * * THIS IS THE RECOVERY ROUTINE FOR KEYBOARD * ENTERED FROM CHLT/CHRT DRIVER * RCKB EQU * IFT CPU852=1 CF A15,SAVE8 SAVE A1-A8 ON STACK XIF * IFT POWOFF=1 IFT CPU852=0 MSR 8,A15 SAVE A1-A8 ON STACK XIF * IFT POWOFF=1 LD A3,DWTST,A6 BUSY ? RF(NN) RCKB10 LDKL A1,/200 ORS A1,DWTST,A6 INDICATE POWER OFF OCCURED ABL TDISP RCKB10 CF A5,LDREGE LOAD REGISTERS RF AKB202 * XIF * EJECT * * * A C K B * * ACTIVATION PART: * * CHECKS VALIDITY OF ORDERS AND EXAMINES * INPUT BUFFER TO SEE IF SOME QUEUED * TO THREAT. * * ACKB EQU * LDKL A1,/FEFF ANS A1,DWTST,A6 RESET INTERRUPTS ALLOWED FLAG LDK A1,0 LDK A3,0 START BUFFER INDEX LDR A4,A7 RF(NG) AKB100 ILLEGEAL ORDER IFT NOLJE=1 CWK A7,/37 SELECT KEYBOARD RF(E) AKBSEL XIF IFT CSTAND=0 SUK A4,2 RF(Z) AKB100 STANDARD READ NOT ALLOWED ADK A4,2 XIF SUK A4,4 IFT CREDIT=1 SUK A4,/2D RF(Z) CRE:10 SKIP INPUT BUFFER ADK A4,/2D CRE:10 EQU * XIF RF(Z) AKB110 ORDER 4 RF(N) AKB200 ORDER 1,2 OR 3 AKB100 ORKL A1,/8000 I/O REQUEST ERROR ABL ENDI10 EJECT * * * ORDER 4 RESET INPUT BUFFER * AKB110 LD A2,DWTINQ,A6 ORDER 4 SCR A1,A2 RESET OVERFLOW IF OCCURED ST A2,DWTUTQ,A6 RESET OUTPUT QUEUE ABL ENDI05 END I/O IFT NOLJE=1 * * * ORDER 37 SELECT KEYBOARD * AKBSEL LDKL A2,/FF7F ANRS A2,A6 RESET ALLOW BITS IN DWTCHP ABL ENDI10 XIF EJECT * * * ORDER 1 2 3 * * AKB200 EQU * * IFT POWOFF=1 * LD A2,DWTST,A6 ANKL A2,/200 POWER OFF ? RF(E) AKB205 XRS A2,DWTST,A6 RESET BIT XIF AKB202 EQU * IFT CREDIT-POWOFF=-1 LDKL A1,-2 INDICATE POWER ON ST A1,10,A8 XIF IFT CREDIT+POWOFF=2 CM 10,A8 INDICATE POWER ON XIF IFT POWOFF=1 ABL AKB380 * XIF * AKB205 EQU * * IFT CTIMUT=1 * LDR* A1,A6 ANK A1,/40 TIMING ? RF(E) AKB210 NO TIMING FOR THIS DEVICE LD A4,DWTTP,A6 RF(E) AKBTIM LDKL A4,-TIME ST* A4,DWTTP,A6 RF AKB210 AKBTIM EQU * LDKL A4,DWTTP TIMER POINTER ADR A4,A6 ADD DWT-ADDRESS LDR A1,A6 CF A15,SETIMP SET TIME DATA AKBTUT,TIME TIME OUT ROUTINE AND TIME ST A4,DWTTP,A6 STORE TIMER ADDRESS IN DWT * XIF * AKB210 LD A2,4,A8 REQUESTED LENGTH AKB220 RF(E) AKB380 RESET A1 AND END I/O LDR A3,A3 FIRST TIME ? RF(NE) AKB240 NO LD A1,2,A8 BUFFER ADDRESS SUK A1,1 ADR A1,A2 ADDRESS IN BUFFER AKB230 SCR A3,A1 STORE CHARACTER SUK A1,1 NEXT CHAR. POSITION SUK A2,1 LAST ? RB(NE) AKB230 NO EJECT * * READ CHARACTER FROM INPUT BUFFER OR * WAIT FOR KEY-BOARD INTERRUPT * AKB240 EQU * LD A1,DWTUTQ,A6 LCR A2,A1 CHAR. TO A2 LDR A4,A2 XRK A4,/FF OVERFLOW ? RF(NE) AKB250 SCR A4,A1 RESET OVERFLOW MARK LDK A1,OVMASK OVERFLOW SET RF ENDIO AKB250 CW A1,DWTINQ,A6 SOMETHING IN QUEUE? RF(NE) AKB260 CF A5,STREG NOTHING IN QUEUE IFT CTIMUT=1 LDR A1,A1 CHECK TIME OUT RETURN CODE RF(Z) AKB270 NO TIME-OUT RF ENDI05 END I/O AT TIME OUT XIF IFT CTIMUT=0 RF AKB270 XIF AKB260 CF A15,EOQUEU NEXT OUT QUEUE POINTER ST A1,DWTUTQ,A6 STORE NEW POINTER AKB270 LDR A4,A7 SUK A4,2 RF(NN) AKB310 ORDER 2 OR 3 EJECT * * * ORDER 1 BASIC READ * CF A15,STORE STORE CHARACTER IN ECB-BUFFER IFT CECHO=1 CF A5,ECHO ECHO INPUTTED CHARACTER XIF CW A3,4,A8 EFFECTIVE LENGTH = REQ. LENGTH? RB AKB220 EJECT * * * ORDER 2 OR 3 STANDARD AND NUMERIC READ * * CHECK IF READ CHARACTER IS FOUND IN KEY-TABLE * * AKB310 LD A1,10,A8 KEY-TABLE ADDRESS RF(Z) AKB359 NO KEYTABLE LCR A4,A1 TABLE LENGTH IN A4 ANK A4,/FF ADR A1,A4 LAST PLACE IN KEY-TABLE ADK A1,1 AKB355 SUK A4,1 RF(N) AKB360 KEY NOT FOUND IN KEY-TABLE SUK A1,1 NEXT KEY CCR A2,A1 EOR-CHARACTER? RB(NE) AKB355 NO IFT CREDIT=0 ADR A4,A4 YES DOUBLE INDEX XIF IFT CREDIT=1 ADK A4,1 INDEX STARTS AT ONE,INCR=1 XIF ST A4,10,A8 STORE INDEX IN CONTROLWORD AKB358 CF A15,STORE STORE CHARACTER RF AKB370 * * AKB359 CC A2,KBEOF,A6 STANDARD END OF RECORD KEY RB(E) AKB358 YES EJECT * * CHARACTER NOT FOUND IN KEY-TABLE. * CHECK CHARACTER CODE. * AKB360 EQU * CF A5,CHEK CHECK CHARACTER LDR* A4,A6 GET CHANNEL PARAMETER ANK A4,/20 SHIFT BIT 9 ? RF(E) AKB361 YES LDR A4,A2 CHARACTER RF AKB363 AKB361 EQU * LDR* A4,A6 ANK A4,/10 PTS 6234 ? RF(E) AKB362 LDR A4,A2 ANK A4,/80 RF(NE) AKB362 LDR A4,A2 RF AKB363 AKB362 EQU * LDR A4,A2 CHARACTER ANK A4,/BF RESET BIT 9 AKB363 EQU * IFF CMULTZ=0 CC A4,KBMZ,A6 MULTIPLE ZERO ? RF(E) KBMZ10 YES! XIF CC A4,KBCLR,A6 CLEAR? RF(E) KBCL10 CC A4,KBBSP,A6 BACKSPACE? RF(E) KBSP10 LDR A1,A1 RETURN CODE? RF(NE) AKB369 YES,STORE AND END I/O CF A15,STORE AKB365 EQU * IFT CECHO=1 CF A5,ECHO ECHOCHARACTER XIF CW A3,4,A8 LENGTH OVERFLOW? RB(L) AKB210 NO AKB368 LDK A1,8 SET RETURN CODE RF ENDIO AND END I/O AKB369 CF A15,STORE STORE CHARACTER IN ECB BUFFER RF ENDIO END I/O REQUEST EJECT * * * CHECK CODE OF END OF RECORD KEY * * AKB370 EQU * IFT CECHO=1 CF A5,CHEK CHECK CHARACTER ORK A2,/80 INDICATE END OF RECORD LDR A1,A1 RETURN CODE? RF(NE) AKB380 CF A5,ECHO ECHO CHARACTER * XIF * AKB380 LDK A1,0 RETURN CODE EJECT * * * THIS IS A COMMON END OF THE DRIVER * * SET EFFECTIVE LENGTH AND PERFORM END I/O * ON KEYBOARD AND ECHO-DEVICE * * ENDIO EQU * * IFT CTIMUT=1 INH LD A4,DWTTP,A6 RF(E) ENDI05 NO TIMING ON THIS DEVICE CM* DWTTP,A6 RESET TIMER CM DWTTP,A6 XIF * ENDI05 ST A3,6,A8 STORE EFFECTIVE LENGTH ENDI10 EQU * * IFT CECHO=1 LDR A4,A1 SAVE A1 CF A5,ECHEND END I/O ON ECHO DEVICE LDR A1,A4 RESTORE A1 XIF * ABL DISEND END I/O ON KEYBOARD AND DISPATCH EJECT * * MULTIPLE ZERO * IFF CMULTZ=0 KBMZ10 EQU * LDK A4,CMULTZ LOAD NUMBER OF ZEROES KBMZ20 LDK A2,/30 ZERO TO STORE AND ECHO SUK A4,1 RB(L) AKB240 ALL DONE LDR A1,A4 SAVE A4 CF A15,STORE STORE ZOERO IN ECB-BUFFER LDR A4,A1 RESTORE A4 * IFT CECHO=1 * CF A5,ECHO ECHO ZERO XIF * * IFF CMULTZ=0 * CW A3,4,A8 LENGTH OVERFLOW ? RB(L) KBMZ20 NO KBMZ25 SUK A4,1 ANY MORE ZEROES TO STORE ? RB(L) AKB368 NO INH LD A1,DWTUTQ,A6 GET OUTQUEUE POINTER SUR A1,A6 CWK A1,DWTSQ FIRST POSITION ? RF(NE) KBMZ30 NO LDK A1,DWTEQ GET LAST POSITION IN QUEUE ADR A1,A6 SUK A1,1 RF KBMZ40 KBMZ30 ADR A1,A6 GET PREIOUS POINTER POSITION SUK A1,1 KBMZ40 CW A1,DWTINQ,A6 ANY SPACE LEFT ? RF(E) KBMZ90 NO NOT REALY. ST A1,DWTUTQ,A6 STORE NEW OUTQUEUE POINTER LDK A2,/30 STORE ZERO IN CIRKULAR SCR A2,A1 INPUT BUFFER RB KBMZ25 ONCE MORE TIME !! KBMZ90 EQU * LDK A4,/FF INDICATE BUFFER OWERFLOW SCR A4,A1 ST A1,DWTUTQ,A6 UPPDATE POINTER LDK A1,/A SET RETURN CODE FOR BOTH RB ENDIO LENGTH AND THRUGHPUT ERRORS XIF * * CLEAR * KBCL10 LDK A3,0 RESET BUFFER INDEX LDK A2,/18 CHANGE CHARACTER-CODE RB AKB365 * * BACKSPACE * KBSP10 LDR A3,A3 FIRST CHARACTER? RF(Z) KBSP15 SUK A3,1 DECREMENT BUFFER INDEX LDK A2,/00 CLEAR ECB-BUFFER CF A15,STORE SUK A3,1 DECREMENT INDEX KBSP15 LDK A2,/8 CHANGE CHARACTER-CODE RB AKB365 EJECT * * C H E K * * * SUBROUTINE TO CHECK INPUT CHARACTER * * ON ENTRY: * * A2 = CHARACTER * A3 = BUFFER INDEX * A6 = DWT-ADDRESS * A7 = ORDER * * * ON EXIT: * * A1 = RETURN CODE * CHEK EQU * STR A2,A15 SAVE A2 ON STACK ANK A2,/FF LDR* A1,A6 CHANNEL PARAMETER * IFT CSTAND=1 * CWK A7,2 ORDER 2? RF(NE) CHEK05 NO ANK A1,/20 ORK A1,/5F 5F OR 7F AS UPPER LIMIT LDK A4,/20 LOWER LIMIT RF CHEK08 * XIF * CHEK05 ANK A1,/10 RF(NE) CHEK06 ANK A2,/3F RESET BIT 9 CHEK06 LDK A1,/39 UPPER LIMIT LDK A4,/30 LOWER LIMIT CHEK08 SUR A1,A2 RF(N) CHERRO CODE CHECK ERROR SUR A4,A2 RF(P) CHERRO CODE CHECK ERROR LDR* A1,A15 CHEK10 LDK A1,0 RETURN CODE CHEK20 RTN A5 * * * CODE CHECK ERROR * CHERRO LDK A1,4 SET RETURN CODE AND RETURN LDR* A2,A15 RELOAD CHARACTER RB CHEK20 EJECT * * * I H K B * * THIS IS THE INTERRUPT HANDLER ENTERED FROM CHLT/CHRT DRIVER * * IHKB EQU * IFT NOLJE=1 LDR* A3,A6 GET ALLOW BITS ANK A3,/C0 RF(E) IHNOL3 INPUT ALLOWED FROM BOTH KEYBOARDS LDK A4,1 ANK A3,/80 RF(E) IHNOL1 LDK A4,5 IHNOL1 LDR A3,A2 SRL A3,12 CWR A3,A4 RF(NE) EXIT IHNOL2 EQU * XIF * IFT CONVER=1 * LDR A4,A2 INPUT WORD SRL A4,11 DEVICE ADDRESS * 2 ANK A4,/E CC A4,DWTBC,A6 8-BIT SETTING ? RF(NE) IHKB03 LDR A3,A2 ANK A3,/3F SUK A3,/30 RF(N) IHKB01 SUK A3,/A RF(N) IHKB02 IHKB01 ORK A2,/80 RF IHKB04 IHKB02 ANKL A2,/FF3F RF IHKB04 IHKB03 LD A3,DWTCON,A6 CONVERSION TABLE ADDRESS RF(E) IHKB04 LDR A4,A2 ANK A4,/FF SRL A4,3 LINE INDEX ADR A3,A4 LDR* A3,A3 COLUMN TABLE ADDRESS RF(E) IHKB04 LDR A4,A2 ANK A4,/F ADR A3,A4 ADD ROW INDEX LCR A2,A3 GET CHARACTER IHKB04 EQU * * XIF * * IFT NOLJE=1 * LDR A3,A2 ANK A3,/3F SUK A3,/22 RF(Z) IHNOL6 SUK A3,1 RF(NZ) IHNOL8 RF IHNOL7 IHNOL6 ADK A2,7 IHNOL7 ANKL A2,/FF3F IHNOL8 EQU * * XIF * LD A3,DWTST,A6 I/O REQUEST? RF(N) IHKB10 SLL A3,7 INTERRUPTS ALLOWED? RF(NN) IHKB10 NO,STORE CHARACTER IN DWT-BUFFER * IFT CTIMUT=1 * LD A3,DWTTP,A6 RF(E) IHKB05 NO TIMING ON THIS DEVICE LDKL A3,-TIME RESTART TIME ST* A3,DWTTP,A6 * XIF * IHKB05 ABL LDREG RETURN TO READ ROUTINE IHKB10 LD A1,DWTINQ,A6 LCR A4,A1 XRK A4,/FF ALREADY OVERFLOW ? RF(E) EXIT YES LDR A3,A1 CF A15,EOQUEU GET NEXT QUEUE POINTER ADDRESS CW A1,DWTUTQ,A6 OVERFLOW? RF(NE) IHKB20 NO! ORK A2,/FF SET OVERFLOW BIT IN INPUT BUFFER RF IHKB30 IHKB20 ST A1,DWTINQ,A6 STORE INQUEUE POINTER IHKB30 SCR A2,A3 STORE CHARACTER IN INPUT BUFFER EXIT ABL TDISP IFT NOLJE=1 IHNOL3 LDR A3,A2 SRL A3,12 LDK A4,/40 SUK A3,1 RF(E) IHNOL4 LDK A4,/80 SUK A3,4 RB(NE) IHNOL2 IHNOL4 ORRS A4,A6 SET ALLOW BIT RB IHNOL2 XIF EJECT * * * A K B T U T * * THIS IS THE TIME-OUT ROUTINE * * IFT CTIMUT=1 * AKBTUT EQU * LDR A6,A1 GET DWT-ADDRESS CM DWTTP,A6 LD A1,DWTST,A6 RB(N) EXIT LDK A1,/40 SET RETURN CODE RB IHKB05 RESTORE REGISTERS AND END I/O * XIF EJECT * * STORE = SUBROUTINE TO STORE A CHARACTER IN * ECB-BUFFER AND INCREMENT BUFFER INDEX * * ON ENTRY: * * A2 = CHARACTER TO STORE * A3 = BUFFER INDEX * * STORE EQU * LD A4,2,A8 BUFFER ADDRESS ADR A4,A3 ADD BUFFER INDEX SCR A2,A4 STORE CHARACTER IN BUFFER ADK A3,1 INCREMENT BUFFER INDEX ANK A2,/7F RF EOQU20 RTN A15 AND ENB EJECT * * * EOQUEU = SUBROUTINE TO GET NEXT QUEUE POINTER * * ON ENTRY: * * A1 = QUEUE POINTER * A6 = DWT-ADDRESS * * ON EXIT: * * A1 = NEW QUEUE POINTER EOQUEU EQU * INH ADK A1,1 SUR A1,A6 CWK A1,DWTEQ END OF QUEUE? RF(NE) EOQU10 LDK A1,DWTSQ SET QUEUE START ADDRESS EOQU10 ADR A1,A6 EOQU20 ADKL A15,2 RETURN AND ENABLE ENB LDR* P,A15 * END