|
|
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: 23628 (0x5c4c)
Notes: pts_type(SC)
Names: »DRKB03.SC«
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
└─⟦this⟧ »MODMON/DRKB03.SC«
IDENT DRKB03 REL 9.2 79-11-16 870105040920 * ******************************************* * * PHILIPS TERMINAL SYSTEM PTS * * DRKB01 = DRIVER KEYBOARD * * * * * * ******************************************* * * * THIS DRIVER HANDLES INPUT FROM NUMERIC * AND ALPHANUMERIC KEYBOARDS PTS 6236, * CONNECTED TO CPU VIA CHLT OR CHRT. * * ONLY INPUT DATA FROM DEPRESSED KEYS AND KEY-LOCKS * 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 31: 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 * * * * SYSTEM ADAPTATION * * 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 * -----POWER ON INDICATION * -----TIME-OUT-FUNCTION * -----NUMERIC SHIFT-FUNCTION * -----KEYBOARD LOCK IF NO KEYLOCK ON * * ENTRIES * * ENTRY KBAD3 ADDRESS-BLOCK * * * * EXTERNAL TOSS MODULE ENTRIES * * * EXTRN DISIOE I/O 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-A8 AND RETURN EXTRN STREG STORE REGISTERS AND GO TO DISPATCER EXTRN LDREGE RETURN FROM ECHOE HANDLING EXTRN LDREGF PANIK EXTERN 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 ECHOING * * * * DWT PARAMETERS * * * EXTRN DWTCHP CHANEL PARAMETER 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 DWTECH ECHO DEVICE DWT EXTRN DWTTP TIMER POINTER EXTRN DWTWAT SAVE INPUT DWT EJECT * * * * CONSTANTS * * * OVMASK EQU /2 OVERFLOW IN INPUT BUFFER * X:F EQU 20 LENGTH OF CIRCULAR INPUT BUFFER DWTLNG EQU 30 NUMBER OF BYTES IN DECIMAL FORM * * * TIME BEFORE TIME OUT * TIME EQU 300 TIME OUT CONSTANT * 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 0 * * BY SETTING X:E = 1 THE FOLOWING POWER OFF FUNCTION * IS INCLUDED IN THE DRIVER. * IF THERE IS A READ REQUEST THIS IS COMPLETED WITH * ZERO IN THE CONTROL WORD OF ECB. * IF THERE IS NO READ REQUEST , THE FIRST READ REQUEST * AFTER POWER ON IS COMPLETED WITH ZERO IN CONTROL WORD * OF ECB * * X:E EQU 0 POWOFF EQU 1 * * * * BY SETTING X:H = 1 THE KEY A15IS USED AS A NUMERIC SHIFT ON KB 71/72 X:H EQU 0 NSHIFT EQU 1 * * * BY SETTING X:I = 1 KEYBOARD IS LOCKED IF NO KEYLOCK ON. X:I EQU 0 KBLOCK EQU 1 * * * A PROGRAM VERSION USING TOSS MMU PAGING * IS OBTAINED BY SETTING MMUPAG EQU 1. * MMUPAG EQU 1 * * * A PROGRAM VERSION USING THE EXTENDED INSTRUCTION * SET IS OBTAINED BY SETTING CPU852 EQU 0. * CPU852 EQU 0 * * * MMU BUFFER SIZE * * X:J EQU 10 DVBLEN EQU 030 * * * MMU KEY TABLE SIZE * * X:K EQU 10 DVBKTB EQU 30 * 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 KBMZ2 EQU START+/17 DOUBLE ZERO CHARACTER KBMZ3 EQU START+/16 * EJECT * TABLES * * DATA DVBKTB MMU KEY TABLE SIZE DATA DVBLEN MMU BUFFER SIZE DATA 6 DEVICE INDEX * KBAD3 EQU * DATA ACKB ACTIVATION HANDLER DATA 0 ABORT ROUTINE ADDRESS DATA IHKB INTERRUPT HANDLER IFT POWOFF=1 DATA RCKB RECOVERY ROUTINE XIF IFT POWOFF=0 DATA 0 NO RECOVERY XIF * IFT POWOFF=1 EJECT * RCKB * * RECOVERY PART * * 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 ABL TDISP RCKB10 CF A5,LDREGE LOAD REGISTERS RF AKB202 XIF EJECT * * * ACKB * * ACTIVATION PART: CHECS VALIDITY OF ORDERS AND * * EXAMINES INPUT BUFFER TO SEE IF SOME QUEUED CHARACTER * * TO THREAT * * * * ACKB EQU * LDKL A1,/FEFF ANS A1,DWTST,A6 RESET INETRRUPT ALLOWED FLAG LDK A1,0 LDK A3,0 START BUFFER INDEX LDR A4,A7 RF(NG) AKB100 ILLEGAL ORDER SUK A4,4 RF(N) AKB200 ORDER 1,2 OR 3 SUK A4,/2D RF(Z) AKB110 ORDER 31 AKB100 ORKL A1,/8000 I/0 REQUEST ERROR ABL ENDI10 EJECT * * * * ORDER 31 RESET INPUT BUFFER * * * AKB110 EQU * LD A2,DWTINQ,A6 SCR A1,A2 ST A2,DWTUTQ,A6 RESET OUTPUT QUEUE ABL ENDIO * EJECT * * * ORDER 1,2,3 * * * AKB200 EQU * IFT POWOFF=1 LD A2,DWTST,A6 ANKL A2,/200 POWER OFF? RF(E) AKB205 NO! XRS A2,DWTST,A6 RESET POWER OFF BIT AKB202 EQU * CWK A7,1 IF BASIC READ DON'T COMPLEATE THE REQUEST RF(E) AKB205 CM 10,A8 INDICATE POWER OFF RF AKB218 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 CHECK IF ALREADY TIMING 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 * EJECT * IF ANY KEY-LOCK: * * RESET "CHANGED-KEY" FLAG AND MAKE KEY-CHARACTER * OF FLAG. STORE KEY-CHARACTER IN ECB-BUFFER. * IN CASE OF STANDARD OR NUMERIC READ MAKE ECB-CODE * AND END I/O. ELSE CONTINUE. * * AKB210 EQU * LD A2,DWTST,A6 ANY KEY-LOCK? ANK A2,/F RF(Z) AKB219 SLL A2,1 SRN A2,A4 LDR A1,A4 CWK A4,3 RF(N) AKB212 RF(P) AKB211 ADK A4,1 RF AKB212 AKB211 ADR A4,A4 AKB212 XRS A4,DWTST,A6 RESET OLD KEY-FLAG LDR A2,A4 SLL A4,4 AN A4,DWTST,A6 STR A4,A15 SAVE A4 STR A3,A15 SRN A2,A3 ORDER 1 ADR A3,A3 MAKE CHARACTER FLAG LDR A4,A4 RF(NE) AKB213 ADK A3,1 AKB213 ADK A3,/70 LDR A2,A3 LDR* A3,A15 CF A15,STORE STORE KEY IN ECB BUFFER LDR* A4,A15 RESTORE A4 CWK A7,1 RF(E) AKB307 JUMP IF BASIC READ AKB214 NGR A2,A1 MAKE ECB CODE LDR A4,A4 KEY FLAG RF(E) AKB215 SUK A2,4 AKB215 ST A2,10,A8 KEY-LOCK CODE IN ECB AKB218 ABL AKB380 AKB219 LD A2,4,A8 REQUESTED LENGTH=0 AKB220 ABL(E) AKB380 AKB225 LDR A3,A3 FIRTST RIME? RF(NE) AKB240 N0! LD A1,2,A8 BUFFER ADDRESS SUK A1,1 ADR A1,A2 AKB230 SCR A3,A1 CLEAR ECB BUFFER SUK A1,1 SUK A2,1 RB(NE) AKB230 AKB240 EQU * LD A1,DWTUTQ,A6 LCR A2,A1 AKB245 LDR A4,A2 XRK A4,/FF OVERFLOW? RF(NE) AKB250 N0! AKB247 SCR A4,A1 YES! LDK A1,OVMASK OVERFLOW SET ABL ENDIX END I/O AKB250 CW A1,DWTINQ,A6 SOMETHING IN QUEUE? RF(NE) AKB255 CF A5,STREG NOTHING IN QUEUE IFT CTIMUT=1 LDR A1,A1 CHECK TIME OUT RETURN CODE RF(Z) AKB257 NO TIME OUT ABL ENDI05 END I/O AT TIME OUT XIF IFT CTIMUT=0 RF AKB257 XIF AKB255 CF A15,EOQUEU NEXT OUT POINTER ST A1,DWTUTQ,A6 STORE NEW POINTER AKB257 EQU * LDR A4,A7 SUK A4,2 RF(NN) AKB310 ORDER 2 OR 3 EJECT * * * ORDER 1 BASIC READ * * * AKB305 CF A15,STORE STORE CHARACTER IN ECB-BUFFER IFT CECHO=1 CF A5,ECHO XIF AKB307 CW A3,4,A8 RF(E) AKB380 END I/O IF REQ=EFF LENGTH LD A2,DWTST,A6 MORE KEYS? ANK A2,/F RB(NZ) AKB210 RB AKB225 EJECT * * * * ORDER 2 OR 3 STANDARD AND NUMERIC READ * * CHECK IF READ CHARACTER IS FOUND IN KEY-TABLE (IF ANY) * * * * AKB310 EQU * LD A1,10,A8 KEY-TABLE ADDRESS RF(Z) AKB360 NO KEY-TABLE LCR A4,A1 KEY-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? RB(NE) AKB355 NO! ADK A4,1 ST A4,10,A8 STORE INDEX IN CONTROL WORD CF A15,STORE STORE CHARACTER IFT CECHO=1 ORK A2,/80 INDICATE EOR-CHARACTER CF A5,ECHO ECHO EOR-CHARACTER XIF RF AKB380 AKB360 EQU * LDR A4,A2 CC A4,KBMZ2,A6 RF(E) KBMZ20 CC A4,KBMZ3,A6 RF(E) KBMZ30 CC A4,KBBSP,A6 RF(E) KBSP10 CC A4,KBCLR,A6 RF(E) KBCL10 CF A15,STORE STORE CHARACTER IN BUFFER LDR A4,A2 SUK A4,/20 CHEC CONVERTED CHARACTER RF(N) AKB364 LESS THAN /20 SUK A4,/5F CHARACTER > /7F RF(P) AKB364 YES CWK A7,2 RF(E) AKB366 STANDARD READ OK ADK A4,/4F RF(N) AKB364 SUK A4,/A RF(N) AKB366 NUMERIC READ OK AKB364 LDK A1,4 ERROR CODE RF ENDIO AKB366 EQU * IFT CECHO=1 ANK A2,/7F CF A5,ECHO XIF CW A3,4,A8 LENGTH OVERFLOW? AKB367 ABL(L) AKB210 NO RETURN AKB368 LDK A1,8 YES SET ERROR CODE RF ENDIO END I/O EJECT KBMZ30 EQU * TRIPPLE ZERO LDK A4,3 RF KBMZ25 KBMZ20 LDK A4,2 DOUBLE ZERO KBMZ25 LDK A2,/30 SUK A4,1 RB(L) AKB367 LDR A1,A4 CF A15,STORE LDR A4,A1 IFT CECHO=1 CF A5,ECHO XIF CW A3,4,A8 RB(L) KBMZ25 KBMZ27 EQU * SUK A4,1 ANY MORE ZEROES RB(L) AKB368 NO,SET RETURN CODE INH LD A1,DWTUTQ,A6 GET OUTQUEUE POINTER SUR A1,A6 CWK A1,DWTSQ FIRST POSITION ? RF(NE) KBMZ29 NO LDK A1,DWTEQ GET LAST POSITION IN QUEUE ADR A1,A6 SUK A1,1 RF KBMZ40 KBMZ29 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 KBMZ27 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 ENDIX RF ENDIO LENGTH AND THRUGHPUT ERRORS * * * KBCL10 EQU * CLEAR LDK A3,0 LDK A2,/18 RB AKB366 * * * KBSP10 EQU * LDR A3,A3 RF(Z) KBSP15 SUK A3,1 SUR A2,A2 CLEAR LAST CHAR IN ECB-BUFFER CF A15,STORE SUK A3,1 KBSP15 LDK A2,/8 RB AKB366 * * 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 * * INH IFT CTIMUT=1 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 * EJECT * * * * IHKB * * * THIS IS THE INTERRUPT HANDLER ENTERED FROM CHLT/CHRT DRIVER * * * IHKB EQU * ANK A2,/FF CF A15,KONVER CONVERT INPUT CHARACTER LDR A4,A4 TEST TYPE OF CHAR RF(P) EXIT SHIFT/CTRL/SKIP RF(N) IHKB12 KEY-LOCK LD A3,DWTST,A6 NORMAL CHAR IFT KBLOCK=1 ANK A3,/FF RF(Z) EXIT LD A3,DWTST,A6 I/O REQUEST? XIF RF(N) IHKB15 NO READ REQUEST PENDING SLL A3,7 INTERRUPT ALLOWED ? RF(NN) IHKB15 NO, STORE CHARACTER IN DWT-BUFFER IFT CTIMUT=1 LD A3,DWTTP,A6 RF(E) IHKB07 NO TIMING ON THIS DEVICE LDKL A3,-TIME RESTART TIME ST* A3,DWTTP,A6 XIF IHKB07 ABL LDREG RETURN TO READ ROUTINE IHKB12 CF A15,KEYSET SET KEY CODE IN DWT LDR A3,A3 RF(Z) EXIT NO KEY CHANGE LD A3,DWTST,A6 RF(N) EXIT NO READ REQUEST PENDING SLL A3,7 RF(NN) EXIT INERRUPT NOT ALLOWED LD A3,DWTA3,A6 RESTORE BUFFER INDEX LDKL A5,DWTSB2 ADR A5,A6 ABL AKB210 IHKB15 LD A1,DWTINQ,A6 LCR A4,A1 XRK A4,/FF ALREADY OVERFLOW? RF(E) EXIT YES LDR A3,A1 CF A15,EOQUEU GET NEXT OUTQUEUE POINTER ADDRESS CW A1,DWTUTQ,A6 OVERFLOW? RF(NZ) IHKB20 SAVE KEY-LOCK IF ANY ORK A2,/FF SET OVERFLOWBIT IN INPUT BUFFER RF IHKB30 IHKB20 ST A1,DWTINQ,A6 STORE INQUEUE POINTER IHKB30 SCR A2,A3 EXIT ABL TDISP * EJECT * * * * AKBTUT * * THIS IS THE TIME-OUT ROUTINE * * * IFT CTIMUT=1 AKBTUT EQU * LDR A6,A1 RESTART DWT-ADDRESS LDK A1,/40 SET RETURNE CODE CM DWTTP,A6 LD A2,DWTST,A6 RB(N) EXIT DISPATCH IF NO REQUEST ON RB IHKB07 RESTORE REGISTER AND END I/O XIF EJECT * * * * * KEYSET * * * * ON ENTRY: A4= NEG KEY-LOCK VALUE * * ON EXIT: A3= ZERO IF IF NO CHANGE IN KEYS, ELSE POS * * KEYSET EQU * STR A4,A15 LD A3,DWTST,A6 LDKL A2,/100 SET100 SRL A2,1 ADK A4,2 IN A4: 1=OFF 0=ON RB(N) SET100 ANR A3,A2 CHEC OLD KEY POSITION RF(NZ) SET300 JUMP IF KEY ON LDR A4,A4 RF(NZ) SET500 RF SET400 SET300 LDR A4,A4 RF(Z) SET500 SET400 LD A3,DWTST,A6 XRR A3,A2 SRL A2,4 ORR A2,A3 ST A2,DWTST,A6 LDK A3,1 A3=1 IF KEY LOCK HAS CHANGED SET500 LDR* A4,A15 RTN A15 EJECT * * * * KONVER * * KONVER CONVERTS INPUT CHARACTER * * * ON ENTRY: A2= INPUT CHARACTER * * * ON EXIT: A2=COVERTED CHARACTER * A4= NEG IF KEY-LOCK, ZERO IF CHARACTER,POS IF CTRL,SHIFT * A5 IS DESTROYED! * * KONVER EQU * LDR A4,A2 IFT NSHIFT=0 SUK A4,/7C CODE > /7B RF(NN) KON500 YES LDR A4,A2 RESTORE CHARACTER XIF STR A2,A15 STORE CHARACTER IN CASE OF NO CONVERSION LDR* A5,A6 SUK A4,/20 RF(N) KON105 FUNCTION KON100 SUK A4,/40 RF(N) KON180 ALFANUMERIC SUK A4,/10 FUNCTION RF(NN) KON110 NO SUK A2,/40 YES KON105 EQU * ANK A5,/10 SRL A5,3 RF KON200 KON110 SUK A4,8 (UN)CTRL OR (UN)SHIFT RF(N) KON400 KEY-LOCK RF(Z) KON140 SHIFT ON SUK A4,2 RF(N) KON160 SHIFT OFF RF(Z) KON170 CONTROL ON IFT NSHIFT=1 SUK A4,2 RF(N) KON125 CONTROL OFF RF(E) KON140 NUMERICAL SHIFT ON RF KON160 NUMERICAL SHIFT OFF XIF KON125 EQU * LDKL A2,/FFDF UNCTRL KON120 ANR A5,A2 KON130 STR A5,A6 DWTCHP LDK A4,/10 RF KON400 GO HOME! KON140 EQU * IFT NSHIFT=1 LDR A4,A5 ANK A4,/10 RF(Z) KON145 SHIFT NOT ON LDK A2,/90 RF KON150 XIF KON145 EQU * LDK A2,/10 SHIFT KON150 ORR A5,A2 RB KON130 KON160 EQU * IFT NSHIFT=1 LDR A4,A5 ANK A4,/80 RF(Z) KON165 LDKL A2,/FF7F RB KON120 XIF KON165 EQU * LDKL A2,/FFEF RB KON120 RB KON120 KON170 LDK A2,/20 CTRL RB KON150 KON180 SUK A2,/20 FIND INDEX ANK A5,/30 SRL A5,3 ADK A5,4 KON200 LD A4,DWTCON,A6 GET CONVERSION TABLE ADDRESS ADR A4,A5 LDR* A4,A4 RF(Z) KON400 ADR A4,A2 LDR* A2,A15 RESTORE A2 AND A15-STACK LCR A2,A4 GET CHARACTER FROM TABLE KON250 LDK A4,0 A4=0 IF NOT KEY-LOCK$$ KON300 RTN A15 KON400 LDR* A2,A15 NO CONVERSION, KEEP CHARACTER RB KON300 IFT NSHIFT=0 KON500 EQU * LDR A4,A4 KEY CODE /7C RF(Z) KON600 YES LDK A4,1 INDICATE SKIP CHARACTER RTN A15 KON600 EQU * SUR A2,A2 RB KONVER DO START AGAIN 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 STORTN ADKL A15,2 LDR* P,A15 EJECT * * * EOQUEU = SUBROUTINE TO GET NEXT QUEUE POINTER * * ON ENTRY: * * A1 = QUEUE POINTER * A6 = DWT-ADDRESS * * ON EXIT: * * A1 = NEW QUEUE POINTER EOQUEU EQU * 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 RB STORTN END