File: VCMBEE.PG of Tape: Sources/Other/new-22-vista-2
(Source file text)
FILE VCMBEE - BEEHIVE SUPER BEE II / TITLE VERSION 01.09 -- COPYRIGHT NOTICE / / / ****************************************** / ** ** / ** V I D E O ** / ** C H A R A C T E R I S T I C S ** / ** M O D U L E ** / ** ** / ** CODED BY ** / ** C. E. STEUART DEWAR ** / ** MARCH, 1980 ** / ** ** / ** ** / ****************************************** / / / COPYRIGHT (c) 1980 Under BERNE and UNIVERSAL COPYRIGHT LAW / By: DEWAR INFORMATION SYSTEMS CORPORATION / / The information in this document is subject to change without / notice and should not be construed as a commitment by DEWAR / INFORMATION SYSTEMS CORPORATION. DEWAR INFORMATION SYSTEMS / assumes no responsibility for any errors that may appear in / this document other than providing corrections for any such / errors when brought to the attention of DEWAR INFORMATION SYS- / TEMS CORPORATION. / / The SOFTWARE described in this document is furnished to the / purchaser under a license for use on a single computer system / and can be copied (with inclusion of DISC's copyright notice) / only for use in such system. / / Licensees of the SOFTWARE may make changes to the software / with the understanding that the warranty for the SOFTWARE only / applies to the original unmodified version delivered to the / licensee. The fact that licensee may have modified or changed / the SOFTWARE in no way alters or detracts from the copyright / protection and proprietary rights due to DISC for the SOFTWARE EJECT / / VISTA IS A SCREEN ORIENTED TEXT EDITOR FOR A VISUAL DISPLAY / TERMINAL. / / FUNCTION KEYS ON A TERMINAL ARE HANDLED THROUGH THE USE OF / THIS VIDEO CHARACTERISTICS MODULE (VCM), THAT HANDLES ALL INPUT TO THE / MAIN PORTION OF THE VISTA PROGRAM. IN THE SAME WAY, ALL OUTPUT FROM / THE VISTA PROGRAM IS ENCODED AND IT I S THE FUNCTION OF THE / 'VCM' MODULE TO RETRANSLATE THIS OUTPUT INTO A FORM / SUITABLE FOR THE SPECIFIC TERMINAL IN USE. / / THE VCM PROVIDED STANDARDLY PROVIDED WITH / VISTA HAS BEEN DESIGNED AROUND THE VT52/VT100 TERMINALS SINCE / IT IS EXPECTED THAT THESE ARE THE MOST COMMON DISPLAY TERMINALS / TO BE FOUND ON PDP8 SYSTEMS. / / IMPLEMENTATION OF OTHER VIDEO DISPLAY TERMINALS IS EXTREMELY / SIMPLE SINCE THE MAIN CORE OF THE VISTA PROGRAM IS NEVER / CHANGED. / / CONSULT THE 'VISTA' PROGRAM MANUAL FOR DETAILS ON THE USE OF THIS / EDITING PROGRAM. / / VIDEO CHARACTERISTICS MODULE IS ALLOCATED 3 PDP8 PAGES FROM / 06000-06577 TITLE SCREEN LAYOUT FORMAT / / IN ORDER TO UNDERSTAND HOW VISTA WORKS IT IS ESSENTIAL TO / KNOW THE MEMORY LAYOUT. / / A COPY OF EACH LINE ON THE VIDEO SCREEN IS MAINTAINED IN A / FIELD 1 BUFFER CALLED 'SCREEN'. EACH BYTE ON THE SCREEN OCCUPIES / ONE WORD IN THIS BUFFER. / / A ROW TABLE IS MAINTAINED WHICH CONSISTS OF A ONE WORD ADDRESS / FOR EACH LINE ON THE SCREEN. THE ROW TABLE IS SIMPLY A SET OF / POINTERS TO THE FIRST WORD ON EACH LINE. THIS FIRST WORD IS / A STATUS/COUNT WORD FOR THE LINE WHICH IMMEDIATELY FOLLOWS. / / THE FUNCTION OF THE ROW TABLE IS TO AVOID MOVING THE SCREEN MEMORY / AROUND DURING INSERTION AND DELETION OF LINES. IN THIS CASE, ONLY / THE ROW TABLE ITSELF HAS TO BE ADJUSTED. FOR THIS REASON, THE / POINTER ADDRESSES IN THE ROW TABLE ARE NOT NECESSARY IN ANY ORDER. / / THE FORMAT OF THE STATUS/COUNT WORD FOR EACH LINE IS: / / ABC DEE EEE EEE / / A = 0 CURRENT LINE EXISTS / 1 CURRENT LINE DOES NOT EXIST (AT END OF FILE OR UNESTABLISHED) / / B = 0 LINE ENDS WITH CR/LF / 1 LINE ENDS WITHOUT CR/LF / / C = 0 LINE NOT MARKED / 1 LINE MARKED AS PART OF BLOCK (FOR SAVE/DELETION) / / D = 0 CURRENT LINE HAS NOT BEEN MODIFIED ON THIS EDIT / 1 HAS BEEN MODIFIED ON THIS EDIT CYCLE / / EEE..E LINE LENGTH IN THE RANGE 0-255 / / / END OF FILE IS INDICATED BY 'BOF' FLAG BEING SET AND BY ROWS / WITH A BIT 0 STATUS OF 1. / / THERE ARE TWO ONE-BLOCK BUFFERS 'FEEDING' THE SCREEN WINDOW: / THE ABOVE SCREEN BUFFER (ABUF) AND THE BELOW SCREEN BUFFER / (BBUF). THESE BUFFERS ARE IN OS/8 FORMAT AND ARE READ AND / WRITTEN FROM THE OS/8 DEVICE AS NEEDED. / TITLE IMPORTANT GLOBAL CELLS / / YOU MAY NEED TO BE AWARE OF THE FOLLOWING IMPORTANT CELLS AND / ENTRY POINTS IN VISTA: / / NAME FUNCTION / / COL CONTAINS BINARY COLUMN POSITION OF CURSOR IN RANGE / 0-(N-1). NOTE: POSITION IS NOT GUARANTEED FOR ALL / POSSIBLE VCM FUNCTIONS (BUT IT IS FOR ALL IMPORTANT / ONES). / / ROW CURRENT POINTER INTO THE ROW TABLE. / / ROWTAB ADDRESS OF FIRST ROW IN ROW TABLE / LASTROW ADDRESS OF LAST ROW IN ROW TABLE / ROWSIZ COUNT OF NUMBER OF ROWS IN ROW TABLE (1-N) / COLSIZ COUNT OF NUMBER OF COLUMNS ON SCREEN / PKBD POINTER TO CONSOLE INPUT ROUTINE / PSCR POINTER TO CONSOLE OUTPUT ROUTINE / XT/XT2 TWO CELLS ON PAGE 0 RESERVED FOR USE BY 'VCM' / MODULE. VCM CAN ALLOCATE MORE PAGE 0 STORAGE / FROM THE ADDRESS XT2+1 UP TO 177 ON PAGE 0. / CAUTION: SPR'S FOR VISTA MAY REQUIRE THE USE OF / PAGE 0 CELLS (STARTING BACK FROM 177), SO USE / PAGE 0 CELLS ONLY WHEN ABSOLUTELY NECESSARY. / / PRLINE SUBROUTINE TO OUTPUT A FULL ROW ON THE SCREEN. / CAN ONLY BE CALLED FROM VCM IF VCM FILE ITSELF / PROTECTS AGAINST A RECURSIVE CALL BY SAVING THE / RETURN ADDRESSES IN 'PRLINE' AND 'XTER'. / / THIS ROUTINE WILL BE NEEDED FOR TERMINALS THAT ARE / CAPABLE OF PERFORMING INSERT AND DELETE LINE IN LOCAL / MODE (SEE VCM52 FOR AN EXAMPLE OF CALLING 'PRLINE') TITLE ASSEMBLY INSTRUCTIONS / / THIS VCM FILE IS TO BE ASSEMBLED WITH THE GLOBAL SYMBOL / DICTIONARY FROM VISTA: / / .R PAGE8 / *VCM,LPT:<VISTA.SD,VCM/I / / OR IF YOU HAVE TO USE PAL8 / / .R PAL8 / *VCM,LPT:<VISTA.GL,VCM / / WHERE FOR PAL8, 'VISTA.GL' IS THE PAGE8 SYMBOL DIRECTORY CONVERTED / INTO PAL8 COMPATIBLE FORMAT. / DSEC / XT3 QUT 0,XT2+1 TEMPORARY CELL XT4 QUT 0,XT3+1 TEMPORARY CELL / ORG KIO KEYBOARD I/O / / ALL FOLLOWING ADDRESSES ARE ABSOLUTELY REFERENCED BY VISTA / AND CANNOT BE CHANGED UNLESS VISTA ITSELF IS ALTERED. / KIO DC 0 KEYBOARD I/O ENTRY JMPI PXIN CONTINUE NOW / SIO DC 0 SCREEN I/O ENTRY POINT JMPI PXOUT CONTINUE / VMCMNT DC -'/ MINUS ASCII CODE OF COMMENT FIELD CHARACTER VMTAG DC -', MINUS ASCII CODE OF TAG FIELD DELIMITER VROWS DC 25 NUMBER OF ROWS ON VIDEO SCREEN VCOLS DC 80 NUMBER OF COLUMNS ON VIDEO SCREEN VAUCOL DC 72 STARTING COLUMN FOR AUDIT TRAIL OF VERSION #'S VSTAT DC 02000 NO XON/XOFF, CTRL/O ALLOWED / / ### END OF FIXED ADDRESS SECTION UTILIZED BY VISTA PROGRAM ### / XKIO JMPI KIO HERE TO EXIT FROM 'KIO' XSIO JMPI SIO HERE TO EXIT FROM 'SIO' PXIN DC XIN POINTER TO 'XIN' PXOUT DC XOUT POINTER TO 'XOUT' TITLE KEYBOARD ESCAPE TRANSLATION TABLE / / VISTA INTERNAL CODE FOR ALL ESCAPED CHARACTERS POSSIBLE ON THE / KEYBOARD. / ITRAN DC 0 CTRL/NULL DC Y:TRANSP CTRL/A TRANSPARENT MODE DC 0 CTRL/B DC 0 CTRL/C DC 0 CTRL/D DC Y:TRUNCF CTRL/E DC 0 CTRL/F DC 0 CTRL/G DC Y:BKDEL CTRL/H DC Y:TABR CTRL/I DC Y:CNEXTL CTRL/J DC Y:DELWD CTRL/K DC 0 CTRL/L DC Y:RETURN CTRL/M DC 0 CTRL/N DC 0 CTRL/O DC Y:CASE CTRL/P DC 0 CTRL/Q DC 0 CTRL/R DC 0 CTRL/S DC 0 CTRL/T DC Y:DLETLN CTRL/U DC 0 CTRL/V DC Y:QUIT CTRL/W DC 0 CTRL/X DC 0 CTRL/Y DC Y:XEDIT CTRL/Z DC 0233 CTRL/[ RETURN SINGLE ESCAPE CODE DC 0 CTRL/\ DC 0 CTRL/] DC 0 CTRL/^ DC 0 CTRL/_ / DC 0 SPACE DC 0 ! DC 0 " DC 0 # DC 0 $ DC 0 % DC 0 & DC 0 ' DC 0 ( DC 0 ) DC 0 * DC 0 + DC 0 , DC 0 - DC 0 . DC 0 / DC Y:RSTEP 0 REPLACEMENT STEP DC Y:WLEFT 1 WORD LEFT DC Y:WRIGHT 2 WORD RIGHT DC 0 3 DC 0 4 DC 0 5 DC 0 6 DC 0 7 DC 0 8 DC 0 9 DC 0 : DC 0 ; DC 0 < DC 0 = DC 0 > DC 0 ? / DC 0 @ DC Y:CUP A CURSOR UP DC Y:CDOWN B CURSOR DOWN DC Y:CRIGHT C CURSOR RIGHT DC Y:CLEFT D CURSOR LEFT DC Y:DELSCR E DELETE SCREEN DC 0 F DC 0 G DC Y:HOME H HOME CURSOR DC 0 I DC 0 J DC Y:CEOL K DC Y:ROWINS L INSERT LINE DC Y:MKROW M MARK ROW DC Y:SEARCH N PAGE EDIT IS SEARCH KEY DC 0 O DC Y:UNMKROW P UNMARK ROW DC Y:INSTOG Q INSERT CHARACTER MODE TOGGLE DC 0 R DC Y:SCRLUP S SCROLL UP DC Y:SCRLDN T SCROLL DOWN DC Y:PAGEUP U PAGE UP DC Y:PAGEDN V PAGE DOWN DC Y:RCONT W FMT KEY: REPLACEMENT: CONTINUOUS DC 0 X DC 0 Y DC Y:TRUNCF Z TRUNCATE FILE DC 0 [ DC 0 \ DC 0 ] DC 0 ^ DC 0 _ / DC Y:TABL OPEN QUOTE BACK TAB DC 0 A - LOWER CASE DC 0 B - ETC. DC 0 C DC 0 D DC 0 E DC Y:AWAY F CURSOR TO END OF SCREEN DC 0 G DC 0 H DC 0 I DC 0 J DC 0 K DC 0 L DC 0 M DC 0 N DC 0 O DC Y:NEWCMD P COMMAND MODE DC Y:TOFC Q TOP OF FILE DC Y:BOFC R BOTTOM OF FILE DC Y:CAPTOG S CAPS LOCK TOGGLE DC Y:PICKUP T PICK UP DC Y:PUTDN U PUT DOWN DC Y:DISMOD V DISPLAY MODIFIED LINES DC Y:DOSCRN W DO SCREEN RESTORE DC 0 X DC 0 Y DC 0 Z DC 0 OPEN BRACK DC 0 LONG COLON DC 0 CLOSE BRACE DC 0 TILDE DC 0 DELETE AIF (ITRAN+0200).EQ.*,.OK ERROR: TRANSLATE TABLE LENGTH IS BAD .OK ANOP TITLE SCREEN TRANSLATION TABLE / / DISPATCH TABLE FOR EXTERPRETER FUNCTION CODES / XTAB DC Z:POS 0 POSITION CURSOR DC Z:INIT 1 INITIALIZE SCREEN DC Z:SPAC 2 PAD CODE FOR TABS DC Z:CRLF 3 CR/LF TYPE SEQUENCE DC Z:EOL 4 ERASE TO END OF LINE DC Z:CLSC 5 CLEAR SCREEN AND HOME CURSOR DC Z:INS 6 INSERT LINE DC Z:DEL 7 DELETE LINE DC Z:BEL 8 RING BELL DC Z:BKSP 9 BACKSPACE DC Z:SPV1 10 SPECIAL VIDEO MODE 1 DC Z:SPV2 11 SPECIAL VIDEO MODE 2 DC Z:NMV 12 NORMAL VIDEO MODE DC Z:END 13 END OF LINE GRAPHIC DC Z:RTN 14 RETURN VDT TO ORIGINAL CONDITION DC Z:CTRL 15 CONTROL CODE-NON-DISPLAYABLE / TITLE TRANSLATION ROUTINES / ISEC 0 ENABLE PAGING / / ENTER HERE TO GET NEXT CHARACTER FROM CONSOLE TERMINAL. / ALL CHARACTERS ARE RETURNED IMMEDIATELY AND DIRECTLY / EXCEPT FOR THE ESCAPE CODES WHICH ARE USED TO IMPLEMENT / ALL FUNCTIONS. / XIN JMSI PKBD GET CHARACTER FROM KEYBOARD TAD =-0233 TEST FOR ESCAPE CODE SNA SKIP IF NOT JMP 1F HANDLE ESCAPE CODE TAD =0233-' CONTROL CODE? SPA SKIP IF NOT JMP 0F HANDLE CONTROL CODE TAD =' ELSE RESTORE CHARACTER JMP XKIO RETURN DIRECTLY TO VISTA / / HERE ON CONTROL CODE, MAP TO FIRST PART OF TABLE (I.E. / CONTROL CHARS JUST TREATED THE SAME AS ESCAPE THEN A / CONTROL CHAR. / 0H TAD =' RESTORE CHARACTER CODE JMP *+2 MERGE TO PROCESS CHARACTER / / HERE ON ESCAPE CODE. / 1H JMSI PKBD READ CHARACTER AFTER ESCAPE CODE TAD =ITRAN-0200 INDEX TRANSLATE TABLE DCA XT ... CDF %ITRAN TADI XT LOAD VISTA INTERNAL CODE CDF BUF RESET TO MAIN BUFFER FIELD SZA IS THIS AN UNDEFINED CODE? JMP XKIO NO: SO RETURN IT IN THE AC JMP XIN YES: SO STRIP COMPLETELY TITLE EXTERPRETER FOR BEEHIVE SUPER BEE II / / ENTER HERE WITH CHARACTER TO BE OUTPUT TO THE SCREEN / XOUT DCA XT SAVE CHARACTER FOR A MOMENT TAD XT REGET CHARACTER TAD =-0200 LOWEST ASCII CODE SPA SKIP IF DISPLAYABLE CODE JMP 1F ELSE OFF FOR FUNCTION CODE TAD =0200 NORMAL CODE: RESTORE IT CHOUT JMSI PSCR OUTPUT BACK TO SCREEN / / COME HERE TO IGNORE CHARACTER / XNULL JMP XSIO ALL DONE HERE Z:RTN QUT %XNULL,XNULL NOTHING TO DO FOR EXIT / / HERE ON CONTROL CHARACTER - MUST DISPLAY SOME KIND OF GRAPHIC / ON SCREEN. USE PROGRAM ENTRY MODE FOR THIS PURPOSE / Z:END LDI -1 USE LINE FEED AS GRAPHIC Z:CTRL TAD ='K-64 USE CONTROL/K AS NORMAL GRAPHIC DCA XT2 SAVE FOR A MOMENT TAD ='Y ENTER PROGRAM ENTRY JMS DOESC ... TAD =-2000 BEEHIVE NOW NEEDS ABOUT 1 MSEC DELAY DCA XT (!!!) ISZ XT (CAN'T USE NULL BECAUSE OF PROGRAM ENTRY) JMP *-1 ... TAD XT2 GET GRAPHIC CHARACTER JMSI PSCR ... TAD ='Z END UP NOW JMS DOESC ... JMP XSIO ALL DONE HERE / / HERE ON FUNCTION CODE: INDEX DISPATCH TABLE / 1H TAD =XTAB+0200 INDEX DISPATCH TABLE DCA XT2 ... CDF %* TO CURRENT FIELD TADI XT2 GET ADDRESS CDF BUF BACK TO BUFFER FIELD DCA XT2 ... JMPI XT2 PASS CONTROL NOW / / HERE ON CONTROL CODE WHICH WE WISH TO SEND NORMALLY / OCTRL TAD XT REGET THE CONTROL CHARACTER JMP CHOUT OUTPUT CHARACTER NOW / / HERE ON TAB/PAD CODE: SEND AS SPACE / Z:SPAC TAD =' RETURN SPACE INSTEAD JMP CHOUT ... EJECT / / HERE FOR BACKSPACE FUNCTION / Z:BEL LDI -1 CONTROL/G DOES BELL FUNCTION Z:BKSP TAD =0210 CONTROL/H DOES BACKSPACE FUNCTION JMP CHOUT ... / / HERE FOR SIMPLE TWO-CHARACTER ESCAPE FUNCTIONS / Z:INIT TAD ='R-'K ESCAPE/R REMOVES INSERT CHARACTER MODE Z:EOL TAD ='K DO ESCAPE/K FOR ERASE TO EOL JMS DOESC DO ESCAPE SEQUENCE JMP XSIO ALL DONE HERE / / DELETE LINE FUNCTION. AFTER DOING THE DELETE LINE. PUT / A NEW-LINE CODE AT THE BOTTOM OF THE SCREEN. THAT WAY, IT / WILL GET PUSHED ALONG WHEN A NEW LINE IS WRITTEN TO THE BOTTOM / OF THE SCREEN. / Z:DEL TAD ='M ESCAPE/M DELETES LINE JMS DOESC ... TAD =-120 120 NULLS TO FOLLOW JMS DONULLS ... TAD ROW SAVE ROW POSITION DCA XT3 ... TAD LASTROW ADDRESS OF FINAL ROW DCA ROW ... JMS POSITION POSITION CURSOR ON THAT ROW TAD =0237 PUT NEWLINE ON THAT LINE JMSI PSCR ... TAD XT3 RESTORE CURSOR POSITION DCA ROW ... JMS POSITION RE-POSITION CURSOR ON SCREEN JMP XSIO ALL DONE HERE / / SUBROUTINE TO GENERATE # OF NULLS SPECIFIED AS A NEGATIVE NUMBER / IN THE AC ON ENTRY. / DONULLS SUB DCA XT ... 1H TAD =NULL OUTPUT NULLS JMSI PSCR ... ISZ XT MORE NULLS? JMP 1B YES: DO THEM RET DONULLS ALL DONE HERE / / INSERT LINE AND CLEAR SCREEN. / Z:INS TAD ROW SAVE CURRENT ROW DCA XT3 ... TAD COL SAVE CURRENT COLUMN DCA XT4 ... TAD LASTROW POSITION AT LAST ROW DCA ROW ... DCA COL ... JMS POSITION POSITION CURSOR NOW TAD ='J ERASE TO END OF MEMORY JMS DOESC ... LDI -3 JMS DONULLS SEND SOME NULLS TAD XT3 RESTORE ROW DCA ROW ... TAD XT4 RESTORE COLUMN DCA COL ... JMS POSITION RE-POSITION CURSOR TAD ='L-'E ESCAPE/L INSERTS LINE Z:CLSC TAD ='E DO ESCAPE/E FOR CLEAR SCREEN JMS DOESC OUTPUT ESCAPE SEQUENCE LDI -3 FOLLOW WITH THREE NULLS JMS DONULLS ... JMP XSIO ALL DONE HERE / / OUTPUT ESCAPE SEQUENCE, CHAR IN AC / DOESC SUB DCA XT SAVE CHARACTER TAD =0233 OUTPUT ESCAPE CODE JMSI PSCR ... TAD XT REGET CHARACTER JMSI PSCR ... RET DOESC ALL DONE HERE / / HERE FOR CR/LF ON SCREEN. USE NEWLINE FOR THIS / Z:CRLF TAD =0237 NEWLINE CODE JMP CHOUT ... / / HERE FOR VIDEO MODES / Z:NMV JMP XSIO NORMAL VIDEO: DO NOTHING FOR BEEHIVE / Z:SPV1 TAD ='1 SET FOR REVERSE VIDEO CODE Z:SPV2 QUT %*,Z:SPV1 SAME ENTRY ADDRESS DCA XT ... TAD =0233 SEND ESCAPE FIRST JMSI PSCR ... TAD ='_ THEN UNDERLINE JMSI PSCR ... TAD XT THEN SEND THE DIGIT JMP CHOUT ... EJECT / / HERE FOR POSITION CURSOR COMMAND. IN THIS CASE, WE POSITION / TO THE ROW AND COLUMN SPECIFIED BY 'ROW' AND 'COL' / / BEEHIVE REQUIRES: / / ESC F YYY XXX / / WHERE XXX IS THE LINE NUMBER, AND YYY IS THE COLUMN POSITION / / THERE IS A SERIOUS BUG IN THE BEEHIVE VDT. IF WHILE PROCESSING / AN ESCAPE SEQUENCE, THE KEYBOARD IS STRUCK, THE VDT LOSES TRACK / OF WHAT IT IS DOING. FOR EXAMPLE, IF DELETE CHARACTER IS STRUCK / (ESCAPE 'P') THE BEEHIVE CAN MERGE THE ESCAPE WITH A '0' FROM / AN ESCAPE SEQUENCE AND DO A PRINT FUNCTION (!). TO AVOID THIS / DESIGN FLAW, WE LOCK THE KEYBOARD DURING ESCAPE SEQUENCES. / Z:POS JMS POSITION POSITION CURSOR JMP XSIO ALL DONE HERE / / SUBROUTINE TO POSITION CURSOR / (ALSO USED BY DELETE LINE ROUTINE) / POSITION SUB TAD =0233 OUTPUT ESCAPE CODE JMSI PSCR ... TAD ='F AND 'F' JMSI PSCR ... / / OUTPUT COLUMN NUMBER AS THREE ASCII, DECIMAL DIGITS / TAD ='0 FIRST DIGIT OF COLUMN ALWAYS 0 JMSI PSCR ... TAD COL GET COLUMN NUMBER JMS TWOUT OUTPUT AS TWO 8-BIT CHARS / / OUTPUT ROW NUMBER AS THREE ASCII, DECIMAL DIGITS / TAD ='0 FIRST DIGIT OF ROW IS ALWAYS 0 JMSI PSCR ... TAD ROWTAB GET STARTING ADDRESS OF ROW TABLE CMA IAC SUBTRACT FROM CURRENT ROW TAD ROW ... JMS TWOUT OUTPUT AS 2 8-BITS CODES RET POSITION ALL DONE HERE / / OUTPUT BINARY NUMBER IN AC AS TWO ASCII DIGITS / TWOUT SUB DCA XT SAVE RESULT TAD ='0 INITIALIZE HIGH DIGIT DCA XT2 ACCUMULATE RESULT TAD XT GET THE NUMBER / 1H TAD =-10 COUNT TENS POSITION SPA ALL DONE? JMP 2F YES: / INC XT2 NO: COUNT DIGIT JMP 1B LOOP BACK / 2H TAD =10+'0 MAKE A DIGIT DCA XT AND SAVE IT TAD XT2 OUTPUT FIRST DIGIT JMSI PSCR ... TAD XT OUTPUT SECOND DIGIT JMSI PSCR ... RET TWOUT ALL DONE HERE