/DECMATE PANEL CODE (SLUSHWARE) VERSIO= 413 /SLUSHWARE VERSION NUMBER, MUST UPDATE FOR EACH EDIT / / VERSION 413 - 12 SEP 84 - KAH - 1) APPEND SHIFT/LOCK/CONTROL BITS TO MAIN / ARRAY KEYS IN SINGLE-CHARACTER-FUNCTION_KEY / MODE (THESE HIGH BITS HAD BEEN CLEARED), THIS / CHANGE IS NECESSARY FOR MS-DOS EXTENDED CALLS / USED BY LOTUS 1-2-3. / VERSION 412 - 06 AUG 84 - KAH - 1) FIX GRAPHICS INITIALIZATION TO ENSURE / DISPLAY MEMORY CLEARED BY WAITING UNTIL SCREEN / MEMORY CLEARED BEFORE SYNCHING VIDEOS / AND WRITING ALL FOUR REGISTERS TWO / WITH 7777 (DECMATE II FAILED AT / TIMES TO FULLY CLEAR SCREEN); / 2) FIX GRAPHICS INITIALIZATION TO ENSURE / TEXT FORCED TO BOTH MONITORS FOR A NEW BOARD / (DECMATE III HAD FAILED TO RESET REGISTER / ONE AT A SOFTWARE REBOOT). / VERSION 411 - 29 JUN 84 - KAH - 1) FIX GRAPHICS INITIALIZATION TO USE A / MORE RELIABLE TEST FOR PRESENCE OF A 'NEW' / GRAPHICS BOARD (SEE IF 6150 INSTRUCTION SKIPS, / OLD BOARD OR NO BOARD WILL NOT SKIP); / 2) DEFAULT SETUP TO GRAPHICS CURSOR ENABLE AND / TEXT TO COLOR MONITOR. / VERSION 410 - 27 JUN 84 - KAH - 1) FIX 'CAF' PRQ (PR3/30/7777) TO CLEAR / AC, LINK, GT AND IEFF; / 2) ADD GRAPHICS BOARD INITIALIZATION TO FORCE / TEXT TO BOTH MONOCHROME AND COLOR MONITORS. / VERSION 407 - 25 JUN 84 - KAH - 1) CLEAR QUEUE TO USER WHEN SET/RESETTING / SINGLE-CHARACTER-FUNCTION MODE TO AVOID / MIXED DATA; / 2) DON'T RESET LOCAL-FUNCTION-KEY MODE WHEN / DOING RIS; / 3) ENSURE CHARACTER ADDRESSING SET UP PROPERLY / WHEN ERASING ENTIRE LINE WITH ED1 AND HAD BEEN / IN DOUBLE WIDTH (HADN'T BEEN ABLE TO GET PAST / COLUMN 40); / 4) CHANGE NORWEGIAN/DANISH DISPLAY SET: / 100 IS @ (WAS CAPITAL A-UMLAUT), / 136 IS ^ (WAS CAPITAL U-UMLAUT), / 140 IS GRAVE (WAS LITTLE A-UMLAUT), / 176 IS UMLAUT (WAS LITTLE U-UMLAUT); / NOTE: HANDLING OF RESTORE CURSOR WHEN SCROLL / REGION LIMITED AND ORIGIN MODE SET AND SAVED / CURSOR IS OUT OF BOUNDS STILL NOT CORRECT. / VERSION 406 - 31 MAY 84 - KAH - 1) MODIFY 'SOFT-TERMINAL-RESET' TO LEAVE / NEWLINE MODE ALONE, AND TO INITIALIZE CURSOR / SAVE BUFFER TO DEFAULTS; / 2) RESPOND TO REQUEST FOR UDK LOCK STATUS WITH / ESC [ ? 2 3 LITTLE-N (NO UDK SUPPORT); / 3) DETERMINE COMPOSE TABLE LOCATION FROM ROM / DATA AT POWER-ON, MARK INVALID SPACE AS 0000 / IN THE ODT TABLE (ALLOWS AN APPLICATION TO / ENTER ITS OWN COMPOSE TABLE LOCATION); / 4) DON'T ALLOW COMPOSE MODE TO BE SET IF THERE / ISN'T A VALID TABLE LOCATION; / 5) PARAMETERIZE COMPOSE TABLE HANDLING TO / ALLOW USER-DEFINED TABLE (ADDRESS AND FIELD); / 6) ADJUST TOP AND BOTTOM WHEN RESTORING CURSOR / TO HANDLE CASE OF CURSOR OUTSIDE SCROLL REGION / WHEN ORIGIN MODE RESTORED 'SET'. / VERSION 405 - 21 MAY 84 - KAH - 1) SEND A NUL TO USER AS 0000 (NOT 4000). / VERSION 404 - 18 MAY 84 - KAH - 1) WAIT AT LEAST TWO EOFS IN CRTINI TO / ENSURE SCREEN ERASED; / 2) DON'T CLEAR DPAR ERASE BITS WHEN SCREEN / IS TO BE ERASED AS A SIDE-EFFECT; / 3) TURN OFF WAIT LED WHEN KAMMOD RESET / IN DECSTR; / 4) ENABLE SCREEN VIDEO WHENEVER PR3/17/7777 / IS ISSUED, REGARDLESS OF STATE REQUESTED; / 5) DON'T IGNORE C1 CONTROLS RECEIVED WHEN / SCROLLING. / VERSION 403 - 10 MAY 84 - KAH - 1) FIX LOCAL FUNCTION KEYS IN COMPATIBILITY / MODE (HAD BEEN MUTE IN LEVEL 1); / 2) SAVE CODE IN POWER-ON ROUTINE BY / INITIALIZING PARAMETERS IN LOAD RATHER THAN IN / CODE; / 3) FIX INITIALIZATION OF DEC MULTINATIONAL / SUPPLEMENTAL CHARACTER SET (HADN'T MAPPED / UNUSED CODES TO THE ERROR CHARACTER); / 4) ADD PR3/0030/7777 TO ISSUE THE CAF IOT / AND HANDLE LK201 AND EOF FLAGS (MAY DROP A / KEYSTROKE, MAY BE IN PANEL MEMORY FOR UP TO / 20 MILLISECONDS), A CAF ISSUED BY THE USER / CAN KILL SLUSHWARE BY EATING ITS FLAGS; / 5) ATTEMPT TO MINIMIZE SCREEN JITTER DURING / IL, DL, AND STBM BY ADJUSTING RAT BEFORE / MOVING LINE DATA; / 6) ATTEMPT TO ALLEVIATE SLOW SCROLL / GRANULARITY BY HANDLING EOF DURING PANEL / EXECUTION EXCEPT WHEN CERTAIN LONG DURATION / EVENTS TAKE PLACE. / VERSION 402 - 07 MAY 84 - KAH - 1) ADD PR3/0026/7777 TO SELECT COLUMN MODE / WITHOUT CLEARING SCREEN; / 2) ADD PR3/0027/7777 TO SELECT SINGLE-CHAR / FUNCTION KEY MODE; / 3) REMOVE MASK TO EIGHT BITS FOR CHARACTERS / SENT TO USER (VIA KRB, ETC). / VERSION 401 - 04 MAY 84 - KAH - 1) ENSURE HARDWARE ERASE BITS ARE CLEARED / AT THE FIRST AVAILABLE EOF (HAD CAUSED ED0 TO / ACT AS ED2 SOMETIMES). / VERSION 400 - 01 MAY 84 - KAH - 1) BUMP REVISION TO INDICATE THAT WE RUN ON / DECMATE III AND IV AS WELL AS DECMATE II. / VERSION 311 - 01 MAY 84 - KAH - 1) FIX CURSOR STYLE SETUP BUG. / VERSION 310 - 01 MAY 84 - KAH - 1) ENSURE CURSOR STYLE MAINTAINED IN SETUP / BITS; / 2) MAKE C1-XMIT-INTRODUCER MODE INDEPENDENT OF / LEVEL 2 MODE AND HOST-PORT-ENVIRONMENT (MUST / TEST ALL THREE WHEN READY TO XMIT A C1 CONTROL / CHARACTER); / 3) LOCK THE KEYBOARD WHEN QUEUE TO USER IS / WITHIN 16 DECIMAL CHARACTERS OF FULL (WAS 8, / DIDN'T ALLOW FOR DA2 RESPONSE). / VERSION 307 - 24 APR 84 - KAH - 1) RETURN TO USER DURING PROCESSING OF DECALN / CAUSE WE HAD BEEN DROPPING COMM CHARACTERS; / 2) EXPAND EOFCTR DATA BLOCK, ADDING TWO WORDS / AT THE END FOR OPERATING SYSTEMS TO STORE A / DATE, INITIALIZED TO ZEROES; / 3) ADD PR3/0024/7777 TO ENABLE/DISABLE DECSTR, / TO AVOID SIDE AFFECTS OF SELECTING TERMINAL / MODE DURING SETUP; / 4) ADD PR3/0025/7777 TO ENABLE/DISABLE CURSOR / VISIBILITY, ALLOWS SETUP TO SUPRESS CURSOR / WITHOUT AFFECTING USER'S CURSOR SELECTION. / VERSION 306 - 19 APR 84 - KAH - 1) ADD A TWO-WORD COUNTER OF END-OF-FRAME / INTERRUPTS, POINTED TO BY THE ODT TABLE; / 2) CHANGE OPERATION OF 'WPSMOD' (PR3/10) TO / BE 'COMPATIBILITY' MODE, RESET ALWAYS / PASSES ESC-BS-LF AS C0 CONTROLS AND OTHER / FUNCTION KEYS AS SEQUENCES, SET OBEYS TIA / SPEC; / 3) CHANGE AUTOREPEAT RATE OF NON-LOCAL / KEYS TO MATCH REST OF KEYBOARD (30 HZ). / VERSION 305 - 10 APR 84 - KAH - 1) FIX HANDLING OF TEMPORARY VARIABLES WHEN / SENDING CHARACTERS TO USER, HAD HUNG UP / KEYBOARD IF FUNCTION KEYS NOT KRB'ED BY USER / FAST ENOUGH; / 2) DISABLE KATAKANA AND USER-DEFINED CHARACTER / SETS IF DECMATE III OR IV; / 3) ADD ROUTINE FOR ACCESSING DEC TECHNICAL / CHARACTER SET FOR DECMATE III OR IV, WON'T / BE IN USER-RAM, WILL BE IN QUADRANT 4 OF ROM. / VERSION 304 - 03 APR 84 - KAH - 1) FIX AUTOREPEAT (I HOPE); / 2) FIX COMPOSE (I HOPE); / 3) FIX KEYBOARD ERROR BELL. / VERSION 303 - 02 APR 84 - KAH - ** NOT A WORKING VERSION ** / 1) ADD AUTOREPEAT TO SETUP PARAMETERS; / 2) ALLOCATE FIXED ADDRESSES (1)0020 AND / (1)0021 FOR SLUSHWARE AND ROM IDS; / 3) ALLOCATE SPACE IN FIELD 7 FOR COMPOSE / TABLES TO BE CROSS-LOADED BY USER; / 4) ENSURE VT AND FF HANDLED AS LF FOR PENDING / CHARACTER STUFF; / 5) ADD SOME COMPOSE CODE (NOT COMPLETE). / VERSION 302 - 02 MAR 84 - KAH - 1) ADD ROM ID AS THIRD PARAMETER OF DA2 / RESPONSE; / 2) LOAD SETUP PARAMETER WORD WITH CURRENT / STATES BEFORE STARTING SETUP OR PRQ'ING / PANEL DATA TO USER; / 3) AVOID REDUNDENT KEYBOARD LED CODE AT / POWER-ON; / 4) ADD PR3/0023 TO DISABLE 132 COLUMN MODE / ESCAPE SEQUENCE REQUESTS; / 5) CHANGE CRTC PROGRAMMING IF ROM ID SAYS / WE ARE A DECMATE IIE OR III. / VERSION 301 - 21 DEC 83 - KAH - 1) FIX CURSOR SAVE/RESTORE TO CLEAN UP / VARIABLE USAGE (HAD GOTTEN CORRUPTED BY / UNSYNCHRONIZED PRQS). / VERSION 300 - 19 DEC 83 - KAH - 1) TAKE OUT EXTRA EOFS FROM ERASE-IN-DISPLAY / (WASN'T THE RIGHT FIX); / 2) FIX ERASE-IN-DISPLAY FROM RIGHT COLUMN BY / FAKING CURSOR TO LEFT OF NEXT ROW AND BY / CLEARING CURRENT CHARACTER IN SOFTWARE. / VERSION 277 - 16 DEC 83 - KAH - 1) FIX SET SINGLE WIDTH LINE IN 132-COLUMN / MODE (HAD CLEARED A FIELD OF DISPLAY / MEMORY); / 2) ADD POINTER TO KEYBOARD MAP IN THE ODT / TABLE TO ALLOW APPLICATIONS TO CROSS-LOAD / MAPS FOR NON-US OR SCIENTIFIC KEYBOARDS; / 3) WAIT TWO MORE EOFS WHEN ERASING DISPLAY / (HAD FAILED TO ERASE-TO-END IF ON TOP ROW). / VERSION 276 - 07 NOV 83 - KAH - 1) BUG FIX: TURN OFF 'WAIT' LED WHEN / KEYBOARD REENABLED; / 2) BUG FIX: FIX PRQ BLOCK MOVES; / 3) BUG FIX: FIX BELL RINGING CODE; / 4) EXPAND SETUP PARAMETERS TO INCLUDE / KEYCLICK VOLUME, BELL DISABLE, BELL VOLUME, / VT200 MODE, INTRODUCER MODE, AND HOST PORT / ENVIRONMENT; / 5) CLEAR QUEUE TO USER UPON SELECTION OR / DESELECTION OF IDIN MODE (TO AVOID MIXED / DATA TYPES); / 6) DON'T SEND AUTOMATIC COMMANDS (BELL, CLICK, / LED, AUTOREPEAT INHIBIT) TO KEYBOARD WHEN / IN IDIN MODE; / 7) ALLOW '>' AS A DESIGNATING SEQUENCE FOR THE / USER-DEFINED CHARACTER SET (SINCE WE LOAD / THE USER RAM WITH THE TECHNICAL CHARACTER / SET). / VERSION 275 - 04 NOV 83 - KAH - ** NOT A WORKING VERSION ** / 1) BUG FIX: TURN OFF 'WAIT' LED WHEN / KEYBOARD REENABLED AFTER QUEUE TO USER / EMPTIED; / 2) BUG FIX: HOLD OFF KEYBOARD IF NOT ENOUGH / ROOM IN QUEUE TO USER (HAD GOTTEN PARTIAL / ESCAPE SEQUENCES); / 3) BUG FIX: ENSURE AUTOREPEATING KEY IGNORED / AFTER KEYBOARD REENABLED (HADN'T KEPT TRACK / OF LAST VALID KEYSTROKE); / 4) TIGHTEN PRQ LOOPS USED FOR TRANSFERRING / DATA TO/FROM PANEL RAM; / 5) ADD POINTER TO ROW ADDRESS TABLE IN THE / ODTTAB (TO CLEAN UP USE OF FAST BLOCK MOVES / TO DISPLAY MEMORY); / 6) ADD PR3/0020 TO SELECT AN 'IDIN' MODE, IN / WHICH ALL KEYCODES ARE PASSED DIRECTLY TO / THE USER (FOR HANDLING IDIN HARDWARE); / 7) ADD PR3/0021 TO SELECT KEYCLICK VOLUME (HAD / LOST CAPABILITY OF DISABLING KEYCLICK WHEN / WE STARTED SOFT KB DISABLE); / 8) ADD PR3/0022 TO SELECT BELL VOLUME. / VERSION 274 - 13 OCT 83 - KAH - 1) CHANGE SPANISH DISPLAY SET FROM / SECTION TO ACUTE ACCENT, AND FROM TILDE / TO UMLAUT ACCENT; / 2) ADD FINNISH (5), NORWEGIAN/DANISH (6), / AND SWEDISH (7) NATIONAL DISPLAY SETS / WITH THE GIVEN FINAL DESIGNATING / CHARACTER; / 3) ADD PR3/0017 TO ALLOW SELECTION OF / SCREEN AUTO-BLANK ENABLE/DISABLE / (AC<11> = 0 IMPLIES OK TO BLANK, = 1 / IMPLIES NEVER BLANK). / VERSION 273 - 07 OCT 83 - KAH - 1) REMOVE TOP AND BOTTOM MARGINS FROM / SAVE CURSOR BUFFER; / 2) ALLOW TAB KEY TO AUTO-REPEAT. / VERSION 272 - 08 AUG 83 - KAH - 1) ALLOW 'HOLD SCREEN' TO WORK EVEN IF / KEYBOARD DISABLED; / 2) ALLOW LOCAL FUNCTION KEYS WHEN KB / DISABLED IF LOCAL FUNCTION KEY MODE IS / SET, SOUND KEYCLICK; / 3) CHANGE KBYBRD ROUTINE TO PUT THE KEYCODE / INTO THE MQ BEFORE TESTING FOR KB LOCKED; / 4) HANDLE 'SHIFT', 'CONTROL', 'CAPS' AND / 'ALLUPS' WHEN THE KEYBOARD IS DISABLED. / VERSION 271 - 05 AUG 83 - KAH - 1) ALL NON-US NATIONAL CHARACTER DISPLAY / SETS LOSE BLINK TO GET EXTENDED ADDRESS; / 2) CHANGE ITALIAN DISPLAY TO LOWER-CASE / I-GRAVE, WAS UPPER-CASE; / 3) CHANGE FRENCH DISPLAY TO UMLAUT, WAS / TILDE; / 4) CHANGE DUTCH DISPLAY TO 3/4 (WAS @), TO / LOWER-CASE IJ (WAS LEFT BRACKET), TO UMLAUT / (WAS LEFT BRACE), AND TO FLORIN (WAS / VERTICAL BAR); / 5) MOVE INITIALIZATION OF C1 XMIT MODE AND / WPS MODE (ESC-BS-LF) TO RESET-TO-INITIAL- / STATE (WAS IN RETURN FROM SETUP, CAUSING / PROGRAMMED ESC-BS-LF KEYS TO TURN INTO / ESCAPE SEQUENCES AFTER SETUP); / 6) HANDLE MULTIPLE SELECTIVE PARAMETERS FOR / TAB CLEAR; / 7) CHANGE RESPONSE TO DA1 TO 'LEVEL 2', WAS / 'LEVEL 1'; / 8) CHANGE PANEL REQUEST HANDLING TO USE A / LOOKUP TABLE (WAS HARD-CODED); / 9) ADDED MASTER MENU TO LIST OF OPERATING / SYSTEMS REGISTERED; / 10) ADDED PRQS 12 AND 13 FOR HANDLING LOCAL / FUNCTION KEYS. / VERSION 270 - 01 JUL 83 - KAH - 1) FIX 'ED' AND 'EL' (BUG FROM PREVIOUS / VERSION); / 2) FIX SHIFT-LOCK MODE (BUG FROM PREVIOUS / VERSION). / VERSION 267 - 01 JUL 83 - KAH - 1) ADDED NOTE FOR RESERVED SPACE IN FIELD ONE / FOR OPERATING SYSTEM DEPENDENT INFORMATION; / 2) RECEIVED 240(8) CHARACTER DISPLAYS AS THE / ERROR CHARACTER, WAS IGNORED; / 3) HANDLE MULTIPLE SELECTIVE PARAMETERS IN / 'ED' AND 'EL'; / 4) PERFORM SOFT RESET IF VT52 MODE SELECTED / FROM LEVEL 2 (NOT LEVEL 1 THOUGH); / 5) VT52 MODE ONLY RETURNS TO LEVEL 1 (NEVER / LEVEL 2); / 6) 'DECSC' AND 'DECRC' SAVE THE SCROLLING / REGIONS IN BOTH LEVELS, WAS JUST LEVEL 2; / 7) 'SGR' CAN SELECTIVELY DISABLE CHARACTER / ATTRIBUTES IN BOTH LEVELS, WAS JUST LVL 2; / 8) 'ICH' ALLOWED ONLY IN LEVEL 2, WAS IN BOTH / LEVELS; / 9) 'DECSTR' TURNS ON CURSOR, REGARDLESS OF / THE SETUP SELECTION; / 10) IN SHIFT-LOCK MODE, TYPING THE SHIFT KEY / WILL TURN OFF THE LOCK STATE IF SET, WAS / JUST LIKE CAPS-LOCK MODE; / 11) RESET 'SHIFT' AND 'CONTROL' FLAGS WHEN / INVOKING ROM CODE FOR SETUP, ETC. / VERSION 266 - 15 JUN 83 - KAH - 1) REMOVE SETUP BITS THAT ARE NOT SUPPORTED / BY ROM SETUP CODE (CONFORMANCE LEVEL, / HOST PORT ENVIRONMENT, CAPS/SHIFT LOCK / MODE, COMPOSE ENABLE MODE). / VERSION 265 - 13 JUN 83 - KAH - 1) SWAP ENTRY POINTS FOR C1 XMISSION MODE / SELECTION (WERE BACKWARDS). / VERSION 264 - 10 JUN 83 - KAH - 1) CHANGE RANGE CHECK IN PR3 DISPATCHER TO / ALLOW NEW COMMANDS; / 2) CHANGE NUMBER OF SETUP BITS USED TO ALLOW / FOR NEWLY ASSIGNED BITS. / VERSION 263 - 10 JUN 83 - KAH - 1) ADD CAPS/SHIFT LOCK MODE TO SETUP BITS / AND MAKE A PRQ TO SELECT IT; / 2) ADD COMPOSE ENABLE TO SETUP BITS AND MAKE / A PRQ TO ENABLE/DISABLE IT; / 3) REMOVE EXTRA COPIES OF PRINTER AND COMM / BAUD RATES; / 4) MOVE 'EXIT' TO FOLLOW 'MOD10' (SAVES CODE, / EASIER TO READ); / 5) REMOVE EXTRANEOUS 'CLA'S FROM 'MOD10' AND / 'EXIT' (SPEEDS PROCESSING); / 6) SPEED UP 'SLUIN5' BY ADDING RETURNS FROM / THE MIDDLE OF THE ROUTINE; / 7) ADD SOFT TERMINAL RESET ESCAPE SEQUENCE / (ESC [ ! LITTLE-P); / 8) ALLOW SELECTION OF VT52 MODE FROM LEVEL 1; / 9) DON'T CHANGE C1 XMIT MODE WHEN SELECTING / VT52 MODE (NEVER USED); / 10) RESET CHARACTER MASK WHEN EXITING VT52 / MODE; / 11) ENSURE NO AUTOWRAP PENDING WHEN RESTORING / CURSOR WITH RESULTING CURSOR NOT AT THE END / OF THE LINE; / 12) ENSURE TAB CLEAR DEFAULT IS TO CLEAR TAB / STOP (HAD IGNORED IT); / 13) MOVE CLEAR SINGLE SHIFT AND AUTOWRAP / PENDING FROM SFTRST TO RISRT; / 14) ENSURE KEYBOARD ACTIVITY KEEPS SCREEN FROM / BLANKING, EVEN IF KEYBOARD DISABLED; / 15) HANDLE CAPS/SHIFT LOCK IN KEYBOARD CODE; / 16) REMOVE KEYBOARD RESET CODE (SHFT-CNTL-CR); / 17) MODIFY LOCAL FUNCTION KEY SEQUENCES FOR / SHIFT (?) AND CONTROL (>); / 18) TRANSLATE DEAD DIACRITICALS TO USASCII / EQUIVALENT IF COMPOSE DISABLED (MAY / CONFLICT WITH SOME NATIONAL DISPLAY SETS); / 19) FIX BUG IN SPANISH DISPLAY SET (CAPITAL / N TILDE WAS WRONG); / 20) MOVE VT52 CHARACTER SET SELECTION TO FRONT / OF LOOKUP TABLE TO SPEED PROCESSING (HOPE / TO MINIMIZE NEED FOR XOFFS IN 'MONSTA' AND / 'HPCALC'. / VERSION 262 - 26 MAY 83 - KAH - 1) MOVE 'RQDSPS' FROM 7600 PAGE, HAD BEEN / LOSING THE TAIL END OF 'PRQDSP'. / VERSION 261 - 26 MAY 83 - KAH - 1) ENSURE RESET_TO_INITIAL_STATE CALLS THE / SOFT_TERMINAL_RESET ROUTINE (COMMON CODE / HAD BEEN MOVED IN PREVIOUS VERSION); / 2) ENSURE ENTIRE SAVE_CURSOR_BUFFER SAVED AT / POWER_ON, SO THAT LEVEL 2 RESTORE CURSOR / HAS SOMETHING TO USE FOR SCROLL MARGINS; / 3) ADD KEYBOARD POWER_ON_RESET VIA THE KEY / COMBINATION 'SHIFT-CONTROL-RETURN'; / 4) DON'T ALLOW THE SELECT_ENVIRONMENT PRQ TO / SELECT AN 8-BIT MASK IN LEVEL 1 (STILL SETS / 8-BIT ENVIRONMENT FOR LATER USE IN LEVEL / 2); / 5) MASK CHARACTERS TO 7 OR 8 BITS FROM USER / PRQ BEFORE CALLING 'DISPLA', TAKE MASK OUT / OF 'DOCHAR'; / 6) ONLY ALLOW SELECTIVE DISABLINGS OF / CHARACTER RENDITIONS IN LEVEL 2. / VERSION 260 - 25 MAY 83 - KAH - 1) ENSURE MODIFIED INSTRUCTIONS IN SELF-LOAD / ARE INITIALIZED DYNAMICALLY; / 2) EXPAND CURSOR SAVE BUFFER FOR SCROLL / MARGINS; / 3) SET G2 AND G3 TO DEC_SUPPLEMENTAL IF IN / LEVEL 2 (AT SOFT TERMINAL RESET); / 4) DON'T CHANGE HOST_PORT_ENVIRONMENT EXCEPT / VIA PRQ OR SETUP; / 5) ONLY ALLOW 8-BITS IN LEVEL 2; / 6) FIX SETTING WPS_MODE AT RETURN FROM SETUP; / 7) MAKE A SOFT_TERMINAL_RESET SUBROUTINE; / 8) ONLY ALLOW S7C1T AND S8C1T IN LEVEL 2. / VERSION 257 - 24 MAY 83 - KAH - 1) FIX SELF-L0AD SO INITIAL CONSTANTS ARE NOT / MODIFIED (HAD WIPED OUT SYSTEM DISKS WHEN / SAVING SETUP PARAMETERS USING OLD ROMS); / 2) CHANGE SAVE/RESTORE CURSOR SO LEVEL 2 / BUFFER CONTAINS GR AND THE SCROLL MARGINS; / 3) ADD PARAMETERS TO SELECT GRAPHIC RENDITION / TO SELECTIVELY DISABLE CHARACTER DISPLAY / ATTRIBUTES; / 4) CHANGE CROSSFIELD DISPATCHERS SO ONLY DATA / FIELD SET UP ONLY AT ENTRY (HAD SET UP DATA / AND INTRUCTION FIELDS AT ENTRY AND EXIT). / VERSION 256 - 12 MAY 83 - KAH - 1) WAIT AN EXTRA EOF IN 'CRTINI' BEFORE / ERASING SCREEN TO SYNC WITH THE CRTC; / 2) ADD A 'PRQACT' FLAG (PRQ ACTIVE) SO THAT / THE 'WTFRAM' ROUTINE WON'T RETURN TO THE / USER DURING PRQ PROCESSING. / VERSION 255 - 12 MAY 83 - KAH - 1) ENSURE DATA FIELD RESET IN 'BLNKLN' (HAD / OVERWRITTEN DISPLAY FIELD DURING ERASE- / FROM-START-OF-DISPLAY); / 2) MOVE WAIT FOR EOFS FROM 'DOSETU' TO / 'DSETUP' TO FIX ERROR IN ERASING TOP LINE / WHEN USING SETUP MENU TO SWITCH FROM 132 TO / 80 COLUMN MODE; / 3) MOVE 'TDATA' AND INCREASE ITS SIZE (MAY / HAVE OVERWRITTEN START OF 'EOFPRO' SO NO / ESCAPE SEQUENCE WAS EVER PARSED. / VERSION 254 - 09 MAY 83 - KAH - 1) MOVE 'RAT', 'TDATA', AND 'PARTB' OUT OF / PAGE 1 (CAN'T OVERWRITE LOCATIONS 200-377 / CAUSE OLD ROMS REWRITE THIS AREA WHEN / SAVING SETUP PARAMETERS); / 2) WAIT A COUPLE OF EOFS UPON RETURN FROM ROM / SETUP MENU (SHOULD ALLOW SUBSEQUENT ERASES / TO SYNC PROPERLY, HAD BEEN IMPROPERLY / ERASING THE SCREEN); / 3) ENSURE KB LEDS PROPERLY SET/RESET AT RIS / (IN KBXQIN); / 4) DISABLE KEYCLICK TWICE AT KBXQIN (RIS) IN / CASE THE FIRST IS INTERPRETED BY THE KB AS / THE FINAL PARAMETER OF AN INTERRUPTED KB / COMMAND STRING (ENSURES IT IS SEEN AS A / COMMAND). / VERSION 253 - 05 MAY 83 - KAH - 1) CLEAR THE 'CRTC' WORD AT ENTRY TO THE / RESET-TO-INITIAL-STATE ROUTINE SO THAT / SUBSEQUENT SETTING OF INDIVIDUAL BITS / DOESN'T GET OUT OF SYNCH (HAD SEEN A / PROBLEM WITH REVERSE VIDEO). / VERSION 252 - 05 MAY 83 - KAH - 1) ALLOW 'ICH' IN LEVEL 1 (TIA SPEC CHANGED); / 2) WHEN RESETTING TO SETUP PARAMETERS, SET UP / THE SCREEN TYPE (NORMAL OR REVERSE VIDEO) / BEFORE INITIALIZING THE CRTC (HOPE TO FIX / BUG SEEN WHEN BOOTING CP/M IN GERSTLE / MODE); / 3) AT START OF RESET-TO-INITIAL-STATE CODE, / WAIT TWO END-OF-FRAMES TO ALLOW THE / KEYBOARD TRANSMITTER QUEUE TO RUN DOWN / (HOPE TO FIX BUG OF HOLD SCREEN LED TURNING / ON WHEN BOOTING CP/M); / 4) ENSURE IN 8-BIT ENVIRONMENT BEFORE ALLOWING / 8-BIT C1 INTRODUCERS WHEN SELECTING CONFOR- / MANCE LEVEL; / 5) DON'T RING THE KEYBOARD ERROR BELL WHEN AN / INOPERATIVE KEY IS TYPED (COMPOSE OR / INVALID CONTROL KEY) (TIA SPEC CHANGED); / 6) TERMINATE PROCESSING OF AN UNIMPLEMENTED / CONTROL STRING UPON RECEIPT OF ESC, CAN, / SUB, OR ANY C1 CONTROL CHARACTER (TIA SPEC / CHANGED, MAY TERMINATE ON MOST C0 CONTROL / CHARACTERS EVENTUALLY??). / VERSION 251 - 04 APR 83 - KAH - 1) TRY FORCING DATA AND INSTRUCTION FIELDS / AT ENTRY AND EXIT OF CROSS-FIELD DISPATCH / ROUTINES (SHOULDN'T NEED THIS, BUT MAY / HELP CATCH A BUG). / VERSION 250 - 04 APR 83 - KAH - 1) HANDLE 'WAIT' LED ON RETURN FROM CALLING / PUSHSL FROM FIELD 0 (ENSURES CORRECT STATE / OF THE LED); / 2) REMOVE 'HOLD SCREEN' KEY ESCAPE SEQUENCE / FROM TABLE (NEVER USED). / VERSION 247 - 01 APR 83 - KAH - 1) HANDLE 'WAIT' LED ON RETURN FROM CALLING / 'PUSHSL' FROM FIELD ONE, RATHER THAN / CALLING BACK FROM FIELD ZERO (HAD BEEN / CORRUPTING THE CROSSFIELD DISPATCH ROUTINE / RETURN ADDRESSES). / VERSION 246 - 01 APR 83 - KAH - 1) CHANGE POINTERS TO STRINGS FOR KEYBOARD / CONTROL TO POINT TO ONE ADDRESS PRIOR TO / THE STRING; / 2) ENABLE AUTOREPEAT WHEN INITIALIZING KEY- / BOARD; / 3) FIX BUG IN KEYCLICK (HAD SENSE OF FLAG / INVERTED); / 4) FIX BUG IN HANDLING EDITING KEYS (HAD / CRASHED IF AN EDITING KEY WAS TYPED); / 5) CLEANUP USER QUEUE ROUTINES (SILSET, / POPSIL, PUSHSL); / 6) MAKE A SEPARATE ROUTINE TO HANDLE THE HOLD / LED. / VERSION 245 - 31 MAR 83 - KAH - 1) DO DOUBLE SKIPS FOR KEYBOARD TRANSMIT / AND RECEIVE FLAGS TO AVOID HARDWARE BUG; / 2) ENSURE 'SNDKBQ' RETURNS WITH AC=0000; / 3) SEND A STRING TO KEYBOARD FOR RECEIVED / 'BEL' CHARACTER, RINGS BELL AT MAXIMUM / VOLUME; / 4) USE HALF-VOLUME BELL FOR KEYBOARD ERRORS; / 5) DON'T ALLOW AUTO-REPEAT OF KEYBOARD ERRORS. / VERSION 244 - 30 MAR 83 - KAH - 1) TERMINATE ESCAPE SEQUENCE ON RECEIPT OF A / C1 CONTROL CHARACTER; / 2) PUT ERROR CHARACTERS IN THE DEC MULTI- / NATIONAL SUPPLEMENTAL SET IN PLACE OF ANY / UNDEFINED CHARACTERS; / 3) ENSURE CURSOR HOMED FOR SCREEN ALIGNMENT / DISPLAY; / 4) HANDLE ESC-BS-LF KEYS APPROPRIATELY FOR / CONFORMANCE AT RIS; / 5) DO SOFT KEYBOARD DISABLE, HANDLE KEYCLICK / IN FIRMWARE, RING BELL FOR KEYBOARD ERRORS; / 6) ADD 'SNDKBQ' ROUTINE TO SEND COMMANDS / STRINGS TO KEYBOARD; / 7) INITIALIZE KEYBOARD TO AUTOREPEAT NON-LOCAL / FUNCTION KEYS AND EDITING KEYS; / 8) ADD A ROUTINE TO HANDLE THE KEYBOARD 'WAIT' / LED, CALL IT WHENEVER 'KAMMOD' OR 'LOCKED' / FLAGS ARE CHANGED. / VERSION 243 - 29 MAR 83 - KAH - 1) MOVE 'CRTC' TO PAGE ZERO; / 2) ENSURE CRTC SYNCS PROPERLY AFTER CALL TO / ROM FOR SETUP OR HALT SCREENS (FAKE HISTORY / OF COLUMN WIDTH TO 80 TO MIMIC THOSE / SCREENS; / 3) ENSURE VT52 MODE ONLY ACCESSIBLE FROM / LEVEL 1; / 4) DON'T HANDLE END_OF_FRAME STUFF AT PANEL / EXIT (SEE VERSION 242), JUST CLEAR THE EOF / FLAG; / 5) ADD ERASE CHARACTER FUNCTION (ECH); / 6) ADD SLUSHWARE VERSION NUMBER TO SECONDARY / DEVICE ATTRIBUTES RESPONSE. / VERSION 242 - 29 MAR 83 - KAH - 1) FIX BUG IN FIELD ZERO TO FIELD ONE CROSS / FIELD DISPATCH RECEIVER ROUTINE; / 2) HANDLE END_OF_FRAME INTERRUPT IF ESSF FLAG / IS SET AT PANEL EXIT (THIS MAKES SLOW / SCROLL LOOK SMOOTH BUT COULD CAUSE PROBLEMS / WITH THE DISPLAY IF LOTS OF STUFF HAPPENING / AROUND THE VERTICAL BLANKING INTERVAL,TRY / THIS FOR A WHILE); / 3) WAIT ONE-HALF SECOND BEFORE REENABLING THE / CRTC VIDEO WHENEVER THE CRTC HAS BEEN / STOPPED FOR A COLUMN WIDTH CHANGE, THIS / SHOULD ALLOW THE CRTC TO RESYNC AND NOT / BOUNCE SO MUCH. / VERSION 241 - 28 MAR 83 - KAH - 1) FIX BUGS FROM PREVIOUS EDIT RELATED TO / CROSSFIELD REFERENCES AND CHANGED LABELS; / 2) REENABLE PRQ CODE THAT WAS DISABLED IN / VERSION 234 TO MAKE ROOM FOR SELF-LOAD / AND OTHER JUNK. / VERSION 240 - 25 MAR 83 - KAH - ** NOT A WORKING VERSION ** / 1) ADD CROSSFIELD DISPATCH ROUTINES; / 2) MOVE KEYBOARD PROCESSING CODE TO FIELD ONE / TO MAKE MORE ROOM IN FIELD ZERO; / 3) CHANGE SUBROUTINE CALLS TO STANDARD FORMAT / 'JMS I XYYYYY'; / 4) INITIALIZE SCREEN BLANK COUNTERS AT / POWER-ON; / 5) MOVE SGRTAB TO FIELD ZERO TO SAVE SOME / CDF COMMANDS. / VERSION 237 - 23 MAR 83 - KAH - ** NOT A WORKING VERSION ** / 1) MOVE ROW ADDRESS TABLE TO FIELD 0, ADDRESS / 0200; / 2) MOVE CSI PARAMETER STORAGE TO FIELD 0, / ADDRESS 0314; / 3) DON'T ATTEMPT TO CLEAN UP THE RAT FOR RAM / REFRESH IF IN 132-COLUMN MODE (DON'T NEED); / 4) SPEED UP LINE SWAP FOR RAT CLEANUP BY DOING / TWICE AS MUCH PER LOOP; / 5) CHANGE CHARACTER_CODE_TO_GENERATOR_ROM_ / ADDRESS ROUTINE TO USE 140(8) WORD TABLES, / HAD USED 200(8) WORD TABLES; / 6) MOVE FIELD ONE DYNAMIC TABLES TO HIGH PART / OF FIELD TO MAKE ROOM FOR CODE LOADED IN / AS SLUSHWARE (LOADS FROM (0)0000 TO / (1)5123). / VERSION 236 - 22 MAR 83 - KAH - ** NOT A WORKING VERSION ** / 1) FIX SELF-LOAD BUG, HAD TRIED TO READ AN / EXTRA SECTOR FROM TRACK 79.; / 2) CLEAR CONTROL_STRING_IN_PROGRESS FLAG / (DCSFLG) WHEN DOING A RIS; / 3) INCREMENT BLANK SCREEN COUNTER WHENEVER THE / END_OF_FRAME FLAG IS CLEARED (TRY TO HANDLE / BLANK SCREEN FUNCTION EVEN WHEN DOING LOTS / OF OTHER STUFF). / VERSION 235 - 21 MAR 83 - KAH - ** NOT A WORKING VERSION ** / 1) ENSURE CANNOT TAB PAST THE RIGHT MARGIN / (FIXES AN OLD BUG THAT HADN'T SURFACED); / 2) ENSURE DANGLING LABELS FROM COMMENTED-OUT / PR3 CODE RETURN PROPERLY; / 3) CHANGE REST OF AUTO-INCREMENTING REGISTERS / REFERENCES FROM '1X' TO 'REG1X'; / 4) CHANGE SELF-LOAD CODE TO USE THE RX50 / CONVENTION THAT FIRST SECTOR IS 01, NOT 00; / 5) FIX SELF-LOAD ERROR REPORTING SO IT DOES / JMS TO ROM CODE, NOT JMP; / 6) ADD A 'CLA' BEFORE ACCESSING (1)0000 FOR / TEST OF SYSTEM DEVICE (FLOPPY OR WINNIE); / 7) ENSURE KEYBOARD QUEUE INITIALIZED BEFORE / FIRST ATTEMPT TO ENQUEUE IN 'RISRT'. / VERSION 234 - 18 MAR 83 - KAH - ** NOT A WORKING VERSION ** / 1) COMMENT OUT A PAGE OF PRQ CODE TO MAKE ROOM / FOR THE SELF-LOAD CODE; / 2) ADD CODE TO POWER-ON STARTUP TO PERFORM / SLUSHWARE SELF-LOADIF OLD ROMS (PRE-WINNIE) / AND NEW SLUSHWARE (8-BIT); / 3) CHANGE AUTO-INCREMENTING REGISTER / REFERENCES FROM '1X' TO 'REG1X' FOR EASE OF / TRACKING USAGE; / 4) ADD A SUBROUTINE, 'ADTBHC', THAT HOMES THE / CURSOR AND ADJUSTS THE TOP AND BOTTOM / MARGINS; / 5) DON'T CLEAR CONTROL-STRING-IN-PROGRESS FLAG / FOR 'CAN' OR 'SUB', ONLY SUPPOSED TO CLEAR / FOR 'ST' OR \; / 6) ENSURE NO PENDING SINGLE SHIFT (SS2 OR SS3) / WHEN SELECTING VT52 EMULATION MODE; / 7) ENSURE AUTOWRAP-PENDING FLAG IS CLEARED / WHEN ENTERING AUTOWRAP MODE; / 8) MOVE TAB STOPS TO FIELD THREE, (3)7000; / 9) ABSORB 'CRSRE' ROUTINE INTO 'CRSRES', NEVER / CALLED ALONE; / 10) CHANGE 'SGR' TO SAVE SPACE; / 11) ENSURE NO 8-BIT C1 INTRODUCERS SENT IN / 7-BIT ENVIRONMENT; / 12) WAIT A FEW MORE FRAMES WHEN SWITCHING / COLUMN MODES TO ALLEVIATE SCREEN BOUNCE; / 13) REMOVE 'EL0' CODE, NEVER USED; / 14) ENSURE CRTC INITIALIZED EARLIER IN THE / RIS CODE TO ALLEVIATE SCREEN BOUNCE; / 15) ENSURE UNDEFINED CHARACTERS IN THE DEC / SUPPLEMENTAL SET ARE DISPLAYED AS ERRORS. / VERSION 233 - 17 MAR 83 - KAH - 1) ENSURE STARTUP CODE EXECUTED BEFORE BOOT / FROM WINCHESTER; / 2) FIX BUG IN 'PROMAN', HAD CAUSED DELETE KEY / TO LOOK LIKE A RETURN KEY. / VERSION 232 - 15 MAR 83 - KAH - 1) ENSURE SCREEN ERASED WHEN COLUMN MODE / SET OR RESET; / 2) ENSURE COLUMN WIDTH RESTORED ON RETURN FROM / SETUP MENU; / 3) BOOT WINCHESTER SYSTEM ON STARTUP IF LOADED / FROM WINCHESTER; / 4) HANDLE SELECT_CONFORMANCE_LEVEL_2 SECOND / PARAMETER AS A SELECT_C1_TRANSMISSION_MODE; / 5) LIMIT INSERT/DELETE LINE COUNT TO SCROLL / ONLY THE AVAILABLE LINES; / 6) CHANGE PR3/0006 TO EXECUTE ROM CODE WITH A / SELECT WORD IN THE AC (0=SETUP, -1=HALT, / -2=BOOT FLOPPY, -3=BOOT WINCHESTER), WAS / JUST EXECUTE SETUP MENU; / 7) SAVE SLUSHWARE VERSION NUMBER IN FIELD ONE / ADDRESS 'FRMVER' SO WE CAN ACCESS IT LATER / IF NECESSARY. / VERSION 231 - 14 MAR 83 - KAH - 1) ADD SPANISH AND ITALIAN CHARACTER SETS; / 2) AVOID STOPPING CRTC WHEN SETTING COLUMN / MODE IF NO CHANGE IMPLIED (PREVENTS SCREEN / BOUNCE); / 3) ENSURE CONTROL-M DOESN'T EXPAND TO CR-LF IN / NEWLINE MODE; / 4) RE-ENABLE ICH CODE (NOW REQUIRED); / 5) ADD LEVEL 1/LEVEL 2 SELECTION TO THE SETUP / BIT PATTERN; / 6) ADD 7/8 BIT ENVIRONMENT SELECTION TO THE / SETUP BIT PATTERN; / 7) RESERVE FIRST EIGHT DECIMAL WORDS IN FIELD / ONE FOR FIRMWARE/SLUSHWARE HANDSHAKING; / 8) CHANGE SELECTION OF 7/8 BIT ENVIRONMENT / FROM SET/RESET ESCAPE SEQUENCE TO A PANEL / REQUEST; / 9) ENSURE FIRMWARE ROW ADDRESS TABLE (USED FOR / SETUP, HALT, AND STARTUP) IS NOT WIPED OUT / WHEN LOADING SLUSHWARE IN 8-BIT (3:2) MODE. / VERSION 230 - 15 FEB 83 - KAH - 1) FIX BUG IN INSERT/DELETE LINE THAT PUT / ERRORS IN RAT IF LIMITED SCROLLING REGION / AND ORIGIN MODE SET; / 2) CHANGE CRTST ROUTINE TO NOT USE 'MQ' (HAD / CAUSED FIRST KEYCODE AFTER SCREEN BLANK TO / GET CORRUPTED); / 3) RE-ENABLE SELECT_CONFORMANCE_LEVEL_2 FOR / EASE OF DEBUGGING; / 4) MAKE 'SLUIN5' A SUBROUTINE TO ENSURE / MODULARITY AND REMOVE PATHOLOGICAL / CONNECTION; / 5) CHANGE LEVEL 2 DEFAULT TO 7-BIT C1 INTRO- / DUCERS; / 6) CHANGE END-OF-FRAME HANDLING TO SAVE CODE / (IN WTFRAM, SCRLUP, SCRLDN, EL0, ED1, / ERSWT); / 7) DELAY REVERTING TO SINGLE WIDTH ON ERASED / LINES UNTIL THE LINES ARE ERASED; / 8) ELIMINATE 'ICH' ESCAPE SEQUENCE AND CODE / CAUSE THE FUNCTION HAS BEEN ELIMINATED FROM / THE TIA SPEC; / 9) ELIMINATE SEND-RECEIVE MODE CAUSE THE / FUNCTION HAS BEEN REMOVED FROM THE TIA / SPEC. / VERSION 227 - 28 JAN 83 - KAH - CHANGE PR3 14 TO PR3 7300 (CAN'T USE / ARGUMENTS WITH DIRECT DISPATCH PR3). / VERSION 226 - 28 JAN 83 - KAH - ALLOW CONTROL CHARACTERS TO AUTOREPEAT; / BLANK SCREEN IF NO KEYBOARD ACTIVITY FOR / ABOUT 30 MINUTES, REENABLE ON ANY KEYSTROKE; / ADD PR3 14 TO DO CURSOR POSITIONING; / ADD PR3 72X0 TO WRITE CHARACTER STRINGS. / VERSION 225 - 10 JAN 83 - KAH - REMOVE UNREFERENCED LABELS AND CONSTANTS; / FIX THESE BUGS: / 1) ENSURE DELETE DOESN'T ABORT ESCAPE SEQUENCE / (IN SLUIN), / 2) CHANGE PRINTER STATUS REQUEST FROM / ESC [ 1 5 TO ESC [ ? 1 5 / , / 3) CHANGE PRINTER STATUS REPORT FROM / ESC [ 1 3 TO ESC [ ? 1 3 / . / VERSION 224 - 13 DEC 82 - KAH - CHANGE INSERT CHARACTER CODE TO SHUFFLE FOUR / CHARACTERS PER LOOP (IN CHINS), CHANGE DELETE / CHARACTER CODE TO ERASE TWO CHARACTERS PER / LOOP (IN DCH), BREAK UP RESET-TO-INITIAL-STATE / CODE IN ATTEMPT TO MAKE 9600 BAUD (IN RISRT), / NOTE THAT HARDWARE WILL SUPPORT 8 MHZ PANEL / CODE BECAUSE JOHN KIRK IS A GENIUS. / VERSION 223 - 09 DEC 82 - KAH - ATTEMPT TO SPEED UP PROCESSING (TO SUPPORT / 9600 BAUD) WITH THESE CHANGES: / 1) OPTIMIZE TABLE LOOKUP INTERNAL LOOP (XLOOK) / 2) OPTIMIZE LOOP IN DESIGNATE SPECIAL GRAPHICS / SET (SPCSGR) / 3) ONLY USE 136 POSITIONS (WAS 256) IN TAB / STOPS TABLE (TABINT, TABCLR) / 4) OPTIMIZE CLEAR_ALL_TABS INNER LOOP (TABACL) / 5) OPTIMIZE SAVE/RESTORE CURSOR INNER LOOP AND / USE AN EXTRA FRAME (MAPMOV, CRSSR) / 6) MOVE DISPLAY ENABLE TO VERY END OF CRT / INITIALIZATION, ADD A FEW MORE FRAMES TO / FURTHER REDUCE SCREEN BOUNCE (CRTINI) / 7) OPTIMIZE INNER LOOP OF CHARACTER SET / DESIGNATION (USASC, BLDMAP) / 8) CLEAR ONLY UP TO COLUMN 132 (WAS 256) WHEN / CHANGING LINE ATTRIBUTES (DHLB, DHLT, DWL, / SWL) / 9) MOVE SAVE AND RESTORE CURSOR TO TOP OF / THEIR LOOKUP TABLE (F1TAB) / VERSION 222 - 08 DEC 82 - KAH - WAIT FOR EOF FLAG ON RETURN FROM HALT / PROCESSOR, DON'T ALLOW SELECTION OF C1 / ANNOUNCER MODES EXCEPT IN LEVEL II, DON'T / ALLOW DESIGNATION OF SUPPLEMENTAL SET EXCEPT / IN LEVEL II, INITIALIZE G2 SET TO USASCII (WAS / SUPPLEMENTAL SET), DON'T ALLOW SELECTION OF / 8-BIT ENVIRONMENT EXCEPT IN LEVEL II, DON'T / ALLOW SELECTION OF LEVEL II COMPATIBILITY / MODE, REMOVE 'DOSET' CODE (WAS ENTRY TO SETUP / VIA ESC [ 1 3 TILDE - UNUSED), CHANGE DA2 / RESPONSE TO CSI > 3 LITTLE-C (RELEASED FOR / DECMATE II INTERNAL INTERFACE BY TIA), DON'T / LOAD PRELUDE TO THE RAT (NO LONGER USED FOR / ERASE-FROM-START-OF-DISPLAY), WAIT SEVERAL / MORE FRAMES FOLLOWING CRT INITIALIZATION (TRY / TO AVOID SCREEN BOUNCE). / VERSION 221 - 02 DEC 82 - KAH - FIX BUGS (TYPOS) FROM VERSION 220, MOVE CALL / TO CLEAR EOF FLAG TO END OF EOF ROUTINE, FIX / RETURN FROM SLUIN FOR PENDING CHARACTERS, DO / ERASE-FROM-START-OF-SCREEN IN SOFTWARE INSTEAD / OF HARDWARE, OPTIMIZE ERASE FUNCTION DISPATCH / PROCESSING. COMBINE CURSOR VISIBILITY / CONTROL WITH EOF FLAG CLEAR IN CLREOF. / VERSION 220 - 02 DEC 82 - KAH - DO ERASE-IN-LINE IN SOFTWARE INSTEAD OF / HARDWARE (PROBLEM WITH 4 MHZ CLOCK). / VERSION 217 - 24 NOV 82 - KAH - MAKE CURSOR APPLICATION MODE INDEPENDENT OF / KEYPAD APPLICATION MODE (IN 'PROCUR'), MOVE / POWER-ON-CLEAR CODE TO HIGH PAGE IN FIELD 0 SO / THE JUMP TO ROM WORKS CORRECTLY (BUG DIDN'T / ALLOW 16D ROMS TO WORK), RESET AUTOWRAP-PNDING / FLAG (LSTCOL) IN ICH AND DCH, CHANGE DEVICE / ATTRIBUTES REPORT AND SELECT CONFORMATION / LEVEL TO USE 61/62 INSTEAD OF 51/52 (IN SCLVL / AND DA), DON'T ALLOW ICH UNLESS IN LEVEL II / (VT200 MODE), CHANGE CURSOR LINE ATTRIBUTE TO / SINGLE WIDTH IF LINE FULLY ERASED WITH ERASE- / IN-DISPLAY (ED), CHANGE DECALN TO USE CROSS / FROM THE LINE DRAWING SET INSTEAD OF 'E', / DON'T TREAT GR'S 240(8) AS A SPACE - IGNORE / IT INSTEAD, MOVE ROW ADDRESS TABLE UP / BY TWO ADDRESSES IN FIELD 1 FOR ERASE-FROM- / START-OF-DISPLAY. / VERSION 216 - 05 NOV 82 - KAH - ENSURE AUTO-REPEAT DOESN'T CONFLICT WITH / CPODT PATCH AREA AT KBYBRD+1, ENSURE CORRECT / RETURN FROM SLUIN AFTER DEALING WITH PENDING / CHARACTER FROM EOF, FIX CURSOR VISIBILITY CODE / AT EOF. / VERSION 215 - 03 OCT 82 - KAH - FIX SCROLL REGION CURSOR ADDRESSING BUNGLE, / STOP AND START CRT CONTROLLER AT CRTC INIT AND / COLUMN MODE CHANGE. / VERSION 214 - 08 OCT 82 - KAH - FIX 'GETPAR' SO IT DOESN'T LOOP FOREVER ON / ZERO PARAMETERS (IF THEY'RE TO BE IGNORED). / VERSION 213 - 08 OCT 82 - KAH - ENSURE KEYBOARD LED MATCHES LOGICAL CAPS / LOCK STATE (CURRENTLY OFF) IN THE POWER-ON / SEQUENCE (REBOOT FROM SETUP GOES THROUGH THAT / CODE). / VERSION 212 - 08 OCT 82 - KAH - FIX PANEL REQUEST 0011 TO PROPERLY RETURN / THE DISPLAY STATUS (LOGICAL OR OF CRTBSY AND / SCRBSY). / VERSION 211 - 08 OCT 82 - KAH - ADD PANEL REQUESTS FOR SELECT-KEYBOARD-CASE / (AC<11>=0 -> LOWER, =1 -> UPPER) AND REQUEST- / DISPLAY STATUS (RETURNS AC=0000 -> STABLE, / =7777 -> UNSTABLE). / VERSION 210 - 07 OCT 82 - KAH - DISALLOW USE OF ESC [ 1 3 TILDE TO INVOKE / THE SETUP MENU BY PATCHING THE TILDE OUT OF / THE CSI FINAL CHARACTER LOOKUP TABLE (CAN / STILL DO SETUP MENU USING PR3;6;-1). / VERSION 207 - 07 OCT 82 - KAH - CHANGE LOCAL FUNCTION KEY ORDER (WAS: / HOLD, PRINT, BREAK, SETUP, FN4; IS: HOLD, / PRINT, SETUP, FN4 (RESERVED FOR DATA/TALK), / BREAK), CHANGE SETUP INVOCATION TO ESC [ / 1 3 TILDE (WAS ESC [ 1 4 TILDE). / VERSION 206 - 07 OCT 82 - KAH - FIX RAT CLEANUP SO LINE ATTRIBUTES DON'T / CAUSE DISPLAY JUMBLING. / VERSION 205 - 06 OCT 82 - KAH - FIX RAT CLEANUP FOR RAM REFRESH SO THAT / LINE ATTRIBUTES STAY AT THE PROPER LINES. / VERSION 204 - 06 OCT 82 - KAH - CHANGE ERROR CHARACTER TO REVERSE QUERY (WILL / BE IN THE CHARACTER GENERATOR AT POSITION / 177), ENSURE AUTOWRAP LOOKS LIKE CURSOR / MOVEMENT FOR THE CURSOR VISIBILITY CONTROL, / FIX SO SCREEN DOESN'T ERASE AFTER 'SETUP'. / VERSION 203 - 06 OCT 82 - KAH - USE CURSOR HISTORY OVER TWO FRAMES TO / DETERMINE CURSOR VISIBILITY (TURN OFF CURSOR / IF ONLY GRAPHICS NOW BUT HAD CURSOR MOVEMENT / PREVIOUSLY). / VERSION 202 - 06 OCT 82 - KAH - GO TO 8-BIT MODE AND GENERATE FUNCTION KEY / CONTROL SEQUENCES WHEN SELECTING VT200 MODE, / DO ALL CRTC CURSOR POSITIONING AT END-OF-FRAME / TO MAKE THE CURSOR DO-THE-RIGHT-THING, CHANGE / CRTC VERTICAL SYNCH WIDTH (FROM 13 TO 3). / VERSION 201 - 01 OCT 82 - KAH - ENSURE A NUL FROM THE KEYBOARD GETS ENQUEUED / TO THE USER. / VERSION 200 - 01 OCT 82 - KAH - ENSURE A RECEIVED SPACE CHARACTER APPEARS / IN DISPLAY MEMORY AS A 040 SO PR0 REQUESTS CAN / DIFFERENTIATE BETWEEN ERASED AND OVER-WRITTEN / SCREEN DATA (FOR DECMATE I COMPATIBILITY). / VERSION 177 - 29 SEP 82 - KAH - CHANGE PANEL ENTRY TO PROCESS EACH BIT IN / THE PANEL STATUS WORD (WAS DOING ONE-PER-ENTRY / CAUSING INCORRECT EMULATION OF CERTAIN / INSTRUCTIONS), CHANGE MOD30/MOD40/MOD50 TO / SUBROUTINES, REMOVE MOD60 (UNKNOWN PANEL TRAP) / CAUSE WE JUST EXIT ANYWAY. / VERSION 176 - 28 SEP 82 - KAH - IGNORE CSI SEQUENCES WITH COLONS IN THEM, / FIX FINAL CHARACTER DISPATCHING FOR / NON-PRIVATE CSI SEQUENCES, FIX CSI / INTERMEDIATE PARSING. / VERSION 175 - 27 SEP 82 - KAH - ADD SECONDARY DEVICE ATTRIBUTES REQUEST / (ESC [ > LITTLE-C) AND RESPONSE, CHANGE ANSI / PARSER TO ACCEPT ADDITIONAL PRIVATE PARAMETERS / (?>=<), ADD SELECT COMPATIBILITY MODE (ESC [ / PS " LITTLE-P), CHANGE SNDSTR TO GET STRINGS / FROM FIELD 1, DON'T DO THESE UNLESS IN VT200 / (LEVEL 2) MODE: LS2/LS3/LS1R/LS2R/LS3R, CHANGE / SELECTION OF 7/8-BIT ENVIRONMENT TO AN ESCAPE / SEQUENCE (WAS A PRQ), ADD CODE TO SETUP RETURN / TO DESELECT VT200 MODE AND SELECT 7-BIT MASK/ / ENVIRONMENT/INTRODUCERS AND SEND ESC/BS/LF / FROM FUNCTION KEYS. / VERSION 174 - 25 SEP 82 - KAH - FIX PR3 MOVE FUNCTIONS SO THEY NEVER WRAP / AROUND IN A FIELD. / VERSION 173 - 24 SEP 82 - KAH - CHANGE INITIAL RAT TO AVOID ERASE-FROM- / START-OF-DISPLAY'S CLEARING THE TAB STOPS / TABLE, CHANGE TAB INITIALIZATION ROUTINE TO DO / 256 COLUMNS. / VERSION 172 - 24 SEP 82 - KAH - REMOVE FIX FROM PR3 MOVES. / VERSION 171 - 23 SEP 82 - KAH - FIX PR3 MOVE DATA INSTRUCTIONS (WERE MOVING / TOO MUCH DATA). / VERSION 170 - 23 SEP 82 - KAH - FIX MOMENTARY VISIBILITY OF 26TH LINE DURING / ERASE-IN-DISPLAY FOR REVERSE VIDEO. / VERSION 167 - 23 SEP 82 - KAH - CLEAR EOF FLAG AT PANEL EXIT IN ATTEMPT TO / ALLEVIATE SMOOTH SCROLL SYNCH PROBLEMS. / VERSION 166 - 22 SEP 82 - KAH - ATTEMPT TO ALLEVIATE SMOOTH SCROLL / GRANULARITY FOR LF (SCRLUP), ATTEMPT TO FIX / SMOOTH SCROLL SYNCH PROBLEM (SSPOST). / VERSION 165 - 22 SEP 82 - KAH - FIX CURSOR ADDRESSING FOLLOWING SET TOP AND / BOTTOM MARGINS FUNCTION, ATTEMPT TO FIX SMOOTH / SCROLL SYNCH PROBLEM (SSPOST), PICK UP DEVICE / ATTRIBUTES RESPONSE FROM A TEXT STRING, / RESPOND AS A LEVEL ONE DISPLAY TERMINAL WITH / 132-COLUMN EXTENSION. / VERSION 164 - 22 SEP 82 - KAH - SYNCHRONIZE RAT CLEANING WITH EOF TO SUPPORT / COMM FOR IL/DL/STBM, DON'T ENABLE KEYBOARD IF / USER WANTS IT DISABLED. / VERSION 163 - 21 SEP 82 - KAH - LIMIT PR3 MOVES TO ONE FIELD (NO WRAP), TURN / OFF CURSOR DURING ACTIVE SCROLL, FIX EQUATES / FOR KRB2 AND KSF2. / VERSION 162 - 20 SEP 82 - KAH - INVOKE CODE TO REARRANGE RAT FOR IL, DL AND / STBM. / VERSION 161 - 20 SEP 82 - KAH - CHANGE 'MODE' TO COLMOD', INVOKE ROM-BASED / CODE FOR HALT PROCESSING, EXPAND CPODT PATCH / AREAS TO SEVEN WORDS, CHANGE ODTTAB (DELETE / 'KBYBRD+1', CHANGE 'PUSHSL+1' TO 'PUSHSL'), / ADD CODE TO REARRANGE RAT FOR RAM REFRESH / (NOT YET CALLED). / VERSION 160 - 16 SEP 82 - KAH - ATTEMPT TO FIX SMOOTH SCROLL EOF SYNCHRONI- / ZATION, ADD PR3 71X0 FOR PASSING 'PRINT / SCREEN' DATA TO USER, ENSURE RAT SET UP AT / POWER-ON. / VERSION 157 - 15 SEP 82 - KAH - MOVE CRTC TABLES TO FIELD ONE, BUILD RAT / INITIALIZATION TABLE IN FIELD ONE, DON'T CLEAR / DISPLAY ON RETURN FROM 'SETUP' UNLESS COLUMN / MODE HAS CHANGED. / VERSION 156 - 15 SEP 82 - KAH - CHANGE DEFAULT COMMUNICATIONS BAUD RATE TO / 1200, DON'T DO GR SHIFTS (LS1R, LS2R, LS3R) IN / 7-BIT ENVIRONMENT, DON'T RESET LSTCOL FOR DCH / OR ICH, SET CURSOR TO LEFT MARGIN FOR IL AND / DL. / VERSION 155 - 13 SEP 82 - KAH - MOVE FLOPPY BOOTSTRAP AND KEYBOARD MAPS TO / FIELD 1, ADD PR3 7000 TO SEND USER DATA TO / KEYBOARD, / IGNORE SS2 AND SS3 IN VT52 MODE, EXPAND C0 / DISPATCH TABLE TO AVOID INDIVIDUAL TESTS, / CHANGE C1 LOOKUP TABLE TO A DISPATCH TABLE FOR / SPEED. / VERSION 154 - 10 SEP 82 - KAH - ADD PR3 0010 FOR SELECTING SPECIAL FUNCTION / KEY OUTPUT (E.G., ESC OR ESC [ 2 3 TILDA), / ADD DISTINCT CHARACTER SETS FOR VT52 MODE, / ENSURE GR CHARACTERS MASKED TO 7 BITS FOR / USE IN ESCAPE SEQUENCES, FORCE 7-BIT / ENVIRONMENT WHEN SELECTING VT52 OR ANSI(VT100) / MODES (ALSO USE 7-BIT INTRODUCERS), ENSURE / INTRODUCER MODE RESET WHEN SELECTING 7-BIT / MODE, EXPAND 'RISRT' TO RESET MORE MODES TO / THEIR DEFAULTS (KAM, CURKEY, SRM, ARM, IRM, / ALTKPD), TURN CURSOR ON FOR DIRECT CURSOR / POSITIONING, IGNORE SI, SO, LS2, AND LS3 IN / VT52 MODE. / VERSION 153 - 08 SEP 82 - KAH - FIX 'DECID' ENTRY TO AVOID PARAMTER CHECK. / VERSION 152 - 08 SEP 82 - KAH - CHANGE 'EOF' TO CORRECTLY DISABLE CURSOR, / USE HARDWARE ERASE AT COLUMN MODE CHANGE. / VERSION 151 - 07 SEP 82 - KAH - FIX AUTOWRAP, MOVE DISPATCH AND LOOKUP / TABLES TO FIELD 1, CHANGE 'WTFRAM' SO IT / DOESN'T HANG IN PANEL MEMORY, MOVE FOREIGN / CHARACTER TABLES TO FIELD 1, MOVE 'ODTTAB' / TO FIELD 1, BREAK CURSOR SAVE/RESTORE CODE / UP TO ALLOW RETURN TO USER MEMORY, DON'T FILL / FIRST 32. CHARACTERS OF MAPS, ENSURE CHARACTER / 040 IS ALWAYS A SPACE. / VERSION 150 - 01 SEP 82 - KAH - FIX VT52 CURSOR POSITIONING TO BOTTOM LINE, / THIS VERSION WAS FROZEN AS VERSION 3147 AND / RELEASED 30-AUG-82. / VERSION 147 - 30 AUG 82 - KAH - CHANGE SENSE OF THE SET/RESET ANSI MODE / ANSI ESCAPE SEQUENCE. / VERSION 146 - 30 AUG 82 - KAH - FIX CHARACTER SET DESIGNATION, ENSURE / LOCATION 177 OF EVERY MAP IS THE ERROR / CHARACTER. / VERSION 145 - 30 AUG 82 - KAH - ADD 2ND USER-DEFINED CHARACTER SET, FIX / DESIGNATING SEQUENCES FOR USER-DEFINED CHARS, / FIX CPODT TABLES. / VERSION 144 - 28 AUG 82 - KAH - FIX ICH/DCH, ENSURE MULIT-LINE SCROLL DOWNS / AREN'T JUMPY IN SMOOTH MODE, ADD CPODT TABLE, / RESET AUTOWRAP PENDING FLAG FOR SCOLM/HT/IL/ / DL, DON'T RESET CHARACTER ATTRIBUTES FOR / DECALN, COMPLETE RIS FOR TIA COMPATIBILITY. / VERSION 143 - 28 AUG 82 - KAH - FIX AUTOWRAP, ENSURE MULTI-LINE SMOOTH / SCROLL UPS AREN'T JUMPY. / VERSION 142 - 27 AUG 82 - KAH - MAKE AUTOWRAP COMPATIBLE WITH TIA SPEC, / DON'T HOLD OFF CR DURING SCROLL, ENSURE 26TH / LINE DOESN'T BECOME VISIBLE AFTER AN ERASE-IN- / DISPLAY, FIX VERTICAL JITTER DURING SMOOTH / SCROLL, REMOVE ATTEMPTED FIX OF HORIZONTAL / JITTER PROBLEM (HARDWARE BUG). / VERSION 141 - 27 AUG 82 - KAH - MOVE FIELD ONE PARAMETERS AROUND, / PARAMETERIZE CONSTANTS, ADD LAST COLUMN FLAG / FOR AUTOWRAP, MAKE RIS/SC/RC COMPATIBLE WITH / TIA SPECS, TRY TO FIX CLREOF SCREEN JITTER, / SEND CHARACTER TO USER IF COMPOSE KEY STRUCK. / VERSION 140 - 25 AUG 82 - KAH - USE KEYBOARD MAP LOADED BY ROM FIRMWARE / (CAN NO LONGER USE NCC 2-ROM SET), ATTEMPT / TO FIX VT52 CURSOR POSITIONING, ABORT CONTROL / SEQUENCES ON RECEIPT OF CAN OR SUB, ENSURE RIS / CLEARS THE CRTC EXT CHAR ADDR AND USER FLAGS. / VERSION 137 - 24 AUG 82 - KAH - DEFAULT BAUD RATES TO 4800, MODIFY LAYOUT / FOR CPODT, CONSTRAIN ICH/DCH TO VISIBLE DATA, / GET RID OF VISIBLE 26TH LINE IN REVERSE VIDEO / (MAKE IT REVERSE SPACES). / VERSION 136 - 23 AUG 82 - KAH - RECOVER FROM LOST SOURCE FILE!! / FIX UPPER HALF OF JIS KATAKANA CHARACTER SET, / FIX ALTERNATE ROM SPECIAL GRAPHICS CHARACTER / SET, ALLOW SET/RESET TO HANDLE SEVERAL / PARAMETERS. / VERSION 135 - 18 AUG 82 - KAH - FIX ERASE FROM START OF DISPLAY. / VERSION 134 - 18 AUG 82 - KAH - FIX ERASE IN DISPLAY. / VERSION 133 - 18 AUG 82 - KAH - FIX ERASE IN DISPLAY FUNCTIONS. / VERSION 132 - 18 AUG 82 - KAH - SET ERASED LINES TO SINGLE WIDTH, ADD / FIELD 3 STATEMENT TO ENSURE CORRECT LOADING. / VERSION 131 - 17 AUG 82 - KAH - INVERT SENSE OF SEND-RECEIVE MODE, DELETE / REFERENCES TO LEFT COLUMN, FIX DISPLAY ADDRESS / ROUTINE TO HANDLE DATA ABOVE SCROLL REGION IN / RELATIVE ORIGIN MODE. / VERSION 130 - 16 AUG 82 - KAH - FIX TO HOLD OFF USER INPUT DURING SCROLL / AFTER ESCAPE, TURN CURSOR ON FOR GRAPHIC / CHARACTERS, DON'T SEND 8-BIT CHARACTERS TO / USER WHEN IN 7-BIT MODE, FIX ED2 TO ERASE FROM / PHYSICAL TOP OF SCREEN, ENSURE ERROR CHARACTERR / AVAILABLE IN EACH QUADRENT OF THE CHARACTER / GENERATOR ROM. / VERSION 127 - 12 AUG 82 - KAH - FIX PROBLEMS WITH SMOOTH SCROLL, ADD PR3 / FUNCTION 50XY TO MOVE DATA FROM PANEL MEMORY / TO USER MEMORY. / VERSION 126 - 11 AUG 82 - KAH - PROCESS EOF AFTER USER FLAG AT PANEL ENTRY, / CLEAR EOF FLAG AT ENTRY TO EOF PROCESSOR, / ABSORB COMMON CODE INTO MOVUTW, CHANGE SCRLDN / TO MATCH FIXES IN SCRLUP, MOVE SELECTION OF 26 / LINE RAT TO END OF POST SMOOTH SCROLL STUFF. / VERSION 125 - 10 AUG 82 - KAH - CHANGES TO HELP FIRMWARE BEAT THE CRTC TO / THE RAT AT START OF FRAME, USE SOME COMMON / CODE FOR CURSOR MOVEMENTS, FIX PARTIAL SCREEN / SMOOTH SCROLL. / VERSION 124 - 09 AUG 82 - KAH - CHANGE SHUFFLE FOR SCRLDN AND SSPREP TO GET / TO FIRST RAT LINE BEFORE CRTC DOES, CHANGE / SOME OF THE KEYBOARD CONTROL CODES. / VERSION 123 - 05 AUG 82 - KAH - ATTEMPT TO FIX SMOOTH SCROLL JUMPINESS, / WAIT A COUPLE OF EXTRA FRAMES ON COLUMN MODE / CHANGE (ANY CRT INITIALIZATION). / VERSION 122 - 04 AUG 82 - KAH - FIX RANGE CHECK FOR SET/RESET, FIX ALT ROM / SPECIAL GRAPHICS. / VERSION 121 - 04 AUG 82 - KAH - FIX SMOOTH SCROLL BY MAKING 26TH LINE / VISIBLE (BUT FULL OF BLANKS), ADD PARAMETER / 25 FOR SET/RESET CURSOR VISIBILITY. / VERSION 120 - 03 AUG 82 - KAH - ADD PR3 FOR POWER-ON CLEAR, RESTORE PR3 FOR / EXECUTING SETUP MENU, ENSURE EXTRA DISPLAY / LINE IS SINGLE WIDTH, SELECT 25-LINE RAT / DURING SMOOTH SCROLL. / VERSION 117 - 28 JUL 82 - KAH - ADD CONSTANTS AT ADDRESSES 1-3, USE COMMON / DISPATCH CODE, CLEAN UP POWER-UP CODE A / LITTLE, FIX FRENCH CHARACTER SET, ABORT ESCAPE / SEQUENCE WITH C1 CHARACTER, CHANGE USER SET / DESIGNATION, REMOVE PR3FUNCTIONS FOR CURSOR / ENABLE AND EXECUTE SETUP MENU. / VERSION 116 - 22 JUL 82 - KAH - LIMIT CUU AND CUD TO SCROLLING REGION, / HOME CURSOR ON STBM. / VERSION 115 - 22 JUL 82 - KAH - ADD DCS, API, OSC, PM, AND ST HANDLING. / VERSION 114 - 21 JUL 82 - KAH - FIX BAUD RATE SETUP. / VERSION 113 - 20 JUL 82 - KAH - BLANK CURSOR FOR DISPLAYED CHARACTERS, FIX / OUTPUT FROM FUNCTION KEYS, FIX ANSI SEQUENCES / FOR LOCKING SHIFTS, SET BAUD RATES IN SETUP / FUNCTION. / VERSION 112 - 16 JUL 82 - KAH - FIX CR TO CRLF CONVERSION. / VERSION 111 - 16 JUL 82 - KAH - EXPAND KEYBOARD CR TO CRLF IF IN NEWLINE / MODE, ADD JIS ROMAN GRAPHIC CHARACTER SET, / CHANGE SELECTION OF 7 OR 8 BIT ENVIRONMENT TO / A PR3. / VERSION 110 - 15 JUL 82 - KAH - FIX EXTRA HALF LINE IN SMOOTH SCROLL. / VERSION 107 - 15 JUL 82 - KAH - FIX FUNCTION KEY CODE GENERATION, FIX / CONTROL CODE RANGE CHECK. / VERSION 106 - 15 JUL 82 - KAH - ADD HIGH RANGE CHECK FOR CONTROL CHARACTERS. / VERSION 105 - 15 JUL 82 - KAH - ADD ESCAPE SEQUENCE ENTRY TO SETUP MENU, / DISABLE BLINK ATTRIBUTE WHEN IN EXTENDED / CHARACTER ADDRESSING MODE. / VERSION 104 - 13-JUL-82 - DTR - FIXED PRQ3 TO PROPERLY CHECK FOR A -1 TERMINATOR / FIXED MOVE FROM ROM TO RAM IN DSETUP / VERSION 103 - 13 JUL 82 - KAH - FIX KEYBOARD TRANSMISSION, ADD PR3-6 FOR / SETUP FUNCTION. / VERSION 102 - 12 JUL 82 - KAH - ATTEMPT TO FIX SCROLL UP. / VERSION 101 - 12 JUL 82 - KAH - CHANGE ORDER OF SETUP PARAMETERS. / VERSION 100 - 09 JUL 82 - KAH - ADD SCREEN MODE TO SETUP PARAMETERS, / FIX SMOOTH SCROLL (I HOPE). / VERSION 77 - 09 JUL 82 - KAH - SET CRTC TO 25 LINES AT FIRST INKLING OF / SMOOTH SCROLL, ADD KEYCLICK TO RIS. / VERSION 76 - 09 JUL 82 - KAH - ATTEMPT TO SET UP FOR SMOOTH SCROLL SOON / ENOUGH TO HANDLE THE FIRST LINE, ADD RESET / FROM 'SETUP' BLOCK CODE, ATTEMPT TO FIX / CURSOR DISABLE AT EOF. / VERSION 75 - 08 JUL 82 - KAH - ESTABLISH 'SETUP' BLOCK, CHANGE COLUMN / MODE PARAMETER TO 0000 AND 7777, FIX / BLINKING BOTTOM LINE IN SMOOTH SCROLL. / VERSION 74 - 07 JUL 82 - KAH - START USER CHARACTERS FROM 041 (WAS 040), / ATTEMPT TO FIX SMOOTH SCROLL. / VERSION 73 - 07 JUL 82 - KAH - FIX SSPOST, USE 'BLOTCH' FOR ERROR / CHARACTER, FIX SMOOTH SCROLL, BUILD COMPLETE / CHARACTER MAP. / VERSION 72 - 06 JUL 82 - KAH - ATTEMPT TO FIX HT AND BS AND RI. / VERSION 71 - 06 JUL 82 - KAH - FIX SMOOTH SCROLL, CHANGE HT AND BS TO AFFECT / ONLY HORIZONTAL CURSOR. / VERSION 70 - 06 JUL 82 - KAH - ATTEMPT TO FIX 26-LINE RAT/24-LINE DISPLAY. / VERSION 67 - 06 JUL 82 - KAH - CLEAN UP PAGE ZERO, FIX 26-LINE RAT HANDLING. / VERSION 66 - 01 JUL 82 - KAH - USE 26-LINE RAT FOR RAM REFRESH. / VERSION 65 - 24 JUN 82 - KAH - FIX PR3 HANDLING, ADD FOREIGN CHARACTER / SETS. / VERSION 64 - 23 JUN 82 - KAH - FIX ALT ROM AND ALT ROM SPECIAL SETS (THEY / WERE INTERCHANGED). / VERSION 63 - 23 JUN 82 - KAH - USE 4000 BIT FOR EXTENDED CHARACTERS. / VERSION 62 - 23 JUN 82 - KAH - FIX 61'S BUGS (SOME OF THEM), ADD AUTO- / SELECT OF EXTENDED CHARACTER AND USER MODES / FOR THOSE CHARACTER SETS, RE-ENABLE 132. COL. / VERSION 61 - 22 JUN 82 - KAH - ADD CURSOR OFF MODE, ADD 7 OR 8 BIT / INTRODUCER MODE, ADD MORE LOCKING SHIFTS, / ADD MORE CHARACTER SETS, ADD PRQS FOR / CURSOR STYLE, CURSOR VISIBILITY, EXTENDED / CHARACTER MODE, USER CHARACTER MODE. / VERSION 60 - 17 JUN 82 - KAH - NOW FIXING THE RUN-TIME ERRORS. / VERSION 57 - 17 JUN 82 - KAH - FIX 38 ERRORS FROM VERSION 56. / VERSION 56 - 16 JUN 82 - KAH - CHANGE CHARACTER TRANSLATION TO MEET NEW / STANDARDS (G0 - G3, GL & GR), ADD EIGHT BIT / TRANSLATION, ADD EIGHT BIT CONTROL CHARACTERS, / ALLOW CHOICE OF 'ESC [' OR 'CSI' ON OUTPUT, / ADD LS2R & LS3R. / VERSION 55 - 14 JUN 82 - KAH - FIX DECALN AGAIN, FIX LINE ATTRIBUTE / SELECTION AGAIN. / VERSION 54 - 14 JUN 82 - KAH - FIX DECALN CURSOR BUNGLE, FIX SINGLE WIDTH / LINE ERASE BUNGLE. / VERSION 53 - 14 JUN 82 - KAH - FIX DOUBLE WIDTH STUFF, CLEAR LINE ATTRIBUTES / WHEN SCROLLED OFF SCREEN, REINITIALIZE CRTC / FOR DECALN. / VERSION 52 - 14 JUN 82 - KAH - FIX 'IND', ADD DOUBLE WIDTH SELECTION CODE. / VERSION 51 - 10 JUN 82 - KAH - FIX IL AND DL WITH ORIGIN MODE AND PARTIAL / SCROLL REGION; ADD DA AND DECID. / VERSION 50 - 10 JUN 82 - KAH - MOVE CRTC DATA ROW INITIALIZATION TO PRECEDE / SMOOTH SCROLL ACTIVITY (FOR IL, DL), CHANGE / SCROLL TO MATCH VT100 PERFORMANCE (ON LF, / FF, VT, IND, RI, NEL, AUTOWRAP) WITH LIMITED / SCROLL REGIONS. / VERSION 47 - 09 JUN 82 - KAH - FIX SMOOTH SCROLL DOWN, FIX SCROLL UP FOR / LIMITED SCROLLING REGIONS. / VERSION 46 - 08 JUN 82 - KAH - FIX SCROLL, FIX SCREEN ALIGNMENT, ADD / IL AND DL TO THE PARSING TABLES. / VERSION 45 - 07 JUN 82 - KAH - CLEAN UP PAGE ZERO, FIX EOF PROCESSOR, / COMPRESS KB IOT PROCESSING, ADD LOCAL MODE, / ADD INSERT/DELETE LINE(S), ADD SCREEN ALIGNMENT / DISPLAY, FIX CURSOR POSITION REPORT, ADD PR3 / PRINT CHARACTER AND SELECT VIDEO ENABLE. / VERSION 44 - 03 JUN 82 - KAH - DON'T RESET/START CRT CHIP, SWAP ORDER OF / TEST FOR USER REQUEST AND EOF. / VERSION 43 - 28 MAY 82 - KAH - FIX 'KRS' HANDLING, DISABLE CLOCK / INTERRUPTS AT POWER-ON. / VERSION 42 - 28 MAY 82 - KAH - FIX CONTROL CHARACTER DECODING, FIX SCROLL, / SPEED UP CHARACTER DISPLAY, ETC. / VERSION 41 - 27 MAY 82 - KAH - ADD LOOK-AHEAD CHARACTER BUFFERING DURING / SCROLL OPERATIONS. / VERSION 40 - 27 MAY 82 - KAH - FIX SMOOTH SCROLL DOWN, SET SMOOTH SCROLL / RATE TO TWO RASTERS PER FRAME, FIX RESET TO / INITIAL STATE. / VERSION 37 - 26 MAY 82 - KAH - FIX SMOOTH SCROLL, ADD SMOOTH SCROLL DOWN. / VERSION 36 - 25 MAY 82 - KAH - FIX SMOOTH SCROLL. / VERSION 35 - 25 MAY 82 - KAH - FIX SMOOTH SCROLL. / VERSION 34 - 25 MAY 82 - KAH - FIX SMOOTH SCROLL, ADD SMOOTH SCROLL DOWN. / VERSION 33 - 24 MAY 82 - KAH - ADD SOME MORE SMOOTH SCROLL STUFF. / VERSION 32 - 24 MAY 82 - KAH - ADD SOME SMOOTH SCROLL STUFF FOR CHECKOUT. / VERSION 31 - 21 MAY 82 - KAH - FIX ERASE FROM START OF DISPLAY (I HOPE). / VERSION 30 - 20 MAY 82 - KAH - ADD DELETE CHARACTER (DCH), SUPRESS LEADING / ZEROES FOR CURSOR POSITION REPORT (CPR). / VERSION 27 - 20 MAY 82 - KAH - FIX ERASE FROM START OF DISPLAY (?). / VERSION 26 - 19 MAY 82 - KAH - FIX ERASE FROM START OF DISPLAY AGAIN. / VERSION 25 - 19 MAY 82 - KAH - FIX ERASE FROM START OF DISPLAY (ED1). / VERSION 24 - 19 MAY 82 - KAH - ADD ERASE FROM START TO CURSOR (EL1, ED1) / VERSION 23 - 19 MAY 82 - KAH - SPEED UP AND FIX CHARACTER INSERTION. / VERSION 22 - 18 MAY 82 - KAH - ADD INSERT CHARACTER (ICH), CHANGE DSPAD TO / BUILD A 'CDF' INSTRUCTION IN 'XDISPL'. / VERSION 21 - 18 MAY 82 - KAH - ADD SINGLE SHIFTS, RESET TO INITIAL. / VERSION 20 - 13 MAY 82 - KAH - ADD PR3 HANDLING, FIX CHARACTER SET / SELECTION, FIX PRQ 'GETDAT' ROUTINE. / VERSION 17 - 13 MAY 82 - KAH - ADD PANEL REQUEST HANDLING. / VERSION 16 - 12 MAY 82 - KAH - SEND CAP 'R' WITH CURSOR POSITION REPORT. / VERSION 15 - 12 MAY 82 - KAH - WAIT FOR FIRST END-OF-FRAME AT POWER-ON. / VERSION 14 - 12 MAY 82 - KAH - FIX SCROLL BUG, ADD ORIGIN MODE TO SAVE / CURSOR CODE. / VERSION 13 - 12 MAY 82 - KAH - FIX SET/RESET RETURNS. / VERSION 12 - 12 MAY 82 - KAH - RESET HALT FLAG, FIX TTITTO DISPATCHING, / REDUCE CODE SIZE OF SET/RESET. / VERSION 11 - 12 MAY 82 - KAH - ADD KEYBOARD LOCK/UNLOCK PER SILO STATUS. / VERSION 10 - 12 MAY 82 - KAH - CHANGE TTITTO DISPATCHING TO GO FASTER. / DELETE CHECK FOR POWER-ON FLAG. / VERSION 7 - 12 MAY 82 - KAH - CHANGE CHARACTER CONVERSION TO GO FASTER. /------------------------------------- /EQUATES FOR DYNAMIC TABLES /------------------------------------- / / FIELD ONE TABLES MUST FOLLOW THE LOADED SLUSHWARE WHICH GOES TO (1)5123 / THE ROM FIRMWARE CRTC RAT DISOBEYS THIS RULE FOR BACKWARD COMPATIBILITY / /(1)0020 - (1)0021 (FIXED ADDRESS FOR COMPATBILITY) FRMVER= 0020 /SLUSHWARE AND ROM FIRMWARE IDS /** FIXED ADDRESS ** / /(1)3660 - (1)3737 (FIXED ADDRESS FOR COMPATIBILITY) RATSTP= 3660 /ROM FIRMWARE CRTC ROW ADDRESS TABLE (48. WORDS LONG) /USED AT POWER-ON AND FOR 'SETUP' MEMU /** FIXED ADDRESS ** / /(1)5125 - (1)5177 /THIS SPACE RESERVED FOR OPERATING SYSTEM DEPENDENT /INFORMATION, TWO WORDS PER SYSTEM. /5125,5126 - WPS /5127,5130 - CP/M-80 /5131,5132 - COS-310 /5133,5134 - OS78 /5135,5136 - MASTER MENU /5137 - 5177 - RESERVED FOR FUTURE, MUST REGISTER WITH / THE MAINTAINER OF SLUSHWARE. /** FIXED ADDRESS ** / / /(1)5200 - (1)5277 KBXMTQ= 5200 /KEYBOARD TRANSMIT QUEUE /QUEUE OF COMMAND CODES TO TRANSMIT TO THE /KEYBOARD, 64. WORDS LONG (MUST BE AT XX00) / /(1)5360 - (1)5777 (FIXED ADDRESS FOR COMPATIBILITY) KBMAP= 5360 /KEYBOARD CODE TO CHARACTER CODE TRANSLATION MAP /LOADED BY ROM FIRMWARE FROM TRACK 00. /** FIXED ADDRESS ** / / /(1)6000 - (1)6077 SILO= 6000 /QUEUE OF DECODED CHARACTERS FROM KEYBOARD TO USER, /64. WORDS LONG (MUST BE AT XX00 FOR CODE TO WORK). / /(1)6100 - (1)6377 GX52MP= 6100 /MAPPING TABLES FOR VT52 ASCII AND SPECIAL GRAPHICS /CHARACTER SET ADDRESSING / /(1)6400 - (1)7177 GXSAVE= 6400 /STORAGE FOR SAVED CHARACTER SETS / /(1)7200 - (1)7777 GXMAP= 7200 /MAPPING TABLES FOR G0, G1, G2, G3 CHARACTER SET /ADDRESSING / / FIELD THREE TABLES MUST AVOID THE DISPLAY RAM, ONLY (3)7000 - (3)7377 / IS AVAILABLE / /(3)7000 - (3)7207 TABS= 7000 /TAB STOPS TABLE IN FIELD THREE (136. WORDS LONG) /0 = NO STOP AT THIS COLUMN POSITION, /-1 = TAB STOP SET AT THIS COLUMN POSITION /ENTRY CORRESPONDING TO COLUMN 133. SHOULD ALWAYS /BE -1 AS A TERMINATOR /TABLE IS 136 LONG BECAUSE IT WAS HANDY TO INITIALIZE /TABS EVERY EIGHT COLUMNS. / /(3)7210 - (3)7377 CNTRY= 7210 /COUNTRY-SPECIFIC TABLES, DATA, AND CODE. /--------------- /GENERAL EQUATES /--------------- / AC0001= 7301 /CLA CLL IAC AC0002= 7305 /CLA CLL IAC RAL AC0003= 7325 /CLA CLL CML IAC RAL AC0004= 7307 /CLA CLL IAC RTL AC0006= 7327 /CLA CLL CML IAC RTL AC0010= 7315 /CLA CLL IAC R3L AC0100= 7303 /CLA CLL IAC BSW AC2000= 7332 /CLA CLL CML RTR AC3777= 7350 /CLA CLL CMA RAR AC4000= 7330 /CLA CLL CML RAR AC6000= 7353 /CLA CLL CML IAC RTR AC7775= 7346 /CLA CLL CMA RTL AC7776= 7344 /CLA CLL CMA RAL AC7777= 7340 /CLA CLL CMA / ACL= 7701 /CLA MQA MQL= 7421 /LOAD MULTIPLIER QUOTIENT R3L= 7014 /ROTATE AC ONLY THREE BITS LEFT CIA= 7041 /CMA IAC (2'S COMPLEMENT) / SPD= 6276 /SELECT PANEL DATA WSR= 6246 /WRITE TO 'STATUS REGISTER' /AC<00>: 0 - USE ROM FOR INDIRECT DATA / 1 - USE RAM FOR INDIRECT DATA /AC<11>: 0 - EXECUTE FROM ROM AFTER NEXT JUMP / 1 - EXECUTE FROM RAM AFTER NEXT JUMP GCF= 6256 /GET CURRENT FLAG DATA CPD= 6266 /CLEAR PANEL DATA FLAG LSCREG= 6122 /SELECT CRTC REGISTER FROM AC<06:11> /AC<00:01>: 00 - NO CHANGE TO CURSOR VISIBILITY / 01 - SET CURSOR VISIBILITY / 10 - CLEAR CURSOR VISIBILITY / 11 - ILLEGAL, DON'T USE LDCRTC= 6124 /WRITE TO CRTC REGISTER FROM AC RDCRTC= 6127 /READ FROM CRTC REGISTER TO AC DPAR= 6126 /WRITE TO CRT CONTROL REGISTER FROM AC /AC<00>: 0= ERASE DISABLED, 1 = ERASE ENABLED /AC<01>: 0= ERASE IN LINE, 1= ERASE IN DISPLAY /AC<04>: 0 - 80 COLUMNS, 1 - 132 COLUMNS /AC<05>: 0 - ENABLE CRT DISPLAY, 1 - DISABLE CRT DISPLAY /AC<08>: 0 - DISABLE EXTENDED CHARACTER ROM ADDRESSING, / 1 - ENABLE EXTENDED CHARACTER ROM ADDRESSING /AC<09>: 0 - DISABLE USER-DEFINED CHARACTER GENERATOR, / 1 - ENABLE USER-DEFINED CHARACTER GENERATOR /AC<10>: 0 - BLOCK CURSOR, 1 - UNDERLINE CURSOR /AC<11>: 0 - BLACK BACKGROUND, 1 - WHITE BACKGROUND KBRSF= 6111 /SKIP IF KB RECEIVER FLAG SET, CLEAR FLAG KBTSF= 6051 /SKIP IF KB XMITTER FLAG SET, CLEAR FLAG KBRD= 6116 /READ KB BUFFER KBLS= 6056 /WRITE TO KB BUFFER PRS= 6000 /READ PANEL STATUS TO AC /AC<00>: PANEL INTERRUPT /AC<01>: 'PRQ' INSTRUCTION EXECUTED IN MAIN MEMORY /AC<02>: STATE OF INTERRUPT REQUEST /AC<03>: POWER-ON DETECTED /AC<04>: 'HLT' INSTRUCTION EXECUTED IN MAIN MEMORY ESSF= 6061 /SKIP IF END-OF-FRAME FLAG SET, CLEAR IT USSF= 6071 /SKIP IF USER REQUEST FLAG SET, CLEAR IT SPF= 6040 /SET OUTPUT FLAG TSF= 6041 /SKIP ON FLAG, CLEAR FLAG PEX= 6004 /EXIT TO MAIN MEMORY AFTER NEXT JMP OR JMS LAS= 7604 /LOAD STATUS TO AC /AC<00>: 1 - ERASE DONE PGO= 6003 /RESET HALT FLAG CLIE= 6135 /DISABLE CLOCK INTERRUPTS TLS2= 6336 /WRITE TO PRINTER PORT TSF2= 6331 /SKIP ON PRINTER PORT TRANSMIT FLAG, CLEAR FLAG KRB2= 6326 /READ FROM PRINTER PORT KSF2= 6321 /SKIP ON PRINTER PORT RECEIVER FLAG, CLEAR FLAG / LCD= 6751 /LOAD COMMAND TO FLOPPY CONTROLLER XDR= 6752 /TRANSFER DATA STR= 6753 /SKIP ON TRANSFER REQUEST SER= 6754 /SKIP ON ERROR SDN= 6755 /SKIP ON DONE INTR= 6756 INIT= 6757 / GRDR= 6150 /READ GRAPHICS OPTION DMA ('NEW' BOARD IS READ STATUS AND SKIP) GRGR= 6154 /READ GRAPHICS OPTION BOARD GRGW= 6155 /WRITE GRAPHICS OPTION BOARD GRW1= 6156 /WRITE GRAPHICS OPTION BOARD REGISTER ONE GRW2= 6167 /WRITE GRAPHICS OPTION BOARD REGISTER TWO FIELD 3 /ENSURE LOADING INTO FIELD 3 FOR 'PUTFRM' OPERATION *0000 / PCSAVE, VERSIO /SAVED PC AT ENTRY TO PANEL CODE, /AT POWER-ON, THIS WORD IS THE /REVISION LEVEL, USED BY ROM FIRMWARE AND FUT (1402.0) /AT POWER-ON, BIT <00> IS SET IF THE SLUSHWARE MUST /PERFORM A SELF-LOAD FROM THE FLOPPY. / /THESE THREE CONSTANTS FIXED FOR BOOT TEST / ** (0001) DO NOT CHANGE OR MOVE ** CDFINS, CDF /CHANGE DATE FIELD INSTRUCTION K0033, 0033 /ESCAPE CHARACTER K0077, 0077 /QUESTION MARK / /THESE TWO WORDS FIXED FOR CPODT REFERENCE / ** (0004) DO NOT CHANGE OR MOVE ** ODTPTR, ODTTAB /POINTER TO CPODT REFERENCE TABLE 0010 /FIELD OF CPODT REFERENCE TABLE (TIMES 8.) / / CRSACT, 0 /CURSOR ACTIVITY FLAG (USED FOR SYNCHRONIZATION / WITH END OF FRAME) / 0000=NOTHING HAPPENING, LEAVE CURSOR ALONE; / 0001=ONLY GRAPHICS, TURN CURSOR ON; / 0002=RECENT CURSOR MOVEMENT, TURN CURSOR ON; / 7777=GRAPHICS AFTER CURSOR MOVEMENT, TURN OFF ERASE, 0 /ERASE REQUEST FLAG, USED BY CRTINI / 0000=ERASE SCREEN, / 7777=ONLY ERASE SCREEN ON COLUMN MODE CHANGE / / /THESE EIGHT WORDS ARE USED FOR AUTO-INCREMENT / REGISTERS SUPPORTED BY THE HARDWARE / ** (0010) DO NOT CHANGE OR MOVE ** REG10, 0 REG11, 0 REG12, 0 /REG12 AND REG13 USED BY CURSOR SAVE/RESTORE, REG13, 0 / DO NOT USE FOR ANYTHING ELSE THAT COULD / CONFLICT (ESPECIALLY PRQ'S) REG14, 0 REG15, 0 REG16, 0 REG17, 0 /THESE FOUR WORDS FIXED FOR PANEL ENTRY STATUS / ** (0020) DO NOT CHANGE OR MOVE ** ACSAV, 0 / SAVED AC STATUS, 0 / SAVED FLAGS PSTAT, 0 / SAVED PANEL STATUS MQSAV, 0 / SAVED MQ /THESE FOUR WORDS FIXED FOR SETUP PARAMETERS / ** (0024) DO NOT CHANGE OR MOVE ** SETUPW, 0000 /PARAMETER BIT PATTERN / <11> 0=80.COLUMN, 1=132.COLUMN / <10> 0=BLOCK CURSOR, 1=UNDERLINE CURSOR / <09> 0=CURSOR ENABLED, 1=CURSOR DISABLED / (SHOULDN'T BE HERE, NOT USER-CONVENIENCE) / <08> 0=JUMP SCROLL, 1=SMOOTH SCROLL / <07> 0=WHITE-ON-BLACK, 1=BLACK-ON-WHITE / <06> 0=KEYCLICK ENABLED, 1=KEYCLICK DISABLED / <05> (IN VT100) 0=ANSI MODE, 1=VT52 MODE / <04> 0=VT100 MODE, 1=VT200 MODE / <03> (IN VT200) 0=7-BIT CONTROLS, 1=8-BIT / <02> 0=7-BIT ENVIRONMENT, 1=8-BIT / <01> 0=BELL ENABLED, 1=BELL DISABLED / <00> 0=AUTOREPEAT ENABLED, 1=DISABLED BAUDPO, 14 /PRINTER PORT BAUD RATE (DEFAULT TO 4800) BAUDCO, 7 /COMMUNICATIONS PORT BAUD RATE (DEFAULT TO 1200) SETUW2, 0500 /ANOTHER SETUP WORD FOR FUTURES (MUST FOLLOW / THE SETUP PARAMETERS ABOVE) / <09-11> KEYCLICK VOLUME (7,6,5,4,3,2,1,0) / <06-08> BELL VOLUME (7,6,5,4,3,2,1,0) / <05> 0=GRAPHICS CURSOR INVISIBLE, 1=VISIBLE / <04> 0=NO GRAPHICS ON MONOCHROME, 1=YES / <03> 0=NO TEXT ON COLOR MONITOR, 1=YES / <00-02> RESERVED / NOTE <00> MUST BE ZERO FOR KEYCLICK VOLUME / TO WORK RAMST= . /START OF RAM CLEAR AREA / /THE FOLLOWING WORDS ARE USED ONLY AT STARTUP / FOR SELF LOAD, THEY ARE OVERWRITTEN FOR USE / BY LATER CODE. SLFADD, 0 /ADDRESS TO STORE SLUSHWARE SLFTRA, 0 /TRACK NUMBER FOR READ SLFSEC, 0 /SECTOR NUMBER FOR READ SLFBCT, 0 /BYTE COUNTER THROUGH BUFFER SLFSCT, 0 /SECTOR COUNTER THROUGH TRACK SLFTCT, 0 /TRACK COUNTER SLFTM1, 0 /STORAGE FOR 1RST BYTE (LOW 2/3 OF 1RST WORD) SLFTM2, 0 /STORAGE FOR 2ND BYTE (LOW 2/3 OF 2ND WORD) SLFTM3, 0 /STORAGE FOR 3RD BYTE (HIGH 1/3 OF BOTH WORDS) / *RAMST /RESET ADDRESS TO START OF FREE RAM (WILL / REASSIGN PREVIOUS ADDRESSES FOR LATER / OVERWRITING) / /THESE TWELVE WORDS FIXED FOR SETUP PARAMETERS /** DO NOT CHANGE ** COLMOD, 0 /COLUMN MODE (0000=80., 7777=132.) CRSRST, 0 /CURSOR MODE (0000=BLOCK, 7777=UNDERLINE) CRSROF, 0 /CURSOR ENABLE (0000=YES, 7777=NO) SCLM, 0 /SCROLL MODE (0000=JUMP, 7777=SMOOTH) SCRN, 0 /SCREEN MODE (0000=WHITE-ON-BLACK, / 7777=BLACK-ON-WHITE) KEYCLK, 0 /KEYCLICK MODE (7777=DISABLE, / VOLUME INCREASES FROM 7,6,5,4,3,2,1,0) ANSI, 0 /ANSI MODE (0000=ANSI, 7777=VT52) VT200, 0 /VT200 MODE (0000=VT100 OR VT52, 7777=VT200) INTMOD, 0 /C1 INTRODUCER MODE (0000=SEND 'ESC F', / 7777=SEND C1 (E.G., CSI)) BITENV, 0 /ENVIRONMENT (0000=7-BIT, 7777=8-BIT) BELVOL, 0 /BELL MODE (7777=DISABLE, / VOLUME INCREASES FROM 7,6,5,4,3,2,1,0) ARM, 0 /AUTOREPEAT MODE (0000=ENABLED, 7777=DISABLED) / / ALTKPD, 0 /ALTERNATE KEYPAD MODE CONTROL /0=INACTIVE /-1=ACTIVE. NLMMOD, 0 /LINE FEED/ NEW LINE MODE /0= DISABLE NEW LINE, -1= ENABLE NEW LINE EOFOK, 0 /IS IT OK TO HANDLE AN EOF THAT OCCURS / DURING PANEL EXECUTION? / 0000=NO, 7777=YES SCRBSY, 0 /SCROLL BUSY FLAG (0=NOT BUSY, -1=BUSY) KBBSY, 0 /KEYBOARD TRANSMITTER BUSY /0=BUFFER ALMOST FULL, -1=BUFFER AVAILABLE RDRRUN, 0 /CHARACTER OUTPUT TO USER PENDING FLAG /0000=NO CHARACTER PENDING ?? /3777=CHARACTER PENDING, SET FLAG ?? /7777=CHARACTER PENDING, FLAG ALREADY SET ?? NXTCHR, 0 /CHARACTER BEING PASSED TO USER PENDCH, 0 /PENDING CHARACTER (HELD DURING SCROLL) /0 = NO CHARACTER, <>0 = CHARACTER HELD FROM / LAST SCROLL OPERATION DCSFLG, 0 /CONTROL STRING ACTIVE FLAG /(0000=INACTIVE, 7777=ACTIVE) ESCFLG, 0 /ESCAPE ACTIVE FLAG PARTAB, 0 /INPUT PARAMETER TABLE POINTER PARTB1, 0 /OUTPUT PARAMETER TABLE POINTER RIGCOL, 0 /RIGHT COLUMN NUMBER OF CURRENT CURSOR ROW / (= 79., 131., 39., OR 65.) MRIGCO, 0 /2'S COMP OF 'RIGCOL' TOPROW, 0 /TOP ROW NUMBER OF DISPLAY REGION BOTROW, 0 /BOTTOM ROW NUMBER OF DISPLAY REGION MODROW, 0 /MAXIMUM ROW ADDRESS MODCOL, 0 /MAXIMUM COLUMN ADDRESS (= 79. OR 131.) LINEFL, 0 /FIELD OF ROW DISPLAY DATA LINEAD, 0 /ADDRESS OF START OF ROW DATA CHARAD, 0 /ADDRESS OF CHARACTER DATA LINPTR, 0 /ADDR OF RAT ENTRY HIGH WORD FOR CURRENT ROW SCRGSZ, 0 /SIZE OF SCROLLING REGION (-1) SCRGOF, 0 /OFFSET OF START OF SCROLLING REGION SCROLN, 0 /NUMBER OF TIMES TO SCROLL SCRLTP, 0 /TOP LINE OF ACTIVE SCROLL AREA SCRLSZ, 0 /NUMBER OF LINES IN ACTIVE SCROLL AREA TEMPSC, 0 /SMOOTH SCROLL TEMP DATA TEMPCT, 0 /SMOOTH SCROLL TEMP DATA TEMP, 0 /TEMPORARY STORAGE TEMP1, 0 TEMP2, 0 TEMP3, 0 INTERM, 0 /BASE ADDRESS OF CHARACTER SET MAP BEING BUILT BITMSK, 0 /CHARACTER BIT MASK FOR ENVIRONMENT /0177 = 7-BIT, 0377 = 8-BIT SHFTST, 0 /SINGLE SHIFT CHARACTER SET BASE ADDRESS CRTC, 0 /CRT CONTROLLER WORD, USED WITH DPAR INSTRUCTION PRQACT, 0 /PANEL REQUEST ACTIVE FLAG /(0000=INACTIVE, 7777=ACTIVE) TOP, 0 /TOP MARGIN OF SCROLLING REGION BOTTOM, 0 /BOTTOM MARGIN OF SCROLLING REGION / / / /THESE SEVEN WORDS ARE SAVED BY 'SAVE CURSOR' /( DO NOT DISTURB ) /NOTE THAT THE FIRST SIX ONLY ARE SAVED IN / LEVEL 1 OPERATION, ALL SEVEN ARE SAVED IN / LEVEL 2 EMULATION MODE CURROW, 0 /CURRENT CURSOR ROW CURCOL, 0 /CURRENT COLUMN ATTRIB, 0 /CHARACTER ATTRIBUTES IN <0:3> / 0 = BLINK, / 1 = UNDERLINE, / 2 = BOLD, / 3 = REVERSE VIDEO / ** CANNOT CHANGE THE FORMAT OF 'ATTRIB', / REQUIRED BY CPODT ** ORIGIN, 0 /ORIGIN MODE FLAG (0=ABSOLUTE, -1=DISPLACED) GL, 0 /LEFT CHARACTER SET BASE ADDRESS LSTCOL, 0 /LAST COLUMN FLAG (0=NO WRAP PENDING, / -1=NEXT GRAPHIC CHARACTER FORCES AUTOWRAP) GR, 0 /RIGHT CHARACTER SET BASE ADDRESS / RAMEND= . /END OF RAM AREA TO CLEAR / / / ---------------------------------------------- / PARAMETERS INITIALIZED AT ASSEMBLY (LOAD) TIME / ---------------------------------------------- / / CRTBSY, 7777 /CRT BUSY FLAG (0=BUSY, -1=NOT BUSY) HOLD, 7777 /HOLD SCREEN FLAG, 0=ACTIVE, -1=NOT ACTIVE RATP, RAT-1 /POINTER TO ROW ADDRESS TABLE (-1 FOR AUTO-INC) /(SET UP AT INIT, ADJUSTED FOR ERASE IN DISPLAY) / ------------------------------------------ / CHARACTER HANDLING DURING ESCAPE SEQUENCES / ------------------------------------------ / /TARGET OF A 'JMS ESCPRO', CAUSES THE NEXT /ADDRESS TO BE STORED HERE. A PANEL EXIT IS /FORCED. THE NEXT GRAPHIC CHARACTER WILL CAUSE /PROGRAM EXECUTION AT THE SAVED ADDRESS. ESCPRO, 0 /NEXT LEVEL OF ESCAPE SEQUENCE PROCESSING JMP I NEXT /RETURN TO MAIN LINE / NEXT, SLUEX1 /NORMAL RETURN (ESCAPE SEQUENCE STILL ACTIVE) / DONE, SLUINX /FINAL RETURN (CLEARS ESCAPE-IN-PROGRESS FLAG) / / / --------------------- / END-OF-FRAME HANDLING / --------------------- / EOFPRO, 0 /END-OF-FRAME PROCESSING ROUTINE JMP I XEOF20 /JUMP TO END OF END-OF-FRAME ROUTINE / / / / /--------------------- /SOME GLOBAL CONSTANTS /--------------------- / M0001, -1 M0012, -12 M0030, -30 M0040, -40 M60, -60 K0012, 0012 K20, 20 K0027, 0027 K0030, 0030 K0031, 0031 K0140, 0140 K0177, 0177 K0200, 0200 K0377, 0377 / K79D, 0117 /=79. MAPG0, GXMAP /BASE ADDRESS OF G0 CHARACTER SET (FIELD 1) MAPG1, GXMAP+140 / G1 CHARACTER SET MAPG2, GXMAP+300 / G2 CHARACTER SET / ------------------------------------ / DISPATCH ADDRESSES FOR COMMON ROUTINES / ------------------------------------ XPSHFC, PUSHFC /STORE A CHARACTER IN THE USER OUTPUT BUFFER XCHKIN, CHKINT /CHECK FOR AN INTERMEDIATE VALUE XGETPA, GETPAR /GET A PARAMETER OF THE LIST XUPDAT, UPDATE /UPDATE THE CURSOR POSITION XLOOKU, LOOKUP /LOOKUP THE FINAL CHARACTER XADTBH, ADTBHC /ADJUST TOP/BOTTOM OF DISPLAY REGION / AND HOME THE CURSOR XCDFAC, CDFACM /SELECT DATA FIELD FROM AC<6:8> XEOF10, EOF10 /FINAL EXIT EOF PROCESSING XEOF20, EOF20 /INTERMEDIATE EXIT EOF PROCESSING XDSPAD, DSPAD /GET DISPLAY ADDRESS XBLNKE, BLNKEX /BLANK THE EXTRA LINE SCROLLING IN XSCRLU, SCRLUP /SCROLL THE SCREEN UPWARDS XCRTCS, CRTCST /SET/RESET CRTC BITS AS SPECIFIED XPRINA, PROINA /HANDLE ILLEGAL INTERMEDIATES IN ESCAPE SEQ. XUSASC, USASC /BUILD US ASCII CHARACTER MAP XDSPX, DSPX /TABLE DISPATCH ROUTINE XPRQAR, PRQARG /GET A PRQ'S ARGUMENT XF1DSP, F1DSPX /DISPATCH TO FIELD ONE SUBROUTINE *0200 / ----------------------------------------------------- / SLFLOA - POWER-ON CODE, DOES A SELF-LOAD IF NECESSARY / ----------------------------------------------------- / / CHECKS IF SLUSHWARE WAS LOADED IN 12-BIT MODE WHEN 8-BIT MODE WAS REQUIRED. / AT POWER-ON OF THE DECMATE II, THE ROM FIRMWARE CODE LOADS SLUSHWARE FROM / EITHER THE FLOPPY OR THE WINCHESTER DISK. NEW ROM CODE THAT HANDLES THE / WINCHESTER DISK WILL LOAD SLUSHWARE IN EITHER 12-BIT OR 8-BIT MODE FROM EITHER / DISK; OLD ROM CODE (PRE-WINNIE) CAN ONLY LOAD SLUSHWARE IN 12-BIT MODE FROM / THE FLOPPY. SO, FOR BACKWARDS COMPATIBILITY, NEW SLUSHWARE THAT MUST BE / LOADED IN 8-BIT MODE HAS TO ENSURE IT HAS BEEN LOADED CORRECTLY: IF IT HAS / BEEN LOADED IN 12-BIT MODE, IT MUST PERFORM A SELF-LOAD IN 8-BIT MODE! / THE ONLY INSTANCE IN WHICH THIS SELF-LOAD IS REQUIRED IS WHEN OLD ROMS / (IMPLIES FLOPPY) AND NEW SLUSHWARE (IMPLIES 8-BIT) ARE BANGING HEADS. THE / FIRST SECTOR OF THE SLUSHWARE IS ALWAYS 12-BIT, ALLOWING TWO PAGES OF CODE / FOR SELF-LOADING ROUITNES. THE SELF-LOAD MUST RELOAD THE REMAINING SECTORS / IN 8-BIT MODE. / / NOTE THAT THIS CODE MUST RESIDE IN THE 0200 PAGE. OLD ROM FIRMWARE WILL / LOAD THIS AREA TO DISKETTE WHEN SAVING SETUP PARAMETERS, SO WE CAN'T USE THE / SPACE FOR DYNAMIC TABLES. / SLFLOA, CLA CLL TAD 0000 /CHECK IF SLUSHWARE LOADED OK SMA CLA /(HIGH BIT=1 IMPLIES MUST SELF-LOAD) JMP SLFLO8 /LOADED OK, GO DO NORMAL START-UP / TAD KK400 /SET UP INITIAL VARIABLES DCA SLFADD /STORAGE ADDRESS TAD K0116 DCA SLFTRA /INITIAL TRACK AC0002 DCA SLFSEC /INITIAL SECTOR AC7777 DCA SLFBCT /INITIAL BYTE COUNT TAD M0012 DCA SLFSCT /INITIAL SECTOR COUNT AC7776 DCA SLFTCT /INITIAL TRACK COUNT TAD SLFST4 /ENSURE FIELD ZERO LOADED FIRST DCA SLFST2 SLFLO2, JMS SLFBYT /GET FIRST OF THREE BYTES JMP SLFLO8 /ALL DONE, GO DO NORMAL START-UP DCA SLFTM1 JMS SLFBYT /GET SECOND OF THREE BYTES JMP SLFLO8 /ALL DONE, GO DO NORMAL START-UP DCA SLFTM2 JMS SLFBYT /GET THIRD OF THREE BYTES JMP SLFLO8 /ALL DONE, GO DO NORMAL START-UP DCA SLFTM3 / TAD SLFTM3 /GET MIXED BYTE (HALF OF EACH WORD) RTL /SHIFT NIBBLE INTO POSITION RTL AND SLFMSK /MASK FOR HIGH FOUR BITS TAD SLFTM1 /ADD FIRST BYTE TO CREATE FIRST WORD JMS SLFSTR /STORE IN PANEL MEMORY / TAD SLFTM3 /GET MIXED BYTE (HALF OF EACH WORD) BSW /SHIFT NIBBLE INTO POSITION RTL AND SLFMSK /MASK FOR HIGH FOUR BITS TAD SLFTM2 /ADD SECOND BYTE TO CREATE SECOND WORD JMS SLFSTR /STORE IN PANEL MEMORY / JMP SLFLO2 /LOOP UNTIL NO MORE DATA TO STORE / SLFLO8, JMP I XMOD20 /CONTINUE WITH REST OF START-UP CODE / ----------------------------------- / SLFBYT - SELF-LOAD GET BYTE ROUTINE / ----------------------------------- / / RETURNS THE NEXT BYTE FOR SLUSHWARE SELF-LOAD. RETURN MADE TO CALL+1 IF / NO MORE DATA, TO CALL+2 IF BYTE AVAILABLE. HANDLES DISK READS AS NECESSARY. / SLFBYT, 0 / CLA CLL ISZ SLFBCT /INCREMENT BYTES-IN-BLOCK COUNTER JMP SLFBY6 /IF STILL IN BLOCK, JUST GET NEXT BYTE / /DONE ALL BYTES IN BLOCK, NEXT SECTOR ISZ SLFSCT /INCREMENT SECTORS-IN-TRACK COUNTER /DONE ALL BLOCK DATA, READ ANOTHER JMP SLFBY4 /IF STILL ON TRACK, JUST GET NEXT SECTOR / /DONE ALL SECTORS, GO TO NEXT TRACK ISZ SLFTCT /INCREMENT TRACKS-TO-READ COUNTER JMP SLFBY2 /IF NOT THROUGH, GO TO NEXT TRACK / JMP SLFBY8 /DONE ALL, RETURN TO CALL+1 / SLFBY2, ISZ SLFTRA /POINT AT NEXT TRACK TAD M0012 /SET UP FOR 10. SECTORS ON THIS TRACK DCA SLFSCT AC0001 DCA SLFSEC /POINT AT FIRST SECTOR (=01) / SLFBY4, AC0006 /ISSUE 'READ-BLOCK' COMMAND LCD TAD SLFSEC / WITH SECTOR NUMBER STR JMP .-1 /WAIT FOR CONTROLLER TO BE READY XDR CLA TAD SLFTRA / AND TRACK NUMBER STR JMP .-1 /WAIT FOR CONTROLLER XDR SDN JMP .-1 /WAIT FOR 'DONE' SER SKP JMS SLFERR /ERROR FLAG UP, GO REPORT CLA TAD SLFBUF /POINT TO READ BUFFER AT (3)7000 DCA REG10 TAD SLFIBC /INITIALIZE BYTE COUNTER DCA SLFBCT / TAD SLFEMP /ISSUE 'EMPTY BUFFER' COMMAND LCD STR /SINCE 8-BIT MODE, MUST SEND JMP .-1 / ANOTHER BYTE OF COMMAND XDR / (SUPPOSED TO BE ZERO) SLFBY5, STR JMP .-1 XDR CDF 30 /FIELD THREE FOR BUFFER DCA I REG10 CDF 00 /HOME FIELD ISZ SLFBCT /INCREMENT THROUGH BUFFER JMP SLFBY5 /LOOP UNTIL THROUGH SDN JMP .-1 SER SKP JMS SLFERR ISZ SLFSEC /INCREMENT THROUGH SECTORS (FOR LATER) / TAD SLFBUF /POINT TO READ BUFFER AT (3)7000 DCA REG10 TAD SLFIBC /INITIALIZE BYTE COUNTER DCA SLFBCT / SLFBY6, CDF 30 /FIELD THREE FOR BUFFER TAD I REG10 /GET A BYTE FROM THE BUFFER CDF 00 /HOME FIELD ISZ SLFBYT /INCREMENT RETURN ADDRESS (MEANS OK) SLFBY8, JMP I SLFBYT /RETURN WITH DATUM IN AC / -------------------------------- / SLFSTR - SELF-LOAD STORE ROUTINE / -------------------------------- / / STORES THE WORD IN THE AC INTO PANEL MEMORY. PROPER FIELD AND ADDRESS / HANDLING IS DONE. / SLFSTR, 0 / SLFST2, CDF 00 /SELECT FIELD FOR STORE /** WILL CHANGE TO 'CDF 10' ** DCA I SLFADD /STORE DATUM IN PANEL MEMORY SLFST4, CDF 00 /HOME FIELD / ISZ SLFADD /INCREMENT THROUGH MEMORY JMP SLFST8 /RETURN IF NO FIELD CHANGE REQUIRED / AC0010 /DONE THIS FIELD, SET UP FOR NEXT TAD SLFST2 / BY ADDING TO THE CHANGE FIELD DCA SLFST2 / INSTRUCTION / SLFST8, JMP I SLFSTR /RETURN / / / / / --------------------------------------------------- / SLFERR - SELF-LOAD ERROR DETECTED, SHOW HALT SCREEN / --------------------------------------------------- / / USE ROM CODE IN FIELD SEVEN FOR PUTTING UP A 'HALT DETECTED' SCREEN / SLFERR, 0 / AC7777 /GET THE ADDRESS OF THE CALL TAD SLFERR DCA 0000 /SAVE AS ADDRESS OF 'HALT' INSTRUCTION AC7777 /REQUEST HALT SCREEN CIF 70 /EXECUTE IN FIELD 7 FOR ROM CODE JMS 176 /JUMP INTO MIDDLE OF ROM CODE / ---------------------------------- / SELF-LOAD PARAMETERS AND CONSTANTS / ---------------------------------- / SLFMSK, 7400 /MASK TO STRIP HIGH NIBBLE SLFBUF, 6777 /POINTER TO READ BUFFER (-1) SLFIBC, -1000 /NUMBER OF BYTES IN READ BUFFER (2'S COMP) SLFEMP, 0102 /COMMAND TO 'EMPTY BUFFER' XMOD20, MOD20 /POINTER TO REST OF START-UP CODE KK400, 0400 K0116, 0116 PAGE / --------------------------- / MOD20 - POWER-ON PROCESSING / --------------------------- / / ENTER HERE FROM POWER-ON LOADER / INITIALIZE THE WORLD / LOAD AND EXECUTE FLOPPY BOOTSTRAP IN MAIN MEMORY / / MOD20, JMS I XF1DSP /INITIALIZE FIELD ONE F1INIT / PRS /DUMMY READ TO CLEAR FLAG / KBRD /DUMMY READ TO CLEAR KEYBOARD OVERRUN / JMS WTFRAM /WAIT FOR THE NEXT END-OF-FRAME / CAF /CLEAR ALL FLAGS / JMS I XRISRT /RESET TO INITIAL STATE / CLIE /DISABLE CLOCK INTERRUPTS / CLA CLL /RESET POWER-ON IN PROGRESS FLAG DCA PWRON CDF 10 /CHECK FOR WINCHESTER-BASED SYSTEM TO BOOT THERE TAD I K0000 /GET SLUSHWARE LOAD FLAG (-1=WINNIE,0=FLOPPY) CDF 00 /HOME FIELD SNA CLA JMP MOD206 /NO, BOOT SYSTEM FROM FLOPPY AC7775 /TELL ROM CODE TO BOOT SYSTEM FROM WINCHESTER JMS I XXDSET / /PUT FLOPPY BOOTSTRAP INTO MAIN MEMORY MOD206, TAD K17 /PUT STUFF AT 0020 (-1 FOR AUTO-INDEX) DCA REG14 /DESTINATION ADDRESS IN AUTO-INDEX REGISTER TAD OUTTAB /SET UP TABLE TO MOVE CODE TO MAIN MEMORY DCA REG15 /USED AS THE POINTER TAD BOOTLN /SET UP LENGTH OF CODE TO MOVE DCA 0 /SAVE FOR LATER LOOP COUNTER MOD208, CDF 10 /FIELD ONE FOR FLOPPY BOOTSTRAP DATA TAD I REG15 /GET A WORD TO MOVE CDF 00 /BACK TO HOME FIELD CPD /CLEAR PANEL DATA FLAG TO WRITE MAIN MEMORY DCA I REG14 /PUT IT IN MAIN MEMORY SPD /BACK TO PANEL ISZ 0 /INCREMENT LOOP COUNTER JMP MOD208 /LOOP THROUGH THE ENTIRE BOOTSTRAP PEX /PANEL EXIT AT NEXT JUMP JMP START1 /START AT MAIN MEMORY LOOP / / K17, 17 OUTTAB, STBOOT-1 BOOTLN, STBOOT-ENBOOT PWRON, 7777 /POWER-ON IN PROGRESS FLAG /0=POWER-ON COMPLETE, -1=POWER-ON IN PROGRESS K0000, 0000 XXDSET, DSETUP / --------------------------------------- / WTFRAM - WAIT FOR THE NEXT END-OF-FRAME / --------------------------------------- / / WAITS IN PANEL MEMORY IF 'PWRON' SET, IN USER MEMORY IF RESET. / / ENTRY: NONE / EXIT: AC CLEARED / WTFRAM, 0 /ENTRY / CLA CLL /CHECK IF IN POWER-ON SEQUENCE TAD PWRON TAD PRQACT / OR IF DOING A PANEL REQUEST SZA CLA JMP WTFRA6 /YES, GO WAIT IN PANEL MEMORY / /NO, RETURN TO USER MEMORY TO WAIT DCA CRTBSY /HOLD OFF ANY USER CHARACTERS FOR A WHILE JMS EOFPRO /SAVE NEXT ADDRESS FOR EOF PROCESSING / AND RETURN TO MAIN MEMORY / AC7777 /REENABLE USER OUTPUT TO FIRMWARE DCA CRTBSY DCA SCRBSY JMP WTFRA9 /GO FINISH PROCESSING / /WAIT IN PANEL MEMORY WTFRA6, JMS I XXCLEE /CLEAR EOF FLAG WTFRA8, ESSF /CHECK EOF FLAG JMP WTFRA8 /LOOP RIGHT HERE TILL IT COMES / WTFRA9, JMS I XXCLEE /CLEAR THE EOF FLAG JMP I WTFRAM /RETURN / / XXCLEE, CLREE / ---------------------------- / RIS - RESET TO INITIAL STATE / ---------------------------- / RIS, JMS I XRISRT /CALL COMMON SUBROUTINE FOR RESET / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / XRISRT, RISRT / / / -------------------------------------------------------------------------- / NOBLNK - TURN OFF BLINK ATTRIBUTE IF IN EXTENDED CHARACTER ADDRESSING MODE / -------------------------------------------------------------------------- / / ENTRY: NONE / EXIT: AC CLEARED / NOBLNK, 0 /ENTRY / CLA CLL TAD CRTC /GET THE 'DPAR' CONTROL WORD AND K0010 /MASK TO THE EXTENDED ADDRESSING BIT SNA CLA /CHECK IF IT'S SELECTED JMP NOBLN9 /NOT SELECTED, LEAVE BLINK ALONE / AC3777 /GET A MASK TO TURN OFF BLINK (4000 BIT) AND ATTRIB /ENSURE BLINK IS OFF DCA ATTRIB /AND PUT BACK FOR CHARACTER ATTRIBUTES / NOBLN9, JMP I NOBLNK /RETURN / K0010, 10 / / / ------------------------- / CPOUS0 - CPODT PATCH AREA / ------------------------- / CPOUS0, ZBLOCK 7 /CPODT PATCH AREA, MUST BE SEVEN WORDS / IN FIELD ZERO / ------------------------------------------- / SCBDEF - SET SAVE-CURSOR-BUFFER TO DEFAULTS / ------------------------------------------- / SCBDEF, 0 / JMS I XCRSSA /SAVE 'CURSOR' DATA (ASSUME ALREADY RESET) / DCA CRSSV /HOME CURSOR IN THE SAVE BLOCK DCA CRSSV+1 / JMP I SCBDEF /RETURN / / XCRSSA, CRSSA / / / / / ---------------------------------- / CRSSV - CURSOR SAVE/RESTORE BUFFER / ---------------------------------- / CRSSV, ZBLOCK 7 / ------------------------------------------ / SETKAT - SET CHARACTER SET TO JIS KATAKANA / ------------------------------------------ / / ENTRY: AC = 0000 / EXIT: AC CLEARED, EXITS THROUGH ESCAPE SEQUENCE EXIT ROUTINE / SETKAT, JMS I XSLEXT /SELECT EXTENDED CHARACTER ADDRESSING / TAD K4200 /POINT TO KATAKANA IN THE GENERATOR ROM JMS I XUSASC /BUILD THE BASIC MAP / TAD K0077 /POINT HIGH PART OF MAP WITH SPACES TAD INTERM DCA REG14 /POINTS TO WORD BEFORE FIRST TO CHANGE / TAD M37 /GET NUMBER OF WORDS TO CHANGE DCA TEMP / SO WE CHANGE 140 - 176 / CDF 10 /FIELD ONE FOR CHARACTER MAPS / SETK2, TAD K0177 /GET THE ERROR CHARACTER ROM ADDRESS DCA I REG14 /WRITE IT TO THE MAP ISZ TEMP /INCREMENT LOOP COUNTER JMP SETK2 /LOOP TIL DONE / CDF 00 /HOME FIELD / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PROCESSOR / / K4200, 4200 M37, -37 XSLEXT, SLEXTC / ---------------------------------------------- / SETUSR - DESIGNATE USER-DEFINED CHARACTER SETS / ---------------------------------------------- / / MUST IGNORE IF NOT DECMATE II (UNAVAILABLE ON DM III AND IV) / SETUSR, JMS ESCPRO /ENTER BELOW WITH NEXT CHARACTER / JMS I XCHKIN /CHECK IF INTERMEDIATE SNL CLA JMP I XPRINA /IF SO, IGNORE SEQUENCE, WAIT FOR FINAL CHAR. / TAD XUSRTB /POINT TO TABLE OF USER CHAR SETS JMS I XLOOKU / AND GO DO THE RIGHT ONE / JMP I DONE /ONLY HERE IF NOT FOUND, IGNORE SEQUENCE / / XUSRTB, USRTAB / / / / / --------------------------------------------------------- / KBOUTP - KEYBOARD XMITTER HANDLER, CALL FIELD ONE ROUTINE / --------------------------------------------------------- / KBOUTP, 0 / KBTSF /DUMMY SKIP TO AVOID HARDWARE BUG NOP /(JUST IN CASE IT SKIPS) / JMS I XF1DSP /CALL FIELD ONE ROUTINE KBXMT / TO PROCESS KEYBOARD TRANSMITTER / JMP I KBOUTP /RETURN PAGE / -------------------------- / MOD10 - PANEL TRAP HANDLER / -------------------------- / /START OF PANEL MEMORY CODE FOR THE 6120 BASED SINGLE USER SYSTEM. / MOD10, DCA ACSAV /SAVE THE AC GCF /GET FLAG DATA DCA STATUS /AND SAVE IT FOR EXIT PRS /FETCH PANEL STATUS WORD DCA PSTAT /SAVE CURRENT PANEL STATUS WORD ACL /FETCH THE MQ DCA MQSAV /AND SAVE IT SPD /PANEL DATA FLAG CIF CDF 0 /MAKE SURE FIELD IS RESET TO ZERO / TAD PSTAT /CHECK FOR HALT INSTRUCTION AND K0200 SZA CLA JMS MD40M1 / TAD PSTAT /CHECK FOR BOOTSTRAP FLAG (EOF,TTIO,KBIO) SPA CLA JMS MOD50 / AC2000 /CHECK FOR PANEL REQUESTS (PR0,PR1,PR2,PR3) AND PSTAT SZA CLA JMS I XMOD30 / /FALL INTO 'EXIT' CODE / --------------------------------- / EXIT - CONTROL PANEL EXIT ROUTINE / --------------------------------- /THE EXIT ROUTINE DETERMINES IF THE KEYBOARD RECEIVER FLAG IS TO BE SET AND /IF THE TRANMSITTER FLAG IS TO BE SET. / NOTE THAT THE THREE WORDS AT EXIT3 MAY NOT CHANGE (CPODT REQUIRES THIS). / THEY MAY MOVE AROUND, BUT MAY NOT CHANGE THEIR DATA. / EXIT, TAD CFLAG /SEE IF INCOMING CHARACTER SEEN AND CRTBSY /AND SEE IF CRT BUSY AS WELL AND KBBSY /AND SEE IF KEYBOARD TRANSMIT BUFFER TOO FULL AND HOLD /AND SEE IF THE SCREEN IS IN THE 'HOLD' MODE SNA CLA /SKIP IF IT IS OK TO SET THE TRANMSITTER FLAG JMP EXIT2 /GO PROCESS THE KEYBOARD FLAG DCA CFLAG /CLEAR CHARACTER IN PROGRESS FLAG SPF /SET THE OUTPUT FLAG SO MORE DATA CAN BE /RECEIVED. EXIT2, TAD RDRRUN /SEE IF A CHARACTER IS TO BE SENT TO THE USER SPA SNA CLA /SKIP IF CHARACTER AVAILABLE AND CAN BE SENT /TO THE USER AND THIS FLAG NOT ALREADY SET JMP EXIT3 /NO. DON'T SEND A CHARACTER KCF /INFORM USER THERE IS A CHARACTER AVAILBLE /AND HAS NOT BEEN TAKEN. AC7777 /MARK INTERNAL FLAG TO AVOID ANOTHER KCF DCA RDRRUN / EXIT3, USSF /CLEAR FLAGS * CAN'T CHANGE * NOP /FOR CPODT * CAN'T CHANGE * NOP /FOR CPODT * CAN'T CHANGE * / ESSF /CHECK FOR EOF FLAG JMP EXIT8 /NOT SET, DON'T WORRY ABOUT IT TAD EOFOK /CHECK IF OK TO DEAL WITH EOF NOW SZA CLA JMP EXIT6 /YES, GO PROCESS EOF JMS I XCLREE /NO, CLEAR THE EOF FLAG TO AVOID SYNCH PROBLEMS AC7777 /MARK OK TO HANDLE EOF ON EXIT DCA EOFOK /(UNLESS SOMETHING ELSE SAYS NO) JMP EXIT8 / EXIT6, JMS EOF /HANDLE EOF NORMALLY / EXIT8, TAD MQSAV /RESTORE THE MQ MQL TAD STATUS /AND THE FLAG DATA RTF TAD ACSAV /AND FINALLY THE AC PEX /MARK FOR MAIN MEMORY JMP I 0 /AND EXIT XTTITT, TTITTO XMOD30, MOD30 /PANEL REQUEST HANDLER XCLREE, CLREE CFLAG, 0 /CHARACTER INPUT FROM USER PENDING FLAG / 0=NONE, -1=CHARACTER PENDING / ------------------------------------ / MOD40 - HALT INSTRUCTION DETECTED / ------------------------------------ / / NOTE THAT THE THREE WORDS AT MOD40 MAY NEVER (!!) CHANGE (CPODT REQUIRES / THIS). THEY MAY MOVE, BUT MUST NEVER CHANGE THEIR VALUES. / MD40M1, 0 /ENTRY / MOD40, PGO /RESET HALT FLAG * CAN'T CHANGE * NOP /FOR CPODT * CAN'T CHANGE * NOP /FOR CPODT * CAN'T CHANGE * / AC7777 /MARK FOR HALT PROCESSING JMS I XXXDST / AND CALL ROM-BASED 'SETUP' CODE / MOD40B, ESSF /WAIT FOR THE NEXT EOF JMP MOD40B / TO PROPERLY HANDLE PENDING CHARACTERS / JMS I XCLREE /CLEAR EOF FLAG AND HANDLE CURSORS / JMP I MD40M1 /RETURN / / XXXDST, DSETUP / --------------------------------------------------- / EOF - END-OF-FRAME DETECTED - DISPATCH IF NECESSARY / --------------------------------------------------- / / CRTC CURSOR HANDLED HERE DEPENDING ON THE DISPLAY ACTIVITY DURING THE / LAST FRAME. / EOF, 0 /ENTRY / /CHECK IF ANY EOF PROCESSING TO DO TAD CRTBSY /(CRTBSY=-1 IF NOT BUSY) CMA /INVERT STATE FOR POSITIVE LOGIC TAD SCRBSY /(SCRBSY=-1 IF BUSY) SZA CLA JMP I EOFPRO /DO EOF PROCESSING JMP EOF20 /NO EOF PROCESSING, GO RETURN / EOF10, AC7777 /RESET THE CRT BUSY TO 'NOT BUSY' DCA CRTBSY DCA SCRBSY / AND THE SCROLL BUSY TO 'NOT BUSY' / TAD PENDCH /CHECK IF ANY PENDING CHARACTER SNA /(0 = NO CHARACTER HELD OVER FROM SCROLL) JMP EOF20 /NO CHARACTER, GO AWAY MQL /PUT CHARACTER INTO MQ (WHERE ITS EXPECTED) DCA PENDCH /CLEAR OUT THE PENDING CHARACTER JMS I XSLUI5 /GO PROCESS THIS CHARACTER AS IF IT JUST CAME / FROM THE USER. / EOF20, JMS I XCLREO /CLEAR THE EOF FLAG / JMP I EOF /RETURN / / XSLUI5, SLUIN5 /ENTRY TO USER CHARACTER PROCESSING XCLREO, CLREOF / -------------------------------------------- / IDLCTR - HANDLE IDLE COUNTER TO BLANK SCREEN / -------------------------------------------- / IDLCTR, 0 / ISZ IDLELO /COUNT THE LOW ORDER WORD JMP IDLCT6 /DON'T WORRY UNTIL LOOP COMPLETE ISZ IDLEHI /COUNT THE HIGH ORDER WORD JMP IDLCT6 /DON'T WORRY UNTIL LOOP COMPLETE / TAD BLNKEN /CHECK IF OK TO BLANK THE SCREEN SZA CLA JMP IDLCT6 /NO, JUST GO RETURN / AC0100 /THE WHOLE SHEBANG TIMED OUT DCA TEMP /SPECIFY THE VIDEO ENABLE BIT IN THE CRTC WORD AC0001 /AND GO SET THE BIT TO TURN OFF VIDEO JMS I XCRTCS / AC7777 /SET THE SCREEN BLANKED FLAG DCA BLANK / IDLCT6, JMP I IDLCTR /RETURN / / BLANK, 0 /SCREEN CURRENTLY BLANK FROM TIMEOUT FLAG, / 0000 = SCREEN NOT BLANK, / 7777 = SCREEN BLANK. IDLEHI, -0032 /HIGH ORDER SCREEN BLANKING COUNTER IDLELO, 0 /LOW ORDER SCREEN BLANKING COUNTER BLNKEN, 0 /SCREEN BLANK ENABLE FLAG, / 0000 = OK TO BLANK AFTER 1/2 HOUR, / 7777 = NEVER BLANK / ------------------------------- / MOD50 - BOOTSTRAP FLAG DETECTED / ------------------------------- / /BOOTSTAP FLAG DETECTED WHICH SAY THAT IO OF SOME SORT IS REQUIRED. /EITHER A CHARACTER TO THE USER, FROM THE USER, A KEYBOARD TRANSMIT FLAG, /A KEYBOARD RECEIVER FLAG OR AN END OF FRAME FLAG. / MOD50, 0 /ENTRY / ESSF /SKIP IF END OF FRAME FLAG SKP JMS EOF /GO PROCESS THE EOF FLAG / USSF /SKIP IF USER IO DONE SKP JMS I XTTITT /GO DO THE TERMINAL EMULATION / KBRSF /SKIP IF KEYBOARD RECEIVER FLAG SKP /NOT THE KEYBOARD RECEIVER JMS I XKBINP /GO PROCESS THE KEYBOARD RECEIVER / KBTSF /SKIP IF KEYBOARD TRANMSITTER SKP JMS I XKBOUT /GO PROCESS THE KEYBOARD TRANSMITTER INTERRUPT / JMP I MOD50 /RETURN / / XKBINP, KBINPU XKBOUT, KBOUTP PAGE / / ------------------------- / TTITTO - PROCESS USER IOT / ------------------------- / /TTI OR TTO INSTRUCTION DETECTED FROM THE USER. DETERMINE WHAT THE INTRUCTION IS /AND PROCESS ACCORDINGLY. /THE FIRST STEP IS TO DETERMINE THE TYPE OF INSTRUCTION - INPUT OR OUTPUT. /THE SECOND STEP IS TO TRANSFER EXECUTION TO THE PROPER ROUTINE WITH THE VALUE /LOADED INTO THE MQ. / / ENTRY: FROM PANEL TRAP USER IOT / / EXIT: AC GARBAGE / TTITTO, 0 AC7777 /AC=-1 TAD 0 /ADDRESS OF INSTRUCTION WHICH CAUSED THE TRAP DCA TEMP /STORE IT AWAY TAD STATUS /NOW GET THE CALLING FIELD JMS I XCDFAC /SELECT DATA FIELD /(COULD IN-LINE CODE FOR SPEED) CPD /TO MAIN MEMORY TAD I TEMP /GET THE INSTRUCTION SPD /BACK TO PANEL MEMORY CDF 0 /CURRENT FIELD / CLL RAR /DIVIDE INSTRUCTION BY 2 (6032->3015,6046->3023) / TAD M3015 /SUBTRACT OFFSET TO CHECK FOR IOT RANGE SPA JMP I TTITTO /IOT TOO LOW (<6032), IGNORE IT / TAD M0007 /CHECK FOR HIGH RANGE SMA JMP I TTITTO /IOT TOO HIGH (>6046), IGNORE IT / TAD KTTTAB /ADD TABLE BASE ADDRESS JMP I XDSPX /DISPATCH TO PROPER IOT ROUTINE /(COULD INLINE CODE FOR SPEED) / TCFRUT, DCA ACSAV /CLEAR THE AC TTORET, JMP I TTITTO /EXIT THE ROUTINE / / M3015, -3015 /=6032/2 M0007, -7 KTTTAB, TTTAB+7 /TABLE ADDRESS IS AT THE HIGH END / ----------------------------------------- / TLSRUT - PROCESS THE CHARACTER IN THE AC. / ----------------------------------------- / TLSRUT, TSF /CLEAR OUTPUT FLAG NOP TAD ACSAV /GET CHARACTER FROM USER'S AC AT ENTRY JMS I XSLUIN /GO PROCESS THE CHARACTER JMP I TTITTO /AND EXIT / / XSLUIN, SLUIN / ----------------------- / KRBRUT - KRB ROUTINE. / ----------------------- / /THIS ROUTINE EMULATE THE KRB FUNCTION. IF NO CHARACTERS ARE AVAILABLE THEN /THE LAST CHARACTER SENT IS LOADED INTO THE AC UPON EXIT AND READER RUN IS /SET TO 0000 TO INDICATE NO CHARACTERS ARE AVAILABLE. /IF THERE ARE CHARACTERS AVAILABLE THEN THE NEW CHARACTER IS LOADED INTO THE AC /FOR RETURN AND READER RUN IS SET TO 3777 TO SAVE MORE CHARACTERS ARE AVAILABLE. / KRBRUT, TAD NXTCHR /NEXT CHARACTER TO THE AC /FALL INTO KCCRUT FOR COMPLETION / / / --------------------- / KCCRUT - KCC ROUTINE. / --------------------- / / THIS ROUTINE EMULATES THE KCC INSTRUCTION WHICH IS TO ASSERT /READER RUN. READER RUN IS SET TO A 0 IF NO CHARACTERS ARE AVAILABLE AND /TO 3777 IF MORE CHARACTERS ARE AVAILABLE FOR PROCESSING. NXTCHR IS SET TO CONTAIN /THE NEW CHARACTER OR REMAINS UNCHANGED IF NO CHARACTERS ARE AVAILABLE. / KCCRUT, DCA ACSAV /CLEAR THE 'AC' JMS I XPOPSI /GET A CHARACTER SNL /SKIP IF CHARACTERS AVAILABLE JMP KCC1 /NO CHARACTERS AVAILABLE DCA NXTCHR /SAVE THE NEW CHARACTER TO PROCESS AC3777 /MARK READER RUN AS CHARACTER AVAILABLE KCC1, DCA RDRRUN /ASSERT READER RUN IN THE PROPER STATE JMP I TTITTO /AND EXIT / / XPOPSI, POPSIL / / / ------------------------------ / KRSRUT - KRS EMULATION ROUTINE / ------------------------------ / /THE ROUTINE PERFORMS AN INCLUSIVE OR OF THE AC DATA WITHT HE LAST CHARACTER /SENT. THIS CAN CAUSE THE AC TO BECOME GARBAGE IF THE AC WAS NOT CLEAR UPON /ENTRY. / KRSRUT, TAD NXTCHR /GET THE CHARACTER JUST SENT (CAN BE GARBAGE) MQL TAD ACSAV /CONTENTS OF THE AC AT ENTRY MQA /OR IN THE CHARACTER VALUE DCA ACSAV /SAVE THE NEW AC VALUE FOR EXIT JMP I TTITTO /AND EXIT / -------------------------------- / BUILD FOREIGN CHARACTER SET MAPS / -------------------------------- / / SETSPA, TAD SPCODP /SPANISH, POINT AT TABLE JMP FLLOAD /AND BUILD THE MAP / SETITA, TAD ITCODP /ITALIAN, POINT AT TABLE JMP FLLOAD /AND BUILD THE MAP / SETFRC, /FRENCH-CANADIAN (SAME AS FRENCH) SETFRE, TAD FRCODP /FRENCH, POINT AT TABLE JMP FLLOAD /AND BUILD THE MAP / SETGER, TAD GECODP /GERMAN, POINT AT TABLE JMP FLLOAD /AND BUILD THE MAP / SETJRG, TAD JISRCP /JIS ROMAN GRAPHICS JMP FLLOAD / SETA, TAD UKCODP /UK ASCII JMP FLLOAD / SETSWE, TAD SWECOP /SWEDISH, POINT AT TABLE JMP FLLOAD / SETDUT, TAD DUCODP /DUTCH, POINT AT TABLE /FALL INTO MAP-BUILD ROUTINE / / FLLOAD, DCA TEMP2 /SAVE TABLE ADDRESS / JMS I XXSLEX /ENABLE EXTENDED ADDRESSING INTO CHARACTER / GENERATOR ROM FOR ALL NON-US NATIONAL SETS / (LOSE BLINK!!) / JMS I XUSASC /BUILD A US ASCII TABLE FIRST / TAD TEMP2 /GET THE TABLE OF DIFFERING CHARACTERS DCA REG14 /SAVE IN AUTO-INDEX REGISTER / TAD USCODP /GET TABLE OF CHARACTERS TO CHANGE DCA REG15 /SAVE IT / CDF 10 /FIELD ONE FOR CHARACTER TABLES FLLOA5, TAD I REG15 /GET THE ADDRESS TO CHANGE TAD INTERM /ADD BASE ADDRESS OF MAP IN FIELD ONE DCA TEMP /SAVE FOR LATER MOVE / TAD I REG14 /GET THE NEW VALUE SNA /CHECK IF END-OF-TABLE (0000) JMP FLLOA9 /GET OUT IF SO DCA I TEMP /CHANGE THE CHARACTER / JMP FLLOA5 /LOOP THROUGH THE CHANGE TABLE / FLLOA9, CDF 00 /BACK TO HOME FIELD JMP I DONE /RETURN THROUGH THE ESCAPE SEQUENCE HANDLER / / USCODP, USCOD-1 FRCODP, FRCOD-1 GECODP, GECOD-1 DUCODP, DUCOD-1 UKCODP, UKCOD-1 JISRCP, JISRCO-1 SPCODP, SPCOD-1 ITCODP, ITCOD-1 SWECOP, SWECOD-1 XXSLEX, SLEXTC / ---------------------------------------------- / VT52SI, VT52SO - VT52 CHARACTER SET INVOCATION / ---------------------------------------------- / VT52SO, TAD K0140 /INVOKE SPECIAL GRAPHICS / VT52SI, TAD VT52MP /INVOKE US ASCII DCA VT52GL /SAVE AS BASE OF CHARACTER MAP / JMP I DONE / / VT52MP, GX52MP VT52GL, 0 /BASE ADDRESS OF VT52 CHARACTER MAP / / / ------------------------------------------------ / LS3, LS2, SO, SI - LOCKING SHIFTS FOR THE GL SET / ------------------------------------------------ / LS3, TAD K0140 /POINT GL TO G3 SET LS2, TAD K0140 /POINT GL TO G2 SET / DCA TEMP /SAVE MAP ADDRESS FOR A WHILE TAD VT200 /CHECK IF VT200 MODE ENABLED SNA CLA JMP I DONE /NO, CAN'T DO LS2/LS3 TAD TEMP /YES, GET THE MAP BACK / SO, TAD K0140 /SHIFT OUT, POINT TO G1 SET SI, TAD MAPG0 /SHIFT IN, POINT TO G0 SET DCA TEMP /SAVE MAP ADDRESS FOR A WHILE / TAD ANSI /CHECK IF IN VT52 MODE SZA CLA JMP I DONE /YES, CAN'T CHANGE VT100/VT200 MAPS / TAD TEMP /NO, GET THE MAP ADDRESS BACK DCA GL /LEFT CHARACTER SET POINTS TO G0 - G3 / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / ------------------------------------------------------ / ANNOUN - HANDLE ANNOUNCER SEQUENCES TO SELECT C1 CODES / ------------------------------------------------------ / / ANNOUN, JMS ESCPRO /SET UP ENTRY WITH NEXT CHARACTER / JMS I XCHKIN /CHECK IF INTERMEDIATE SNL CLA JMP I XPRINA /IF SO, HANDLE AS AN ERROR / TAD VT200 /CHECK IF IN LEVEL II SNA CLA JMP I DONE /IF NOT, IGNORE THE SEQUENCE / TAD XANNCH /POINT TO LOOKUP TABLE JMS I XLOOKU /DISPATCH THROUGH TABLE / JMP I DONE /NOT FOUND, IGNORE / / XANNCH, ANNCH / / / / / ------------------------------------------------------------- / PRIVTB - POINTERS TO PRIVATE PARAMETER FINAL CHARACTER TABLES / ------------------------------------------------------------- / PRIVTB, COLTAB /COLON (UNDEFINED SEPARATOR) SEMTAB /SEMICOLON (SEPARATOR - NEVER USED AS PRIVATE) LEFTAB /LEFT ANGLE EQUTAB /EQUAL SIGN RIGTAB /RIGHT ANGLE QUETAB /QUESTION MARK PAGE / ------------------------------------ / SLUIN - INCOMING CHARACTER PROCESSOR. / ------------------------------------ / / ENTRY: AC = CHARACTER TO PROCESS / / EXIT: AC = 0000 / / SLUIN, 0 AND BITMSK /MASK TO 7 OR 8 BITS MQL /STORE IT AWAY FOR THE TIME BEING / AC7777 /SET CHARACTER ACTIVE FLAG DCA I XCFLAG / JMS SLUIN5 /FINISH PROCESSING CHARACTER IN SUBROUTINE JMP I SLUIN /RETURN / / XCFLAG, CFLAG / ------------------------------------------------- / SLUIN5 - INCOMING CHARACTER PROCESSOR (LOW LEVEL) / ------------------------------------------------- / / CALLED FROM SLUIN WITH A NEW CHARACTER OR CALLED / FROM LOOK-AHEAD BUFFER CHARACTER PROCESSING. WILL HAVE THE CHARACTER / IN THE MQ. / SLUIN5, 0 ACL /FETCH THE CHARACTER TAD M0040 /TEST FOR C0 CODE SPA /SKIP IF NOT A CONTROL CODE JMP CONTRL /GO PROCESS IT AS A CONTROL CHARACTER. / TAD M0140 /CHECK IF GL SET SPA JMP SLUIN6 /YES, PROCESS THE GRAPHIC CHARACTER / TAD M0040 /CHECK IF IN C1 SET (EIGHT BIT CONTROL CODES) SPA JMP I XC1PRO /YES, GO PROCESS C1 SET / TAD M0140 /MUST BE GR SET, ADJUST OFFSET FOR DELETE TEST / SLUIN6, IAC /TEST FOR -1 (FROM 0177 OR 0377) SNA CLA JMP I SLUIN5 /YES, IGNORE THE 'DEL' CHARACTER / TAD ESCFLG /NOW SEE IF AN ESCAPE SEQUENCE IS ACTIVE SNA CLA /SKIP IF SO JMP SLUIN8 /NOT IN ESCAPE SEQUENCE, SKIP MASKING ACL /IN ESCAPE SEQUENCE, MASK TO 7 BITS AND K0177 MQL / AND PUT THE CHARACTER BACK JMP I ESCPRO /ON TO THE PROPER LEVEL OF ESCAPE SEQUENCE /PARSING. SLUIN8, TAD DCSFLG /NOW SEE IF A DCS SEQUENCE IS ACTIVE SNA CLA /IF SO, IGNORE THE CHARACTER / JMS I XDISPL /GO MAKE THE DISPLAYABLE CHARACTER JMP I SLUIN5 /AND RETURN / SLUINX, CLA /MAKE SURE AC IS CLEAR DCA ESCFLG /CLEAR THE ESCAPE PROCESSOR FLAG. / SLUEX1, CLL CLA /MAKE SURE AT A KNOWN STATE UPON EXIT JMP I SLUIN5 /AND TAKE THE NORMAL EXIT / / M0140, -140 XDISPL, DISPLA XC1PRO, C1PRO / ------------------------------------------- / CONTRL - CONTROL CHARACTER DECODER ROUTINE. / ------------------------------------------- / ** MAY HAVE TO RESET SINGLE SHIFT IF NOT SI OR SO, AND IGNORE SI AND SO IF / SINGLE SHIFT PENDING (?) ** / /THIS ROUTINE DISPATCHES ACCORDING TO THE CONTROL CHARACTER IN THE MQ. /THE CONTROL CHARACTERS SUPPORTED BY THIS SYSTEM ARE: / BELL <7> BS <10> HT <11> LF <12> / VT <13> FF <14> CR <15> SO <16> / SI <17> CAN <30> SUB <32> ESC <33> / ALL OTHER CONTROL CODES ARE TREATED AS NO ACTION CODES / AND RETURN IS MADE TO THE NORMAL CHARACTER PROCESSING EXIT. / DURING SCREEN SCROLLING, CHARACTERS ARE ACCEPTED FROM THE USER UNTIL / AN ATTEMPT IS MADE TO GET OFF THE CURRENT LINE (NEXT TO APPEAR ON THE / SCREEN). A CHECK IS MADE FOR LF, HT, FF, AND ESC TO HOLD OFF / USER OUTPUT TO FIRMWARE -- THE CHARACTER WILL BE PROCESSED AT THE END / OF SCROLL PROCESSING. / CONTRL, CLA TAD SCRBSY /CHECK IF SCROLL ACTIVE TO / HOLD OFF CERTAIN CHARACTERS SNA CLA JMP CONTR5 /NO, GO PROCESS NORMALLY / ACL /GET THE CHARACTER TAD M0012 /CHECK LOW BOUNDS SPA JMP CONTR5 /<= 12, GO PROCESS NORMALLY TAD M0003 /CHECK HIGH BOUND FOR THIS GROUP SPA JMP CONTR2 /IN SET (12,13,14), CAN'T PROCESS NOW TAD M0016 /CHECK IF ESCAPE CHARACTER SZA CLA JMP CONTR5 /NO, GO PROCESS NORMALLY JMP CONTR4 /YES, SKIP TO SAVE AS PENDING CHARACTER / CONTR2, CLA CLL /ENSURE VT, FF AND LF ALL SEEN AS LF TAD KK0012 /GET A LINE FEED MQL /SAVE AS RECEIVED CHARACTER / CONTR4, ACL /GET CHARACTER DCA PENDCH /SAVE AS PENDING CHARACTER DCA CRTBSY /HOLD OFF USER OUTPUT TO FIRMWARE JMP SLUEX1 /TAKE A NORMAL EXIT / CONTR5, ACL /FETCH THE CONTROL CODE TAD KJMP /DO THE DISPATCH TO THE RIGHT PLACE JMP I XDSPX / / KJMP, KJMPTB /JMP TABLE M0003, -3 M0016, -16 KK0012, 0012 / ----------------------------------- / BELL - CONTROL G PROCESSOR ROUTINE. / ----------------------------------- / /THIS ROUTINE SENDS THE PROPER CODES TO THE KEYBOARD TO CAUSE THE BELL /TO CHIME. WELL AT LEAST IT WILL MAKE THE SPEAKER DO SOMETHING. / / BELL, JMS I XF1DSP /CALL THE ROUTINE IN FIELD ONE SNDBEL JMP SLUEX1 /AND EXIT / / / --------------------------------- / BS - BACKSPACE CHARACTER DETECTED / --------------------------------- / /BACK THE CURSOR UP 1 HORIZONTAL CHARACTER UNLESS AT THE LEFT MARGIN /IN WHICH CASE THE VALUE IS MAINTAINED AT 0 / BS, STA /AC=1 TAD CURCOL /GET CURRENT HORIZONTAL POSITION OF THE CURSOR SPA /SKIP IF VALID COLUMN NUMBER CLA DCA CURCOL DCA LSTCOL /CLEAR PENDING AUTOWRAP FLAG JMS I XUPDCC /GO UPDATE THE REGISTERS AND POINTER TO THE /NEW CURSOR POSITION JMP SLUEX1 /AND EXIT WITH OUT BOTHERING THE ESCAPE FLAG. / XUPDCC, UPDCC / / ----------------------------- / CR - CARRIAGE RETURN DETECTED / ----------------------------- / /CAUSES CURRENT CURSOR ROW TO BE ZERO AND THEN CALLS THE ROUTINE /TO UPDATE THE CRTC REGISTERS TO REFLECT NEW POSITION / CR, DCA CURCOL /NO, JUST GO TO BEGINNING OF THE LINE DCA LSTCOL /CLEAR PENDING AUTOWRAP FLAG / JMS I XUPDCC /UPDATE THE CTRC JMP SLUEX1 /EXIT / -------------------------------------------------------------------------- / RI, NEL, IND - REVERSE INDEX, NEW LINE, INDEX CONTROL CHARACTER ROUTINES / -------------------------------------------------------------------------- / /ENTRY IS MADE TO HERE FOR THE REVERSE INDEX FUNCTION. IT PERFORMS A /FUNCTION IN THE REVERSE DIRECTION / RI, STA JMP NEL10 /GO SCROLL ONE LINE UP / / /NEXT LINE FUNCTION. THIS CAUSES THE ACTIVE CURSOR POSTION TO BE MOVE /TO THE BEGINNING OF THE NEXT LINE AND IF AT THE BOTTOM OF THE SCREEN A SCROLL /IS PERFORMED. THE INDEX FUNCTION IS ALSO HANDLED HERE. / NEL, DCA CURCOL /CLEAR CURRENT CURSOR POSITION IND, AC0001 /MARK FOR A ONE LINE SCROLL DOWN / NEL10, JMS I XSCROL /DO THE SCROLL CLA /CLEAR PENDING AUTOWRAP FLAG DCA LSTCOL / JMP I DONE /GO CLEAR THE ESCAPE PROCESSOR FLAG / / / -------------------------------------------------------------------------- / LF, FF, VT - LINE FEED, FORM FEED, VERTICAL TAB CONTROL CHARACTER ROUTINES / -------------------------------------------------------------------------- / /LINE FEED FUNCTION. THIS FUNCTION PERFORMS COLUMN MOVEMENT FUNCTION AND /IF AT THE BOTTOM OF THE SCREEN (LINE 24) A SCROLL UP IS PERFORMED. /THIS IS A COMMON ROUTINE WITH AND . / / VT, FF, LF, TAD NLMMOD /CHECK IF NEW LINE MODE ENABLED SZA CLA DCA CURCOL /YES, DO A CARRIAGE RETURN DCA LSTCOL /CLEAR PENDING AUTOWRAP FLAG / AC0001 /INDICATE A POSITIVE DIRECTION FOR THE SCROLL JMS I XSCROL /GO DO THE SCROLL FUNCTION JMP SLUEX1 /EXIT WITHOUT TOUCHING ESCAPE PROCESSOR / / XSCROL, SCROLL / ----------------------------------------------------------------- / PROSUB, PROCAN - SUBSTITUTE AND CANCEL CONTROL CHARACTER ROUTINES / ----------------------------------------------------------------- / /SUB SUBROUTINE PROCESSOR CAUSES THE ERROR CHARACTER (BLOTCH) TO BE DISPLAYED /AND THEN CAUSES THE SUSPENSION OF ANY ESCAPE SEQUENCE THAT IS ACTIVE. / PROSUB, TAD K0177 /GET THE ERROR CHARACTER MQL / TO THE MQ JMS I XDISPL /STORE THE CHARACTER IN THE SCREEN RAM /AND UPDATE THE CURSOR POSITION /FALL INTO RETURN / /CAN ROUTINE BRINGS US HERE TO JUST DISMISS THE CURRENT ESCAPE SEQUENCE. / PROCAN, DCA DCSFLG /CLEAR THE CONTROL STRING IN PROGRESS FLAG JMP SLUINX /AND CLEAR THE ESCAPE SEQUENCE PROCESSOR / ---------------------------------------------------- / LS1R, LS2R, LS3R - LOCKING SHIFTS FOR GR SET TO G1 - G3 / ---------------------------------------------------- / LS3R, TAD K0140 /POINT TO G3 SET LS2R, TAD K0140 /POINT TO G2 SET LS1R, TAD MAPG1 /POINT TO G1 SET DCA TEMP /SAVE FOR A WHILE / TAD VT200 /CHECK VT200 MODE SNA CLA JMP I DONE /IF LEVEL I, DON'T CHANGE GR INVOCATION / TAD TEMP /IF LEVEL II, OK TO CHANGE GR DCA GR /RIGHT CHARACTER SET POINTS TO G1 - G3 / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / / / --------------------------------------- / SS2, SS3 - SINGLE SHIFT TO G2 OR G3 / --------------------------------------- / SS3, TAD K0140 /POINT TO G3 SET SS2, TAD MAPG2 /POINT TO G2 SET DCA TEMP /SAVE FOR A WHILE / TAD ANSI /CHECK IF VT52 MODE SZA CLA JMP I DONE /YES, IGNORE THE SHIFT REQUEST / TAD TEMP /NO, DO THE SHIFT DCA SHFTST /SAVE AS SINGLE SHIFT SET / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / / PAGE /-------------------------------- / UPDATE - UPDATE CURSOR ROUTINE /-------------------------------- / / UPDATES CURSOR POSITION TO CURROW, CURCOL (FORCING THESE TO THE / APPROPRIATE MARGIN IF OUTSIDE THE DISPLAY REGION). / / ENTRY: CURROW = DESIRED ROW POSITION, RELATIVE TO TOP OF DISPLAY REGION / CURCOL = DESIRED COLUMN POSITION, RELATIVE TO LEFT OF 'VIRTUAL SCREEN' / ASSUME MODROW, TOPROW, RIGCOL, LFTCOL SET AS APPROPRIATE / EXIT: AC CLEARED / CURROW, CURCOL FORCED WITHIN BOUNDARIES AS REQUIRED / / UPDATE, 0 /ENTRY / / CHECK CURSOR POSITION AGAINST VERTICAL AND HORIZONTAL LIMITS, / FORCE TO MARGIN IF OUTSIDE LIMITS. / TAD MODROW /CHECK IF BELOW BOTTOM MARGIN CIA TAD CURROW SPA CLA /TEST (CURROW-MODROW) JMP UPDAT4 / TAD MODROW /FORCE TO BOTTOM MARGIN DCA CURROW JMP UPDAT6 / UPDAT4, TAD CURROW /CHECK IF ABOVE TOP MARGIN SMA CLA /TEST (CURROW) JMP UPDAT6 / DCA CURROW /FORCE TO TOP MARGIN / UPDAT6, JMS DSPAD /ENSURE ADDRESSING SET UP / JMS I XXXUPC /UPDATE HORIZONTAL POSITION, TOO / JMP I UPDATE /RETURN / / XXXUPC, UPDCC /-------------------------------------- / DISPLA - DISPLAY A GRAPHIC CHARACTER /-------------------------------------- / / PUT CHARACTER WITH ITS ATTRIBUTES INTO SCREEN RAM, SPACE THE CURSOR, / HANDLE RIGHT MARGIN DEPENDING ON THE AUTOWRAP STATUS. / ** MAY MOVE CODE FOR AUTOWRAP,SCRBSY,CRTBSY,IRMMOD TO HIGHER LEVEL / TO SPEED PRQ DISPLAY ?? ** / / ENTRY: MQ<4:11> CONTAINS THE CHARACTER TO BE DISPLAYED / ATTRIB<0:3> CONTAINS THE CHARACTER ATTRIBUTES / CURCOL, CURROW IS LOCATION OF CHARACTER IN SCREEN RAM / WRAP, TOPROW, LFTCOL, RIGCOL SET AS APPROPRIATE / / EXIT: CURCOL, CURROW UPDATED / AC LOST / / DISPLA, 0 /ENTRY / TAD LSTCOL /CHECK IF AUTOWRAP PENDING SNA CLA JMP XDISP2 /NO, GO DISPLAY THE CHARACTER NORMALLY / /AUTOWRAP IS PENDING, DCA CRTBSY /HOLD OFF ANY MORE USER CHARACTERS ACL /SAVE THE CHARACTER DCA PENDCH / TO PROCESS AFTER CURRENT SCROLL / TAD SCRBSY /CHECK IF CURRENTLY SCROLLING SNA CLA JMP XDISP1 /NO, GO START THE SCROLL / /SCROLL ALREADY ACTIVE, AC0002 /MARK CURSOR ACTIVITY FLAG AS DCA CRSACT / CURSOR MOVMENT JMP XDISP9 /THAT'S ALL WE CAN DO NOW /ABLE TO START SCROLL FOR AUTOWRAP, XDISP1, DCA CURCOL /CURSOR TO LEFT MARGIN DCA LSTCOL /CLEAR AUTOWRAP PENDING FLAG TAD XEOF10 /POINT TO EOF ROUTINE DCA EOFPRO / IN CASE NO SCROLL REALLY NEEDED AC0001 /GO MOVE THE CURSOR DOWN A LINE JMS I XXSCRO /UPDATE CURSOR, SCROLLIN AS NEEDED JMP XDISP9 /UPDATE CURSOR, SCROLL AS NEEDED / / KEEP TRACK OF DISPLAY ACTIVITY THIS FRAME, / IF CRSACT IN [0,1] THEN CRSACT <-- 0001 / ELSEIF CRSACT IN [2,-1] THEN CRSACT <-- 7777 / XDISP2, TAD CRSACT /CHECK DISPLAY ACTIVITY RTR /MOVE BIT<10> TO LINK SZL CLA /CHECK FOR 0002 OR 7777 AC7776 /YES, SET SO NEXT INC MAKES A 7777 IAC /NO, GET A 0001 DCA CRSACT /SAVE NEW CURSOR ACTIVITY FLAG / JMS I XDOCHR /MAKE IT A DISPLAYABLE CHARACTER / / STORE CHARACTER DATA IN SCREEN RAM / TAD IRMMOD /CHECK FOR INSERTION MODE SZA CLA JMS I XCHINS /YES, GO DO A CHARACTER SHUFFLE / XDISP5, HLT /SELECT DATA FIELD FOR SCREEN RAM /(THIS INSTRUCTION CHANGED TO A 'CDF' / BY DSPAD ROUTINE) / TAD ATTRIB /GET ATTRIBUTES MQA /'OR' WITH THE CHARACTER DCA I CHARAD /STORE IN SCREEN RAM / CDF 00 /SELECT HOME DATA FIELD / SPACE OVER, HANDLE WRAP-AROUND IF NECESSARY AND DESIRED / TAD MRIGCO /CHECK IF AT RIGHT MARGIN TAD CURCOL SPA CLA /TEST (CURCOL-RIGCOL) JMP XDISP6 / /AT RIGHT MARGIN, TAD WRAP /MARK FOR PENDING AUTOWRAP IF ENABLED DCA LSTCOL JMP XDISP9 /GO RETURN / /NOT AT RIGHT MARGIN, XDISP6, DCA LSTCOL /CLEAR AUTOWRAP PENDING FLAG ISZ CURCOL /SPACE OVER ISZ CHARAD /BUMP ADDRESS OF DISPLAY CHARACTER / XDISP9, JMP I DISPLA /RETURN / / XCHINS, CHINS XDOCHR, DOCHAR XXSCRO, SCROLL IRMMOD, 0 /INSERTION/REPLACEMENT MODE FLAG, /0=REPLACE, -1=INSERT WRAP, 0 /AUTO-WRAP MODE FLAG, /0=NO AUTO-WRAP, -1=AUTOMATIC CRLF AT RIGHT MARGIN /--------------------------------------------------------------- / DSPAD - GET A DISPLAY ADDRESS FROM THE CRTC ROW ADDRESS TABLE /--------------------------------------------------------------- / / GET THE FIELD AND ADDRESS OF THE DISPLAY CHARACTER / / ENTRY: CURCOL, CURROW SET UP / / EXIT: AC CLEARED / 15, TEMP LOST / LINEAD = ADDRESS OF FIRST CHARACTER IN LINE / CHARAD = ADDRESS OF CHARACTER / LINEFL = DATA FIELD OF LINE DATA (IN <6:8>) / LINPTR = POINTER TO RAT ENTRY HIGH WORD FOR CURRENT ROW / / DSPAD, 0 /ENTRY / / GET RAW INFO FROM THE ROW ADDRESS TABLE / CLA CLL /POINT INTO CRTC R.A.T. TAD CURROW TAD TOPROW CLL RAL TAD RATP DCA REG15 / TAD I REG15 /GET LOW BYTE OF ADDRESS AND K0377 /MASK TO LOW EIGHT-BITS DCA LINEAD /SAVE TEMPORARILY TAD I REG15 /GET ATTRIBUTES, FIELD, HIGH NIBBLE DCA TEMP / OF ADDRESS, SAVE TEMPORARILY TAD REG15 /GET ADDRESS OF HIGH WORD DCA LINPTR / AND SAVE IT / TAD I LINPTR /ADJUST RIGHT MARGIN FOR CHAR WIDTH AND K0300 / GET LINE ATTRIBUTES SNA CLA JMP DSPAD4 /SINGLE WIDTH, USE FULL LINE TAD MODCOL /DOUBLE SOMETHING, USE HALF LINE RAR /DIVIDE BY TWO SKP DSPAD4, TAD MODCOL /SINGLE DCA RIGCOL /SAVE CALCULATED RIGHT COLUMN TAD RIGCOL /CREATE 2'S COMP OF RIGCOL CIA / FOR EASE OF LATER COMPUTING DCA MRIGCO / / GET DATA FIELD / TAD TEMP /GET FIELD BITS FROM <6:7> AND K0060 /MASK 'EM CLL RAR /PUT INTO <6:8> (RIGHT JUSTIFY) DCA LINEFL /NOW HAVE FIELD IN <6:8> / / BUILD 'CDF' INSTRUCTION IN XDISPL ROUTINE TO SAVE TIME LATER / TAD LINEFL /GET FIELD TAD CDFINS /ADD INTO 'CDF' INSTRUCTION DCA XDISP5 /PUT THIS INSTRUCTION INTO XDISPL / / GET ADDRESS OF START OF LINE / TAD TEMP /GET HIGH ADDRESS NIBBLE FROM <8:11> AND K0017 /MASK 'EM BSW /PUT INTO <2:5> CLL RTL /AND FROM THERE TO <0:3> TAD LINEAD /CONCATENATE WITH LOW BYTE OF ADDRESS DCA LINEAD /NOW HAVE ADDRESS OF START OF LINE / / GET ADDRESS OF CHARACTER / TAD LINEAD /GET LINE ADDRESS TAD CURCOL /PLUS CHARACTER OFFSET DCA CHARAD /NOW HAVE CHARACTER ADDRESS / JMP I DSPAD /RETURN / / K0017, 0017 K0060, 0060 K0300, 0300 / ----------------------------------------------- / C1ONE, C1TWO - SELECT SINGLE OR DOUBLE C1 CODES / ----------------------------------------------- / C1ONE, AC7777 /SET UP FOR ONE CHARACTER (E.G., CSI) / / OR TWO CHARACTERS (E.G., ESC [) C1TWO, DCA TEMP /SAVE VALUE FOR A WHILE / TAD VT200 /CHECK CONFORMANCE LEVEL SNA CLA JMP I DONE /IF NOT LEVEL 2, THEN DON'T CHANGE C1 MODE / TAD TEMP /LEVEL 2, GET C1 XMISSION MODE BACK DCA INTMOD /AND MAKE IT PERMANENT / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER PAGE / --------------------------------------------------- / PMTOUM - MOVE DATA FROM PANEL MEMORY TO USER MEMORY / --------------------------------------------------- / PMTOUM, JMS I XPRQAD /GET ADDRESSES AND FIELDS FROM PRQ / TAD TEMP1 /BUILD CDF INSTRUCTION HERE FOR SPEED TAD CDFINS DCA PMTOU2 /SAVE IN LATER CODE (SOURCE FIELD) / TAD TEMP /BUILD ANOTHER CDF INSTRUCTION TAD CDFINS DCA TOUSE4 /SAVE IN LATER CODE (DESTINATION FIELD) JMS I XXRSET /ENSURE SETUP WORDS MATCH CURRENT STATES / / PMTOU2, HLT /SELECT SOURCE FIELD (PANEL) /(HALT IS REPLACED BY A CDF INSTRUCTION) / TAD I REG14 /GET A WORD OF SOURCE DATA JMS TOUSER /SEND IT TO THE USER / ISZ TEMP2 /INCREMENT WORD COUNTER JMP PMTOU2 /LOOP THROUGH ALL THE WORDS TO MOVE / JMP I XPR3Y /AND GO BACK TO THE PR3 HANDLER /(MARKING NOT OK TO HANDLE EOF) / / XPRQAD, PRQADD XPR3Z, PRQ3Z XXRSET, RSETUP XPR3Y, PRQ3Y / --------------------------------------------------- / SLCRSE - SELECT CURSOR ENABLE/DISABLE PANEL REQUEST / --------------------------------------------------- / / FROM PR3/25/7777, AC<11>=1 --> DISABLE CURSOR / SLCRSE, JMS I XXXA1X /EXPAND AC<11> TO A FULL WORD FLAG / DCA I XCRSRE /SAVE AS CURSOR ENABLE/DISABLE FLAG / JMP I XPR3Z /RETURN THROUGH PR3 HANDLER / / XCRSRE, CRSREN XXXA1X, AC11EX / ---------------------------------------------- / TOUSER - PUT DATA IN AC INTO THE USER'S MEMORY / ---------------------------------------------- / / ENTRY: AC=DATA TO PUT IN USER MEMORY / TEMP=USER DESTINATION FIELD (*8) / 15=USER DESTINATION ADDRESS (-1) / EXIT: AC CLEARED / 15 INCREMENTED / DATA FIELD SET FOR FIELD ZERO / TEMP3 GARBAGE / TOUSER, 0 / TOUSE4, HLT /SELECT DESTINATION FIELD /(HALT IS REPLACED BY A CDF INSTRUCTION) / CPD /SELECT USER MEMORY DCA I REG15 /DEPOSIT THE DATA THERE SPD /SELECT PANEL MEMORY / CDF 00 /GO TO FIELD ZERO / JMP I TOUSER / --------------------------------------------------------- / PSBUFF - PASS 'PRINT SCREEN' RELEVANT DATA TO USER MEMORY / --------------------------------------------------------- / CALLING FORMAT: PR3 / 71X0 /X = FIELD OF USER MEMORY BUFFER / ADDR /ADDR = ADDRESS OF USER MEMORY BUFFER / 7777 /TERMINATOR / / THE BUFFER MUST BE 29. WORDS LONG / PSBUFF, TAD I XXPRQD /GET USER'S FIELD AND KK0070 /MASK TO FIELD BITS TAD CDFINS /ADD CDF INSTRUCTION AROUND THESE BITS DCA TOUSE4 /MOVE INTO LATER CODE / JMS I XPRQAR /GET USER'S ADDRESS TAD M0001 / -1 FOR LATER AUTO-INCREMENT DCA REG15 / JMS I XPRQAR /GET TERMINATOR IAC / AND CHECK IF IT'S OK SZA CLA JMP I XPRQ3X /NO, DON'T DO ANYTHING / TAD COLMOD /GET 80/132 COLUMN MODE FLAG JMS TOUSER /PUT INTO USER BUFFER / TAD ORIGIN /GET ABSOLUTE/RELATIVE ORIGIN FLAG JMS TOUSER / TAD TOP /GET SCROLL REGION TOP ROW JMS TOUSER / TAD BOTTOM /GET SCROLL REGION BOTTOM ROW JMS TOUSER / TAD CRTC /GET CRT CONTROLLER WORD (CRTC) JMS TOUSER / TAD RATP /GET POINTER TO ROW ADDRESS TABLE DCA REG16 TAD M0030 /GET NUMBER OF LINES (2'S COMPLEMENT) DCA TEMP2 PSBUF4, ISZ REG16 /SKIP PAST RAT LOW BYTE TAD I REG16 /GET THE RAT HIGH BYTE (ATTRIBUTES IN <4:5>) JMS TOUSER ISZ TEMP2 /INCREMENT THROUGH RAT JMP PSBUF4 /LOOP TIL DONE / JMP I XPR3Y /RETURN THROUGH PRQ HANDLER /(MARKING NOT OK TO HANDLE EOF) / XXPRQD, PRQDAT XPRQ3X, PRQ3X KK0070, 0070 / ---------------------------------- / PRQDCA - MOVE CURSOR PANEL REQUEST / ---------------------------------- / ** SHOULDN'T DO IF AUTOWRAP OR INSERTION MODE SET, OR IF CURRENTLY / CRTBSY OR SCRBSY. NEED TO ADD A RETURN STATUS IN THE AC ** / / FORMAT: PR3 / 7300 / ROW / COL / 7777 /TERMINATOR / / PRQDCA, JMS I XPRQAR /GET THE DESIRED ROW NUMBER (1-24 CONVENTION) TAD M0001 /BACK UP ONE FOR 0-23 CONVENTION DCA TEMP /SAVE UNTIL ALL PARAMETERS VERIFIED / JMS I XPRQAR /GET THE DESIRED COLUMN NUMBER (1-80) TAD M0001 /BACK UP FOR FOR 1-79 CONVENTION DCA TEMP1 /SAVE UNTIL ALL PARAMETERS VERIFIED / JMS I XPRQAR /GET THE TERMINATOR (7777) IAC /CHECK IT SZA CLA JMP I XPRQ3X /BAD, DO ERROR RETURN / TAD TEMP /ALL OK, GET SAVED PARAMETERS DCA CURROW TAD TEMP1 DCA CURCOL / JMS I XUPDAT /MOVE THE CURSOR AS SPECIFIED / JMP I XPR3Z /RETURN THROUGH PR3 HANDLER / -------------------------------------------------------------------- / DOCHAR - DETERMINE CHARACTER GENERATOR ROM ADDRESS FOR THE CHARACTER / -------------------------------------------------------------------- / / ** MUST EVENTUALLY CHANGE SO SINGLE SHIFT AFFECTS GR TOO ** / ENTRY: MQ = CHARACTER CODE / EXIT: MQ = ADDRESS OF CHARACTER IN GENERATOR ROM/RAM / DOCHAR, 0 ACL /FETCH THE CHARACTER DCA TEMP1 /SAVE FOR A WHILE / TAD TEMP1 /GET CHARACTER AND K0200 /CHECK IF 'GR' SET (MSB SET -> GR) SZA CLA JMP DOCHA3 /YES, GO HANDLE GR SET / TAD ANSI /CHECK IF VT52 MODE ACTIVE TO USE ITS MAPS SNA CLA JMP DOCHA1 /NO, SKIP TO USE VT100/VT200 MAPS TAD I XVT52G /YES, USE VT52 MAP JMP DOCHA2 /SKIP SINGLE SHIFT TEST / DOCHA1, TAD SHFTST /GL SET, CHECK IF SINGLE SHIFT ACTIVE SNA /USE THAT SET FOR GL IF IT IS TAD GL /OTHERWISE USE REGULAR GL SET DOCHA2, TAD TEMP1 /ADD CHARACTER CODE TO BASE ADDRESS OF TABLE JMP DOCHA8 /GO GET THE CHARACTER ADDRESS FROM THE MAP / DOCHA3, TAD TEMP1 /GR SET, GET CHARACTER TAD M0240 /CHECK IF 240(8) SZA CLA JMP DOCHA5 /NO, CONTINUE WITH ORIGINAL CHARACTER TAD K0177 /240 IS AN ERROR, CHANGE TO ERROR CHAR JMP DOCHA6 / AND CONTINUE DOCHA5, TAD TEMP1 /GET ORIGINAL CHARACTER AND K0177 /MASK TO 7 BITS (RANGE OF TABLE) DOCHA6, TAD GR /ADD GR MAP TABLE BASE ADDRESS / DOCHA8, TAD M0040 /CONVERT CHARACTER CODE INTO MAP ADDRESS DCA TEMP1 /ADDRESS INTO THE MAPPING TABLE / CDF 10 /FIELD ONE TO ACCESS THE MAP TAD I TEMP1 /GET THE ROM/RAM ADDRESS OF THE CHARACTER CDF 00 /BACK TO HOME FIELD / MQL /SAVE THE ADDRESS IN THE MQ / DCA SHFTST /CLEAR SINGLE SHIFT / JMP I DOCHAR /AND EXIT / / XVT52G, VT52GL M0240, -0240 / -------------------------------------- / C1PRO - PROCESS A C1 CONTROL CHARACTER / -------------------------------------- / ** MAY HAVE TO RESET SINGLE SHIFT (?) ** / C1PRO, CLA DCA DCSFLG /CLEAR THE CONTROL STRING IN PROGRESS FLAG TAD SCRBSY /CHECK IF SCROLL BUSY SZA CLA JMP I XCONT4 /IF SO, HOLD OFF ANY C1 CODES / DCA ESCFLG /TERMINATE ESCAPE OR CONTROL SEQUENCE ACL /GET THE CHARACTER AND K0177 /MASK TO 7 BITS (TO GET 000 OFFSET) TAD XCNTTB /POINT TO DISPATCH TABLE WITH C1 CODES JMP I XDSPX /DISPATCH THROUGH THAT TABLE / / XCNTTB, CNTTB XCONT4, CONTR4 PAGE / ------------------------------------ / CSIPRO - PROCESS A CSI <233> CHARACTER / ------------------------------------ / CSIPRO, AC7777 /SET ESCAPE SEQUENCE IN PROGRESS FLAG DCA ESCFLG / DCA I XVALID /ASSUME SEQUENCE VALID UNTIL PROVEN GUILTY / JMP I XCSI /GO CONTINUE PROCESSING AT 'ESC [' ENTRY / / XCSI, CSI XVALID, VALID /--------------------------------------------- / SCROLL - UPDATE CURSOR, SCROLL AS NECESSARY /--------------------------------------------- / / UPDATE VERTICAL CURSOR POSITION BY CONTENTS OF AC, / PERFORM UP OR DOWN SCROLL IF ATTEMPT TO MOVE OUT OF SCROLL REGION / / ENTRY: AC HAS VERTICAL OFFSET DESIRED (+1, -1) / CURROW IS LINE NUMBER OF CURSOR BEFORE CHANGE / / EXIT: AC GARBAGE / 14, 15, TEMP - TEMP4 LOST / CURROW UPDATED / ROW ADDRESS TABLE UPDATES AS NECESSARY / / SCROLL, 0 /ENTRY / DCA TEMP /SAVE OFFSET FOR A WHILE AC0002 /MARK CURSOR ACTIVITY FLAG AS DCA CRSACT / RECENT CURSOR MOVEMENT TAD TEMP /GET IT BACK FOR TESTS SMA CLA /CHECK DIRECTION OF CURSOR MOVEMENT JMP XSCR10 /IF DOWN, GO HANDLE IT THERE /IF UP, HANDLE IT HERE / / CURSOR GOING UPWARDS / TAD SCRGOF /CHECK IF AT TOP OF SCROLLING REGION CIA TAD CURROW SZA CLA JMP XSCR60 /IF NOT AT TOP NOW, / DON'T BOTHER SCROLLING / / CURSOR GOING OFF TOP-OF-SCREEN, MUST SCROLL DOWN / TAD XSCRLD /SET UP EOF PROCESSING TO SCROLL DOWN JMP XSCR45 /GO SET UP FOR EOF PROCESSING / / CURSOR GOING DOWN / XSCR10, TAD SCRGSZ /CHECK IF AT BOTTOM OF SCROLLING REGION TAD SCRGOF CIA TAD CURROW SZA CLA JMP XSCR60 /IF NOT AT BOTTOM, SKIP SCROLLING / GOING OFF BOTTOM-OF-SCREEN, MUST SCROLL UP / TAD XSCRLU /SET UP EOF PROCESSING TO SCROLL UP / / AT A BOUNDARY OF THE SCROLLING REGION, MUST SET UP TO SCROLL / XSCR45, DCA EOFPRO /STORE EOF PROCESSING ROUTINE ADDRESS AC7777 DCA SCRBSY /SET SCROLL ACTIVE FLAG / TAD TOP /MARK TOP OF ACTIVE SCROLL DCA SCRLTP TAD SCRGSZ /MARK SIZE OF ACTIVE SCROLL AREA DCA SCRLSZ AC7777 /SET UP TO SCROLL ONE LINE (2'S COMP) DCA SCROLN JMS BLNKEX /BLANK THE EXTRA LINE BEFORE SHUFFLE JMP I SCROLL /RETURN / / NOT AT EITHER TOP OR BOTTOM OF SCROLLING REGION, ADJUST CURSOR / XSCR60, TAD TEMP /GET CURSOR DISPLACEMENT TAD CURROW / TO UPDATE CURSOR VERTICAL POSITION DCA CURROW / JMS I XDSPAD /SET UP CHARACTER ADDRESS, ETC. / / BOTH ROW AND COLUMN CURSOR CHANGED, GO UPDATE THEM / JMS I XUPDAT /GO UPDATE ROW AND COLUMN CURSORS JMP I SCROLL / AND RETURN / / XSCRLD, SCRLDN XXBLNK, BLNKLN / -------------------------------------------------------------------------- / BLNKEX - CLEAR THE 'EXTRA' LINE USED FOR CHARACTER BUFFERING DURING SCROLL / -------------------------------------------------------------------------- / / ENTRY: AC = 0 / EXIT: AC = 0 / BLNKEX, 0 /ENTRY / TAD CURROW /SAVE CURRENT ROW FOR A WHILE DCA TEMP2 / TAD TOPROW /FAKE THE ROW TO THE 25TH LINE CIA TAD K0030 DCA CURROW / JMS I XXBLNK /BLANK THE LINE / TAD TEMP2 /RESTORE THE ROW POINTER DCA CURROW / JMP I BLNKEX /RETURN / / / ---------------------------------------------------------- / KBINPU - KEYBOARD RECEIVER HANDLER, CALL FIELD ONE ROUTINE / ---------------------------------------------------------- / KBINPU, 0 / KBRSF /DO A DUMMY SKIP TO AVOID HARDWARE BUG RELATED NOP / TO ASYNCHRONOUS INTERRUPTS (??) / JMS I XF1DSP /CALL FIELD ONE ROUTINE KBYBRD / TO PROCESS KEYBOARD RECEIVER / JMP I KBINPU /RETURN / ------------------------------------ / ED2, ED0 - SECONDARY ERASE FUNCTIONS / ------------------------------------ / / ED2, TAD TOPROW /ERASE ENTIRE DISPLAY, POINT TO PHYSICAL CIA / TOP OF SCREEN DCA CURROW DCA CURCOL /POINT TO LEFT MARGIN JMP ED2A /GO SET ERASED LINE TO SINGLE WIDTH / / ED0, TAD CURCOL /CHECK IF AT RIGHT OF LINE (WON'T ERASE THERE) TAD MRIGCO SZA CLA JMP ED0A /NOT AT RIGHT, SKIP CURSOR FAKE / /SEEMS TO BE A HARDWARE BUG RELATED TO ERASE / FROM CURSOR IF CURSOR IS AT RIGHT MARGIN, / ATTEMPT TO FIX BY TELLING HARDWARE THE / IS AT THE BEGINNING OF THE NEXT LINE. / ISZ CURROW /AT RIGHT MARGIN, FAKE CURSOR TO NEXT ROW DCA CURCOL / AND LEFT MARGIN TAD LINEFL /ERASE THIS CHARACTER IN SOFTWARE JMS I XCDFAC DCA I CHARAD CDF 00 /BACK TO THIS FIELD / ED0A, TAD CURCOL /CHECK IF AT LEFT OF LINE TO SET CURRENT LINE TO SZA CLA / SINGLE WIDTH AC0001 /ERASE FROM HERE TO END OF DISPLAY TAD TOPROW / POINT TO NEXT LINE TAD CURROW / ED2A, DCA I XERSTP /SAVE FIRST LINE TO SET TO SINGLE WIDTH / TAD K0030 /SET RAT TO 25 LINES SO 26TH LINE NOT ERASED JMS I XXXXRS / TAD M0030 /GET NUMBER OF LINES TO RESET TAD I XERSTP DCA I XERSCT /SAVE NUMBER OF LINES TO RESET TO SINGLE WIDTH / JMP I XEDFNL /GO FINISH ERASE STUFF / / XEDFNL, EDFNL XXXXRS, RATSIZ XERSTP, ERSTP XERSCT, ERSCT / -------------------------------- / EL0S, EL1S, EL2S - ERASE-IN-LINE / -------------------------------- / / PERFORM THE ERASE FUNCTION IN SOFTWARE, NOT HARDWARE. / EL0S, TAD CURCOL /ERASE-TO-END, GET CURRENT CURSOR POSITION / EL2S, DCA TEMP1 /ERASE-ENTIRE, USE START OF LINE / (OR CURRENT CURSOR POSITION FROM ABOVE) AC7777 TAD TEMP1 /DETERMINE NUMBER OF CHARS TO ERASE TAD MRIGCO DCA TEMP /=END-START+1, 2'S COMPLEMENT FOR LOOP CONTROL / AC7777 /DETERMINE START ADDRESS FOR ERASE TAD LINEAD TAD TEMP1 DCA REG14 /=STARTOFLINE+OFFSET, -1 FOR AUTOINDEX / JMP EL1S2 /GO DO THE ERASE / EL1S, AC7777 /ERASE-FROM-START, GET FIRST ADDRESS TO ERASE TAD LINEAD DCA REG14 /=STARTOFLINE, -1 FOR AUTOINDEX / AC0001 /DETERMINE NUMBER OF CHARS TO ERASE TAD CURCOL CIA DCA TEMP /= OFFSET, 2'S COMP FOR LOOP CONTROL / EL1S2, TAD LINEFL /SELECT DATA FIELD OF DISPLAY ROW JMS I XCDFAC / EL1S4, DCA I REG14 /ERASE CHARACTER ISZ TEMP /INCREMENT THROUGH CHARS TO ERASE JMP EL1S4 /LOOP TIL DONE / CDF 00 /HOME FIELD / JMP I DONE /THAT'S ALL, RETURN THROUGH PARSER / --------------------------------------------------------------- / SETDMN - DESIGNATE DEC MULTINATIONAL SUPPLEMENTAL CHARACTER SET / --------------------------------------------------------------- / SETDMN, TAD VT200 /CHECK IF LEVEL 2 SZA CLA / JMS I XSTDMN /CALL SUBROUTINE TO DO THE WORK / JMP I DONE /AND RETURN THROUGH ESCAPE SEQ PROCESS / / XSTDMN, STDMN PAGE / / ----------------------------- / EL - ERASE-IN-LINE DISPATCHER / ----------------------------- / EL, DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / JMS I XELEDP /GET PARAMETERS OF ANSI ESCAPE SEQUENCE / MULTIPLE SELECTIONS ALLOWED TAD ELPTR /ADD BASE DISPATCH TABLE ADDRESS JMP I XDSPX /DISPATCH THROUGH TABLE FOR FURTHER PROCESSING / / XELEDP, ELEDPA ELPTR, ELDATA / / / / / --------------------------------------------------------------- / DTC34 - LOAD DEC TECHNICAL CHARACTER SET FOR DECMATE III AND IV / --------------------------------------------------------------- / DTC34, JMS I XXXSLE /SELECT EXTENDED ADDRESSING TO GET TO / QUADRANT 4 OF CHAR GENERATOR ROM TAD KK4200 /GET BASE ADDRESS FOR QUADRANT 4 JMS I XUSASC /LOAD CHARACTER SET / JMP I DONE /RETURN THROUGH RECEIVED CHARACTER PROCESSOR / / XXXSLE, SLEXTC KK4200, 4200 / ------------------------- / SCRLUP - SCROLL SCREEN UP / ------------------------- / / SCRLU1, JMS EOFPRO /COME TO NEXT ADDRESS AT EOF / SCRLUP, TAD SCLM /CHECK IF SMOOTH SCROLL ENABLED SNA CLA JMP SCRLU8 /NO, GO DO JUMP SCROLL / TAD PENDFL /CHECK IF SYNCHRONIZATION NEEDED SNA CLA JMS EOFPRO /WAIT ANOTHER EOF TO SYNCHRONIZE / TAD SCRINC /WRITE THE FIRST SMOOTH SCROLL OFFSET DCA SCRLOF / TO THE CRTC CONTROLLER JMS I XSORW / TAD BOTTOM /POINT TO LAST SCROLL LINE JMS SSPREP /PREPARE FOR SMOOTH SCROLL / SCRLU3, JMS EOFPRO /WAIT FOR EOF / / SMOOTHLY SCROLL THE LINE / TAD SCRLOF /INCREMENT SCROLL OFFSET TAD SCRINC / BY SCROLLING CONSTANT DCA SCRLOF TAD SCRLOF /CHECK IF DONE WITH THE ENTIRE CHARACTER TAD M0012 SMA CLA JMP SCRLU6 /YES, GO DO LINE SHUFFLE JMS I XSORW /NOT DONE, WRITE TO SCROLL OFFSET REG. JMP SCRLU3 /GO WAIT FOR NEXT EOF TO SCROLL ANOTHER / LINE SMOOTHLY / SMOOTH SCROLL DONE / SCRLU6, JMS I XXSSPO /CLEAN UP AFTER SMOOTH SCROLL / SCRLU8, TAD SCRLTP /POINT TO TOP ROW CLL RAL TAD RATP IAC DCA TEMP /TEMP = RATP + 2*TOP + 1 / AC0002 /POINT TO NEXT-TO-TOP (-1 FOR AUTO-INC) TAD TEMP DCA REG14 / AC0001 TAD BOTTOM /POINT TO LAST LINE (HIGH BYTE) CLL RAL TAD RATP DCA TEMP2 /TEMP2 = RATP + 2*(BOTTOM+1) / ISZ TEMP /SAVE OLD TOP LINE POINTER TAD I TEMP DCA TEMP /TEMP = (TEMP + 1) / TAD SCRLSZ /GET NUMBER OF LINES TO MOVE (2'S COMP) CMA DCA TEMP1 /TEMP1 = -(SCRGSZ) / JMS I XMOVUT /MOVE PART OF THE RAT UP / TAD I KRAT61 /GET SPARE LINE DCA I TEMP2 / TO BOTTOM TAD TEMP /MOVE OLD TOP LINE TO SPARE AND K0077 /ENSURE SINGLE WIDTH DCA I KRAT61 ISZ SCROLN /INCREMENT SCROLL COUNTER SKP /MARK FOR ANOTHER SCROLL IF NEEDED JMP SCRLUZ /FINISH UP IF ALL LINES SCROLLED AC7777 /SET FLAG TO AVOID EOF SYNCH DCA PENDFL JMS I XBLNKE /BLANK THE NEW 'NEXT' LINE JMP SCRLU1 /GO SET UP TO RESTART AFTER EOF / SCRLUZ, JMS I XDSPAD /SET UP POINTERS / TAD PENDCH /CHECK IF CHARACTER AVAILABLE TAD M0012 / IS A LINE FEED SNA CLA /YES -> NO SYNCH, NO -> SYNCH AC7777 /YES, DON'T WAIT EXTRA FRAMES DCA PENDFL /ENSURE EOF SYNCH FOR NEXT SCROLL / JMP I XEOF10 /RETURN THROUGH EOF DISPATCHER / / SCRINC, 0002 /SMOOTH SCROLL INCREMENT SCRLOF, 0 /CURRENT SMOOTH SCROLL OFFSET M0027, -27 KRAT61, RAT+61 XSORW, SORW XXSSPO, SSPOST XMOVUT, MOVUTW PENDFL, 0 /MULTI-LINE SCROLL ACTIVE FLAG / (0=NEED TO SYNCH, -1=NO SYNCH) / ------------------------------------------ / SSPREP - SMOOTH SCROLL PREPARATION ROUTINE / ------------------------------------------ / / ENTRY: AC CONTAINS THE ROW NUMBER OF THE LINE BELOW WHICH TO INSERT / AN EXTRA LINE. / SSPREP, 0 /ENTRY / DCA TEMP1 /SAVE TOP OF SHUFFLE REGION (TEMPORARY) / TAD KK30 /SELECT A 25 LINE RAT DURING SMOOTHIE JMS I XXRATS / JMS I XCRTSD /SET CRTC DATA ROWS TOP AND BOTTOM / AC0001 TAD TEMP1 /POINT TO TOP OF SHUFFLE AREA CLL CML RAL TAD RATP DCA REG14 /14 = RATP + 2*(TEMP1+1) / AC0001 /SAVE POINTER TO EXTRA LINE TAD REG14 DCA TEMPSC / TAD TEMP1 /CHECK IF ANYTHING TO SHUFFLE TAD M0027 DCA TEMPCT /SAVE LOOP COUNTER TAD TEMPCT /GET COUNTER FOR LOOP CONTROL SMA JMP SSPRE9 /NO, SKIP SHUFFLE DCA TEMP1 / JMS I XMOVTW /MOVE PART OF THE RAT DOWN / SSPRE9, AC3777 /MAKE 25TH LINE VISIBLE DURING SCROLL AND I KRAT60 /BY RESETTING HIGH BIT IN RAT WORD 1 DCA I KRAT60 / JMP I SSPREP /RETURN / / KRAT60, RAT+60 XMOVTW, MOVTWO KK30, 0030 XXRATS, RATSIZ XCRTSD, CRTSDR / ----------------------------------------------- / PARTB - PARAMETERS FOR CONTROL SEQUENCE PARSING / ----------------------------------------------- / / PARTB, ZBLOCK 20 /CSI PARAMETERS PAGE / --------------------------------------------- / SORW - WRITE TO CRTC'S SMOOTH SCROLL REGISTER / --------------------------------------------- / / ENTRY: AC = 0000 / EXIT: AC = 0000 / / WRITE THE DATUM IN 'SCRLOF' TO THE CRTC SMOOTH SCROLL REGISTER. NOTE / THAT THE DATUM IS SHIFTED LEFT ONE BIT. / SORW, 0 /ENTRY / TAD K0027 /SELECT SMOOTH SCROLL REGISTER (# 27) LSCREG CLA CLL /WRITE OFFSET (*2) TAD I XSCRLO RAL LDCRTC CLL CLA / JMP I SORW /RETURN / / ------------------------------- / SCRLDN - SCROLL THE SCREEN DOWN / ------------------------------- / / SCROLL THE SCREEN DATA WITHIN THE SCROLLING REGION DOWN ONE LINE. / / SCRLD1, JMS EOFPRO /COME HERE AFTER THE NEXT EOF / SCRLDN, TAD SCLM /CHECK FOR SMOOTH SCROLL MODE SNA CLA JMP SCRLD8 /NO, SKIP TO JUMP SCROLL / TAD I XXPNDF /CHECK IF SYNCH WITH EOF NEEDED SZA CLA JMP SCRLD2 /NO, SKIP IT / JMS EOFPRO /WAIT FOR AN EOF TO SYNCHRONIZE / SCRLD2, TAD I XSCRIN /GET FIRST SCROLL OFFSET CIA TAD K0012 DCA I XSCRLO /AND LOAD INTO OFFSET JMS SORW /TELL CRTC / AC7777 /POINT TO LINE ABOVE SCROLL TAD SCRLTP JMS I XSSPRE /PREPARE FOR SMOOTH SCROLL / SCRLD3, JMS EOFPRO /WAIT A FRAME TO SYNCHRONIZE / / SMOOTHLY SCROLL THE LINE / TAD I XSCRIN /GET SCROLL OFFSET CIA /NEGATE 'CAUSE OF DIRECTION TAD I XSCRLO /DECREMENT SCROLL OFFSET REGISTER DCA I XSCRLO TAD I XSCRLO SPA SNA CLA JMP SCRLD5 /ALL DONE WITH SMOOTHIE JMS SORW /WRITE TO CRTC SMOOTH SCROLL REGISTER JMP SCRLD3 /RETURN THROUGH EOF PROCESSOR / SMOOTH SCROLL DONE / SCRLD5, JMS I XSSPOS /CLEAN UP ROW ADDRESS TABLE / SCRLD8, TAD SCRLTP /POINT TO TOP ROW (-1 FOR AUTO) CLL CML RAL TAD RATP DCA REG14 /14 = RATP + 2*TOP + 1 / TAD SCRLSZ /GET NUMBER OF LINES TO MOVE (2'S COMP) CMA DCA TEMP1 /TEMP1 = -(SCRGSZ) / JMS MOVTWO /MOVE PART OF THE RAT DOWN / ISZ SCROLN /INCREMENT SCROLL COUNTER SKP /SCROLL ANOTHER LINE, IF NEEDED JMP SCRLDZ /IF DONE, COMPLETE SCROLL AC7777 /MARK FOR NO SYNCH REQUIRED DCA I XXPNDF JMS I XBLNKE /ERASE THE 'NEXT' LINE JMP SCRLD1 /GO SET UP TO RESTART AFTER NEXT EOF / SCRLDZ, JMS I XDSPAD /SET UP POINTERS / DCA I XXPNDF /ENSURE SYNCH NEXT TIME / JMP I XEOF10 /RETURN TO EOF DISPATCHER / / XSSPRE, SSPREP XSSPOS, SSPOST XSCRIN, SCRINC XSCRLO, SCRLOF KKRT61, RAT+61 XXPNDF, PENDFL / ------------------------------------------------ / MOVTWO - MOVE PART OF THE ROW ADDRESS TABLE DOWN / ------------------------------------------------ / / ENTRY: 14 = POINTER TO FIRST RAT ENTRY TO SHUFFLE (-1 FOR AUTO) / TEMP1 = COUNTER FOR NUMBER OF LINES TO SHUFFLE / AC = 0000 / MOVTWO, 0 /ENTRY / TAD XTDATA /POINT TO TEMP DESTINATION DCA REG15 / TAD REG14 /COPY INITIAL SOURCE POINTER FOR FINAL DCA REG17 / DESTINATION POINTER / AC7777 /POINT TO TEMP SOURCE TAD XTDATA / (-1 FOR AUTO) DCA REG16 / TAD I KKRT61 /SAVE OLD EXTRA LINE AS NEW FIRST LINE DCA I XTDATA / IN THE TEMPORARY DATA AREA / MOVTW2, TAD I REG14 /GET VALUE FROM SOURCE ISZ REG14 /BUMP TO DO EVERY OTHER (NEVER SKIPS) DCA I REG15 /PUT INTO TEMP TAD I REG16 /GET VALUE FROM TEMP DCA I REG17 /PUT INTO RAT ISZ REG17 /BUMP TO DO EVERY OTHER (NEVER SKIPS) ISZ TEMP1 /INCREMENT LOOP COUNTER JMP MOVTW2 /LOOP TIL DONE / TAD I REG16 /GET OLD BOTTOM (LAST IN TEMP AREA) AND K0077 /ENSURE LINE ATTRIBUTES CLEARED DCA I KKRT61 /PUT AS NEW EXTRA LINE / JMP I MOVTWO /RETURN / / XTDATA, TDATA /POINTER TO TEMPORARY STORAGE AREA / /----------------------- / BLNKLN - BLANK A LINE /----------------------- / / BLANK THE DISPLAY LINE CONTAINING THE CURSOR / ONLY DOES THE VISIBLE CHARACTERS (80 OR 132) / / ENTRY: CURROW IS THE LINE NUMBER TO BLANK / / EXIT: AC CLEARED / TEMP, TEMP1, 14 LOST / LINE IS BLANKED / / BLNKLN, 0 /ENTRY / JMS I XDSPAD /GET RAM ADDRESSES / TAD LINEFL /SELECT SCREEN DATA FIELD JMS I XCDFAC / AC7777 /PUT DISPLAY ADDRESS IN AUTO-INDEX REG TAD LINEAD DCA REG14 / TAD MODCOL /GET NUMBER OF WORDS TO BLANK CLL IAC RTR /DIVIDE BY FOUR (DO FOUR PER LOOP) CIA DCA TEMP1 / BLNKL5, DCA I REG14 /WRITE ZERO TO EACH WORD DCA I REG14 /DO FOUR TIMES TO REDUCE OVERHEAD DCA I REG14 DCA I REG14 ISZ TEMP1 /INCREMENT COUNTER JMP BLNKL5 /LOOP 'TIL DONE / CDF 00 /BACK TO HOME FIELD / TAD I LINPTR /CLEAR LINE ATTRIBUTES AND K0077 DCA I LINPTR / DCA EOFOK /MARK NOT OK TO HANDLE EOF / JMP I BLNKLN /RETURN / ---------------------------------------- / CSIBNG - HANDLE CONTROL SEQUENCE ESC [ ! / ---------------------------------------- / CSIBNG, JMS ESCPRO /GET ANOTHER CHARACTER / JMS I XCHKIN /CHECK IF ANOTHER INTERMEDIATE SNL CLA JMP I XPRINA /IF SO, HANDLE AS ERROR / TAD KBNGTB /POINT TO TABLE OF FINAL CHARACTERS JMS I XLOOKU / AND LOOK UP THIS CHARACTER / JMP I DONE /IF NOT FOUND, IGNORE THE SEQUENCE / / KBNGTB, BNGTAB / / / / / ------------------------------------ / SFTRRQ - SOFT TERMINAL RESET REQUEST / ------------------------------------ / / HANDLES THE CONTROL SEQUENCE ESC [ PN ! LITTLE-P / SFTRRQ, JMS I XGETPA /CHECK FOR PARAMETER CLA /IF NONE, DEFAULT TO ZERO SZA CLA /CHECK FOR PARAMETER EQUAL ZERO JMP SFTRR8 /IF NOT, IGNORE SEQUENCE / TAD VT200 /ONLY ALLOWED IN LEVEL 2 SZA CLA JMS I XXSFTR /PERFORM SOFT TERMINAL RESET / SFTRR8, JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE HANDLER / / XXSFTR, SFTRST PAGE / ----------------------------------- / PROESC - ESCAPE SEQUENCE PROCESSOR. / ----------------------------------- / /THIS ESCAPE PARSER CONFORMS TO THE ANSI STANDARD FOR ESCAPE SEQUENCE /PARSING AND THE VT102 CONVENTION. /FOR THIS LEVEL OF PARSING THE FORMAT FOR THE COMMAND IS: / / ESC I I .. F / / WHERE I IS AN INTERMEDIATE CHARACTER IN THE RANGE OF 40-57 / (SPACE TO "/") / AND THE F IS THE FINAL CHARACTER DESIGNATOR FROM 60-176 / THE PARSING CONTINUES UNTIL A FINAL CHARACTER IS SEEN AND / THE ACTUAL DECODING FUNCTION IS DONE BY THE ACTION ROUTINE AS / DEFINED BY THE FINAL CHARACTER. / PROESC, STA DCA ESCFLG /MARK ESCAPE SEQUENCE ACTIVE DCA VALID /MARK IT AS A VALID SEQUENCE / DCA DCSFLG /CLEAR THE CONTROL STRING IN PROGRESS FLAG / TAD ANSI /CHECK IF ANSI OR VT52 MODE SZA CLA /SKIP TO ANSI IF THAT'S DESIRED JMP I XVT52 /OTHERWISE GO DO THE VT52 PARSING JMS ESCPRO /SET UP NEXT LEVEL OF ENTRY FOR ANSI JMS I XCHKIN /GO SEE IF IT IS AN INTERMEDIATE VALUE SNL CLA /SKIP IF NOT AN INTERMEDIATE JMP PROINT /GO PROCESS THE INTERMEDIATE CHARACTER TAD KF1TAB /FINAL CHARACTER TABLE AT THIS LEVEL JMS I XLOOKU /GO DO LOOKUP AND EXECUTION JMP I DONE /EXIT AND DISMISS ESCAPE SEQUENCE / / XVT52, VT52 VALID, 0 /VALID ESCAPE SEQUENCE FLAG /0=NOT VALID, -1=VALID SO FAR KF1TAB, F1TAB / -------------------------------- / PROINT - INTERMEDIATE PROCESSOR. / -------------------------------- / /ENTRY TO HERE SUGGESTS AN INTERMEDIATE CHARACTER WAS DETECTED AT THE /TOP LEVEL OF PROCESSING. ONLY ONE INTERMEIDATE IS ALLOWED AS THERE ARE /NO DEFINED ESCAPE SEQUENCES DEFINED AT THIS TIME THAT HAVE A SECOND /INTERMEDIATE VALUE ASSOCIATED WITH IT. IF A SECOND INTERMEDIATE IS SEEN /THE ESCAPE SEQUENCE IS INVALIDATED BUT PROCESSING CONTINUES UNTIL A /FINAL CHARACTER IS SEEN. CONTROL IS PASSED TO THE APPROPRIATE INTERMEDIATE /PROCESSING ROUTINE. / PROINT, TAD KF4TAB /LOOKUP ON THIS LEVEL OF INTERMEDIATE JMS I XLOOKU /PERFORM THE LOOKUP / PROINA, JMS ESCPRO /RETURN TO HERE IF INVALID INTERMEDIATE /COME BACK HERE WITH NEXT CHARACTER / / /ERROR INTERMEDIATE PROCESSOR. /PROCESSING CONTINUES UNTIL A VALID FINAL CHARACTER RANGE IS FOUND. /THE ESCAPE SEQUENCE IS SUSPENDED ONCE THE FINAL CHARACTER IS RECEIVED / JMS I XCHKIN /SEE IF AN INTERMEDIATE CHARACTER SZL CLA /SKIP IF AN INTERMEDIATE JMP I DONE /EXIT AND SUSPEND ESCAPE SEQUENCE JMP I NEXT /WAIT FOR FINAL CHARACTER. / / KF4TAB, F4TAB /INTERMEDIATE PROCESSOR LOOKUP TABLE / ----------------------------- / CSI - CONTROL SEQUENCE PARSER / ----------------------------- / FORMAT TO BE PARSED IS / / ESC [ PP PN ; PN ; .... I F / / WHERE PP IS A PRIVATE PARAMETER (074 -> 077) / PN'S ARE A NUMERIC PARAMETERS (060 -> 071) / I IS AN INTERMEDIATE VALUE (040 -> 057) / F IS THE FINAL CHARACTER DESIGNATOR (100 -> 176) / ALL PARSING IS DONE UNTIL A FINAL CHARACTER IS RECEIVED. / / CSI, TAD KPARTB /PARAMETER TABLE ADDRESS DCA PARTAB /STARTING ADDRESS OF PARAMETER TABLE TAD KPARTB DCA PARTB1 /OUTPUT POINTER DCA PARTMP /STARTING DEFAULT CONDITION DCA QUEACT /PRIVATE PARAMETER INDICATOR JMS ESCPRO /AND SET UP FOR THE NEXT LEVEL OF PROCESSING / /ENTRY TO HERE AT NEXT LEVEL OF PROCESSING / JMS CHKPAR /GO VALIDATE THE PARAMETER JMP CSI3 /NUMERIC PARAMETER SEEN JMP CSI4 /INTERMEDIATE OR FINAL CHARACTER SEEN /FALL IN WITH NON-NUMERIC PARAMETER SEEN / / NON-NUMERIC PARAMETER / TAD QUEACT /CHECK IF OK TO GET PRIVATE PARAMETER HERE SZA CLA JMP CSI2 /NO, INVALIDATE THE SEQUENCE ACL /GET THE CHARACTER BACK DCA QUEACT /SAVE AS THE PRIVATE PARAMETER JMP I NEXT /ONTO THE NEXT SEQUENCE / CSI2, AC0001 DCA VALID /INVALIDATE THE SEQUENCE JMP I NEXT /ONTO THE NEXT CHARACTER SEQUNCE EVEN THOUGH /THE SEQUENCE IS NOW INVALID. /VALID PARAMETER VALUE SEEN. IF THIS IS FIRST TIME THROUGH THEN MARK THE /QUERY FLAG AS INVALID SO AS NOT TO PROCESS ANY FURTHER "?". / CSI3, TAD QUEACT SZA CLA /SKIP IF FIRST TIME JMP I NEXT AC4000 /QUERY CANNOT BE ACTIVE DCA QUEACT JMP I NEXT /AND EXIT / /ENTRY HERE SUGGESTS IT IS NOT A PARAMETER STRING. TEST TO SEE IF IT /IS AN INTERMEDIATE VALUE. / CSI4, JMS I XCHKIN SZL CLA /SKIP IF AN INTERMDIATE CHARACTER JMP CSI6 /NO, GO PERFORM THE LOOKUP TAD KCSIIN /YES, GET THE INTERMEDIATE TABLE JMP CSI9 / AND DO THE LOOKUP CSI6, TAD VALID SZA CLA /SKIP IF VALID SEQUNENCE JMP I DONE TAD QUEACT /CHECK IF PRIVATE PARAMETER SEEN SPA SNA JMP CSI8 /NO, GO USE REGULAR LOOK-UP TABLE TAD PRIVPT /ADD IN POINTER TABLE ADDRESS DCA TEMP /SAVE TABLE POINTER TAD I TEMP /GET TABLE ADDRESS JMP CSI9 / AND DO LOOKUP CSI8, CLA TAD KF3TAB /USE NON-PRIVATE LOOKUP TABLE CSI9, JMS I XLOOKU /PERFORM THE LOOKUP. JMP I DONE /RETURN SAYS INVALID CHARACTER. EXIT AND /SUSPEND ESCAPE SEQUENCE. KF3TAB, F3TAB /CSI FINAL CHARACTER TABLE PRIVPT, PRIVTB-0072 /POINTER OFFSET TO MAKE FIRST ENTRY A 'COLON' KCSIIN, CSIINT KPARTB, PARTB QUEACT, 0 /PRIVATE (NON-NUMERIC) PARAMETER /0000=NONE, 4000=NUMERIC PARAMETER SEEN, /0074='<', 0075='=', 076='>', 077='?' / ---------------------------------- / CHKPAR - CHECK FOR VALID PARAMETER / ---------------------------------- / /RETURN CALL +1 IF PARAMETER WAS NUMERIC OR A SEPARATOR WAS DETECTED. / CALL +2 IF NOT A PARAMTER / CALL +3 IF NON-NUMERIC PARAMETER / / ENTER WITH THE CHARACTER TO TEST IN THE MQ. / CHKPAR, 0 ACL /FETCH THE CURRENT CHARACTER TAD M100 /RANGE CHECK IT. ("0" THROUGH "?") STL /GUARENTEE LINK TAD K20 /LENGTH OF PARAMETERS SNL CLA /SKIP IF A VALID PARAMETER VALUE JMP CHKPA2 JMS STOPAR /GO STORE THE PARAMETER JMP CHKPA4 /NOT A PARAMETER - CHKPA2, ACL /FETCH BACK THE CHARACTER TAD M71 /SEE IF NUMERIC PARAMETER SPA SNA /SKIP IF NOT (GT 0) JMP CHKPA6 /CONVERT TO BINARY AND RANGE CHECK IT TAD M2 /SEE IF A SEPARATOR (;) SNA CLA /SKIP IF NOT JMP CHKPA9 /GO PROCESS NUMERIC VALUE ISZ CHKPAR /NON-NUMERIC PARAMETER CHKPA4, ISZ CHKPAR /NOT A PARAMETER AT ALL JMP I CHKPAR /ERROR EXIT / /CONVERT THE PARAMETER TO A NUMERIC ARGUMENT / CHKPA6, CLA TAD PARTMP /GET THE CURRENT PARAMETER CLL RTL /MULTIPY CURRENT NUMBER BY TEN TAD PARTMP CLL RAL /FINAL BY 10 DCA PARTMP /RESTORE THE VALUE ACL /GET CURRENT VALUE TAD M60 /MAKE IT BINARY TAD PARTMP /FINAL VALUE DCA PARTMP /AND SAVE IT TAD PARTMP /GET THE VALUE JUST CALCULATED AND K7400 /MASK TO MAXIMUM VALUE SNA CLA /SKIP IF GREATER THAN ALLOWABLE (255) JMP CHKPA8 /VALUE IS WITHIN THE RANGE. TAD K0377 /SET IT TO THE MAXIMUM. (255 AS DEFINED BY /THE 102 SPEC.) DCA PARTMP /AND SAVE IT CHKPA8, JMP I CHKPAR /NORMAL EXIT. PARAMETER WAS NUMERIC /AND IS NOW ON THE PARAMETER STACK. / /STORE THE PARAMETER VALUE / CHKPA9, JMS STOPAR /STORE THE PARAMETER JMP I CHKPAR /AND EXIT. / / M2, -0002 M71, -71 M100, -100 K7400, 7400 PARTMP, 0 MPAREN, -PARTB-20 /2'S COMPLEMENT OF END ADDRESS OF PARAMETERS / -------------------------------------- / STOPAR - STORE CSI PARAMETER IN BUFFER / -------------------------------------- / STOPAR, 0 TAD PARTAB /FIRST RANGE CHECK IT. ONLY 15 PARAMETERS ARE /ALLOWED. TAD MPAREN SMA CLA /SKIP IF STILL WITHIN LIMITS JMP I STOPAR /EXIT. TOO MANY VALUES ON PARAMETER LIST. / TAD PARTMP /GET THE CURRENT VALUE DCA I PARTAB /STORE VALUE IN THE PARAMETER TABLE / ISZ PARTAB DCA PARTMP /SET UP FOR NEXT DEFAULT VALUE JMP I STOPAR PAGE / ----------------- / CUB - CURSOR BACK / ----------------- / /CURSOR BACK. MOVE THE CURSOR UP A NUMBER OF COLUMNS ACCORDING TO THE /PARAMETER PASSED TO IT. IF THE PARAMETER PASSED IS A ? THE SEQEUNCE IS /ABORTED AND NO ACTION IS TAKEN. THE CURSOR WILL NOT BACK UP BEYOND ZERO / THE DEFAULT VALUE IS 1 AND IS INDICATED A ZERO IN THE PARAMETER LIST. /ONLY ONE PARAMETER IS SCANNED IN THE PARAMETER LIST. / CUB, JMS I XGETPA /GO GET A PARAMETER JMP I DONE /EXIT CIA /NEGATE THE CHARACTER SNA /SKIP IF NOT DEFAULT CONDITION CUB5, AC7777 /AC=-1 DEFAULT CONDITION JMP CUF8 /GO USE COMMON CODE TO HANDLE CURSOR / -------------------- / CUF - CURSOR FORWARD / -------------------- / / MOVE THE CURSOR FORWARD A NUMBER OF COLUMNS ACCORDING TO THE /PARAMETER PASSED TO IT. IF THE PARAMETER PASSED IS A ? THE SEQEUNCE IS /ABORTED AND NO ACTION IS TAKEN. / THE DEFAULT VALUE IS 1 AND IS INDICATED A ZERO IN THE PARAMETER LIST. /ONLY ONE PARAMETER IS SCANNED IN THE PARAMETER LIST. / CUF, JMS I XGETPA /GO GET A PARAMETER JMP I DONE /EXIT SNA /SKIP IF NOT DEFAULT CONDITION CUF5, AC0001 /AC=1 DEFAULT CONDITION CUF8, TAD CURCOL /AC IN CURRENT VALUE DCA CURCOL /SAVE THE VALUE FOR NOW CUF9, JMS I XUPDAT /MAKE NEW POSTION DCA LSTCOL /CLEAR PENDING AUTOWRAP JMP I DONE / ---------------------------------- / STBM - SET TOP AND BOTTOM MARGINS. / ---------------------------------- / /THIS ROUTINE SETS THE TOP AND BOTTOM MARGINS TO DEFINE THE SCROLLING /REGION. THIS FIRST PARAMETER IS THE LINE NUMBER OF THE FIRST LINE IN THE SCROLLING /REGION AND THE SECOND PARAEMTER IS THE LINE NUMBER OF THE BOTTOM LINE IN /THE SCROLLING REGION. DEFAULT IS THE ENTIRE SCREEN (1-24). THE MINIMUM SIZE / OF THE SCROLLING REGION ALLOWED IS TWO LINES AND THE TOP MARGINE MUST BE /LESS THAN THE BOTTOM MARGIN. / STBM, JMS I XGETPA JMP STBM1 /SET UP DEFAULT TOP VALUE OF 1 SNA /SKIP IF NOT DEFAULT VALUE JMP STBM1 TAD M0001 /BACK IT UP ONE FOR DIRECT CONVERSION STBM1, DCA TEMP / /NOW PICK UP THE NEW BOTTOM MARGIN / JMS I XGETPA JMP STBM2 /PARAMETER LIST IS EMPTY SNA /SKIP IF A VALUE IS SPECIFIED JMP STBM2 TAD M0001 /MAKE IT ABSOLUTE SKP STBM2, TAD K0027 /PICK UP THE LAST ALLOWABLE ROW DCA TEMP1 TAD K0027 /MAX SCREEN SIZE (24. - 1.) CIA TAD TEMP1 /BOTTOM PARAMETER SMA SZA CLA /SKIP IF NOT WITH IN LIMITS JMP I DONE /EXIT TAD TEMP //MUST BE AT LEAST TWO LINES IN THE /SCROLLING REGION. CIA /NEGATE THE VALUE TAD TEMP1 /COMPARE IT TO THE BOTTOM VALUE SPA SNA CLA /SKIP IF AT LEAST TWO LINE IN THE REGION JMP I DONE /JUST EXIT TAD TEMP /SAVE THE NEW SCROLLING REGION DCA TOP TAD TEMP1 DCA BOTTOM /AND THE NEW BOTTOM JMS I XRATCL /ADJUST RAT TO MAINTAIN RAM REFRESH JMS I XADTBH /ADJUST TOP AND BOTTOM OF DISPLAY REGION / JMP I DONE / XRATCL, RATCLE / ---------------------------------------- / CUP - DIRECT CURSOR ADDRESSING FUNCTION. / ---------------------------------------- / /THIS ROUTINE SUPORTS THE DIRECT CURSOR FUNCTION CUP AS WELL AS HVP. /THEY BOTH PERFORM THE SAME FUNCTION. / /THE PROCESS GETS A PARAMETER OF THE INPUT LIST AND IF THE LIST /IS EMPTY RESETS THE CURSOR TO HOME. /IF THE SECOND PARAMETER IS NOT PRESENT THEN THE COLUMN ADDRESS IS SET /TO THE FIRST CHARACTER ON THE LINE INPLIED BY THE FIRST PARAMETER. / CUP, JMS I XGETPA JMP CUP1 /HOME THE CURSOR SNA /SKIP IF NOT DEFAULT VALUE JMP CUP1 TAD M0001 /BACK UP ONE FOR DIRECT CONVERSION CUP1, DCA CURROW / /NOW PICK UP THE NEW COLUMN ADDRESS / JMS I XGETPA JMP CUP2 /PARAMETER LIST IS EMPTY SNA /SKIP IF A VALUE IS SPECIFIED JMP CUP2 TAD M0001 /MAKE IT ABSOLUTE CUP2, DCA CURCOL DCA LSTCOL /CLEAR PENDING AUTOWRAP FLAG JMS I XUPDAT JMP I DONE / --------------- / CUU - CURSOR UP / --------------- / /CURSOR UP. MOVE THE CURSOR UP A NUMBER OF ROWS ACCORDING TO THE /PARAMETER PASSED TO IT. IF THE PARAMETER PASSED IS A ? THE SEQEUNCE IS /ABORTED AND NO ACTION IS TAKEN. THE CURSOR WILL NOT BACK UP BEYOND ZERO /AS NO SCROLLING IS PERFORMED. THE DEFAULT VALUE IS 1 AND IS INDICATED /A ZERO IN THE PARAMETER LIST. /ONLY ONE PARAMETER IS SCANNED IN THE PARAMETER LIST. / CUU, JMS I XGETPA /GO GET A PARAMETER JMP I DONE /EXIT CIA /NEGATE THE CHARACTER SNA /SKIP IF NOT DEFAULT CONDITION CUU5, AC7777 /AC=-1 DEFAULT CONDITION TAD CURROW /AC IN CURRENT VALUE DCA TEMP /SAVE NEW VALUE WHILE IT'S BEING TESTED / TAD SCRGOF /CHECK IF CURRENTLY BELOW TOP OF SCROLL REGION CIA TAD CURROW /CURROW-SCRGOF SPA CLA JMP CUU8 /NO, ONLY LIMITED BY TOP OF SCREEN / TAD SCRGOF /YES, CHECK IF GOING ABOVE SCROLL REGION CIA TAD TEMP /TEMP-SCRGOF SMA CLA JMP CUU8 /NO, GO MOVE CURSOR / CUU6, TAD SCRGOF /YES, LIMIT TO THE TOP OF SCROLL REGION SKP / CUU8, TAD TEMP /USE THE NEW VALUE, NOT LIMITED DCA CURROW JMP CUF9 /GO USE COMMON CODE FOR CURSOR HANDLING / ------------------------------------------------------ / GETPAR - GET A CSI PARAMETER FROM THE PARAMETER BUFFER / ------------------------------------------------------ / /ROUTINE TO GET A PARAMETER OF THE INPUT PARAMETER LIST. /RETURN IS MADE TO CALL +1 IF END OF LIST /AND TO CALL +2 IF A VALID PARAMETER FOUND. / GETPAR, 0 CLA TAD PARTB1 /OUTPUT POINTER CIA /NEGATE IT TAD PARTAB /COMAPRE IT AGAINST THE LAST ENTRY SPA SNA CLA /SKIP IF STILL VALID JMP I GETPAR /EXIT - END OF THE LIST / TAD I PARTB1 /GET A PARAMETER ISZ PARTB1 /POINT TO NEXT ONE ISZ GETPAR /UPDATE THE RETURN JMP I GETPAR /AND EXIT / ----------------------- / LOOKUP - LOOKUP ROUTINE. / ----------------------- / /THIS ROUTINE PERFORMS A LOOKUP ON THE CHARACTER IN THE MQ /AND IF THE CHARACTER IS FOUND THE ROUTINE PROCESSES THE SEQUENCE /INITIATED. IT WILL ESTABLISH THE PROPER EXIT LEVEL. /IF THE CHARACTER IS NOT FOUND AN EXIT IS MADE TO THE CALLING ROUTINE. / / LOOKUP, 0 DCA TEMP1 /SAVE TABLE ADDRESS ACL /FETCH THE CHARACTER DCA TEMP /AND SAVE IT CDF 10 /CHANGE FIELD TO GET TABLE DATUM LOOKU2, TAD I TEMP1 /FETCH DATA COMPARISON VALUE ISZ TEMP1 /UPDATE POINTER SNA /SKIP IF NOT END OF TABLE JMP LOOKU8 /CHARACTER NOT FOUND TAD TEMP /DO COMPARISON SNA CLA /SKIP IF NOT EQUAL JMP LOOKU5 /A VALID SEQUENCE HAS BEEN INITIATED ISZ TEMP1 /UPDATE TO NEXT CHARACTER TO TEST JMP LOOKU2 /GO BACK AND DO IT AGAIN LOOKU5, TAD I TEMP1 /GET ROUTINE TO EXECUTE CDF 00 /BACK TO HOME FIELD DCA TEMP /AND SAVE IT JMP I TEMP /GO TO PROPER ROUTINE / LOOKU8, CDF 00 /NOT IN TABLE, BACK TO HOME FIELD JMP I LOOKUP /AND RETURN / ------------------------------------------------------------- / DELERR - MAKE DELETE CHARACTER (177) INTO THE ERROR CHARACTER / ------------------------------------------------------------- / / ENSURE CHARACTER MAPS HAVE 040=SPACE AND 177=REVERSE QUERY / DELERR, 0 /ENTRY / CDF 10 /GET FIELD OF CHARACTER MAPS / TAD K137 /BUILD THE CHARACTER ADDRESS TAD INTERM DCA TEMP /SAVE FOR LATER TAD K0177 /GET THE ERROR CHARACTER ADDRESS DCA I TEMP /PUT ERROR CHARACTER INTO MAP / TAD K0040 /GET A SP CHARACTER (NOT A ZERO) DCA I INTERM /PUT A SPACE IN THE MAP / CDF 00 /BACK TO HOME FIELD / JMP I DELERR /RETURN / / K0040, 0040 K137, 0137 PAGE / ------------------------------------------------------------- / G0SET, G1SET, G2SET, G3SET - DESIGNATE CHARACTER SETS G0 - G3 / ------------------------------------------------------------- / / ** MAY HAVE TO CHECK FOR ARBITRARY DESIGNATING SEQUENCE FOR USER-DEFINED / CHARACTER SETS, COULD BE UP TO TWO INTERMEDIATES AND A FINAL (I I F) ** / G3SET, TAD K0140 /G3 SET TO BE DESIGNATED G2SET, TAD K0140 /G2 SET TO BE DESIGNATED G1SET, TAD K0140 /G1 SET TO BE DESIGNATED G0SET, TAD MAPG0 /G0 SET TO BE DESIGNATED / DCA INTERM /SAVE THE MAPPING TABLE BASE ADDRESS / JMS ESCPRO /ENTER BELOW WITH THE NEXT CHARACTER / / /CHARACTER SET SELECTION (IN PROGRESS) TAD SETTAB /CHARACTER SET TABLE JMS I XLOOKU /GO PROCESS SELECTED CHARACTER SET /(NOTE THAT THERE IS AN INTERMEDIATE IN THE / TABLE (SP)) JMS I XCHKIN /SEE IF CHARACTER IS AN INTERMEDIATE SNL CLA /SKIP IF NOT JMP I XPRINA /SET UP TO HANDLE THE ERROR JMP I DONE /EXIT IF NOT IN TABLE / SETTAB, CHRSET / / / / / -------------------------------------------------- / SLEXTC - SELECT EXTENDED CHARACTER ADDRESSING MODE / -------------------------------------------------- / / ENTRY: AC = 0000 / EXIT: AC CLEARED / SLEXTC, 0 /ENTRY / AC0010 /GET MASK FOR EXT CHAR ADDR MODE DCA TEMP / AC0001 /SET THE BIT IN THE CRTC WORD JMS I XCRTCS / JMP I SLEXTC /RETURN / ------------------------- / CHARACTER SET DESIGNATION / ------------------------- / / MUST DISABLE USER-DEFINED CHARACTERS EXCEPT IN DECMATE II / SETUAT, JMS SLEXUS /SELECT USER CHARACTERS / SET1, AC4000 /DECMATE I ALTERNATE ROM DCA TEMP1 /SAVE FOR A WHILE JMS SLEXTC /SELECT EXTENDED CHARACTER ADDRESSING MODE / TAD TEMP1 /GET THE NUMBER BACK /FALL INTO THE REST OF THE PROCESSING / / DESIGNATE US ASCII / SETB, JMS I XUSASC /BUILD US ASCII MAP JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PROCESSOR / / / --------------------------------------------- / DESIGNATE SPECIAL GRAPHICS (LINE DRAWING SET) / --------------------------------------------- / / MUST DISABLE USER-DEFINED CHARACTERS EXCEPT IN DECMATE II / SETUA, JMS SLEXUS /SELECT USER CHARACTERS / SET2, JMS SLEXTC /SELECT EXT CHAR ADDR FOR ALT ROM SPEC GRAPHICS AC4000 /ALTERNATE ROM SPECIAL GRAPHICS SET0, JMS SPCSGR /BUILD SPECIAL GRAPHICS MAP JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PROCESSOR / / / --------------------------------- / SELECT USER-DEFINED CHARACTER SET / --------------------------------- / SLEXUS, 0 TAD K0014 /SELECT EXTENDED CHARACTER AND USER-DEFINES DCA TEMP AC0001 JMS I XCRTCS JMP I SLEXUS / / K0014, 0014 / ------------------------------------- / BUILD SPECIAL GRAPHICS CHARACTER MAP / ------------------------------------- / SPCSGR, 0 /ENTRY / DCA TEMP2 /FIRST VALUE / TAD TEMP2 /GET THE VALUE JMS I XUSASC /BUILD THE BASIC US ASCII MAP FIRST / TAD K0076 /POINT TO FIRST ADDRESS THAT DIFFERS (-1) TAD INTERM / USING THIS BASE ADDRESS DCA REG14 / TAD M0040 /NUMBER OF ADDRESSES TO CHANGE (2'S COMP) DCA TEMP1 / CDF 10 /FIELD ONE FOR TABLE / SPCSG2, TAD TEMP2 /GET VALUE DCA I REG14 /PUT INTO MAP ISZ TEMP2 /UPDATE VALUE /(NEVER SKIPS) ISZ TEMP1 /INCREMENT LOOP COUNTER JMP SPCSG2 /LOOP THROUGH THIS SECTION OF TABLE / CDF 00 /BACK TO HOME FIELD / JMP I SPCSGR /RETURN / / K0076, 0076 / ----------------------------------------------- / SET, RESET - DEC PRIVATE SET/RESET MODE ROUTINE / ----------------------------------------------- / /SET/RESET MODE DECODER - DEC PRIVATE SEQUENCES ONLY, ALL OTHERS ARE IGNORED. /THIS ROUTINE TESTS FOR A VALID PARAMETER AND DISPATCHES TO THE APPROPRIATE /ROUTINE. NUMERIC PARAMETERS ARE ALL THAT IS SUPPORTED. / RESET, TAD KRESET /GET 'RESET' TABLE ADDRESS SKP SET, TAD KSET /GET 'SET'TABLE ADDRESS DCA TABTMP /SAVE APPROPRIATE TABLE ADDRESS / SRRET, JMS I XGETPA /GET THE NEXT PARAMETER VALUE JMP I DONE /NO MORE PARAMETERS, ALL DONE SNA /SKIP IF A PARAMETER PRESENT JMP SRRET /ZERO IS AN INVALID PARAMETER TAD M32 /MUST BE LESS THAN TWENTY-SIX DECIMAL SMA /SKIP IF WITHIN RANGE JMP SRRET /GO BACK AND TRY ANOTHER TAD K0032 /GET BACK THE PARAMETER TAD TABTMP /ADD IN THE BASE DISPATCH ADDRESS JMP I XDSPX /AND DISPATCH TO THE ROUTINE / KRESET, RSTAB-1 KSET, SETTB-1 M32, -32 K0032, 0032 TABTMP, 0 /TEMPORARY TABLE ADDRESS / ----------------------------------------------------- / RANM - DISABLE ANSI MODE (ENTER VT52 EMULATION MODE). / ----------------------------------------------------- / / ** CAN WE ALLOW 8-BIT IN VT52 MODE?? SHOULD WE CLEAR SINGLE SHIFT?? / ARE C1 INTRODUCERS USED IN VT52?? MUST RETURN BE TO LEVEL 1?? / MAY CHANGE SETUP WORD?? ** / RANM, TAD VT200 /CHECK EMULATION LEVEL SZA CLA JMS I XXXSFR /DO SOFT RESET IF LEVEL 2 -> VT52 DCA VT200 /AND FORCE RETURN TO LEVEL 1 / AC7777 /ENABLE VT52 MODE/DISABLE ANSI MODE DCA ANSI /MARK VT52 MODE / TAD K0177 /ENSURE 7-BIT DCA BITMSK / JMP SRRET /AND EXIT / / XXXSFR, SFTRST / / / ------------------------------------------------- / SCOLM, RCOLM - ENABLE OR DISABLE 132 COLUMN MODE. / ------------------------------------------------- / ** MAY CHANGE SETUP WORD?? ** / SCOLM, AC7777 /ENABLE 132 COLUMN MODE. RCOLM, AND I XOK132 /CHECK IF OK TO ATTEMPT 132 COLUMN DCA COLMOD /ENABLE OR DISABLE 132 COLUMN MODE. DCA ERASE /ENSURE SCREEN CLEARED BY CRT INITIALIZATION JMS I XXCRTI /GO REINITIALIZE CRT CONTROLLER JMP SRRET /EXIT / XXCRTI, CRTINI XOK132, OK132 / ----------------------------------------------- / SSCNM, RSCNM - ENABLE OR DISABLE REVERSE SCREEN / ----------------------------------------------- / ** MAY CHANGE SETUP WORD?? ** / SSCNM, AC7777 /BLACK ON WHITE RSCNM, DCA SCRN / OR WHITE ON BLACK AC0001 DCA TEMP TAD SCRN JMS I XCRTCS / JMS I XSET26 /ENSURE 26TH LINE WON'T SHOW / JMP SRRET / / XSET26, SET26 / / / ---------------------------------------- / SOM, ROM - /ENABLE OR DISABLE ORGIN MODE / ---------------------------------------- / SOM, AC7777 /SET ORIGIN MODE ROM, DCA ORIGIN /CLEAR ORIGIN MODE / / JMS I XADTBH /ADJUST TOP AND BOTTOM OF DISPLAY REGION / JMP SRRET /EXIT / / ---------------------------------------- / SAWM, RAWM - ENABLE OR DISABLE AUTO WRAP / ---------------------------------------- / SAWM, AC7777 /ENABLE AUTO WRAP MODE RAWM, DCA I XWRAP /SET OR CLEAR AUTO WRAP MODE / DCA LSTCOL /ENSURE NO PENDING AUTOWRAP / JMP SRRET /AND EXIT / XWRAP, WRAP / ----------------------------------------------------------- / SRAM, RARM - ENABLE OR DISABLE AUTO REPEAT ON THE KEYBOARD. / ----------------------------------------------------------- / SARM, AC7777 /SET AUTO REPEAT RARM, CMA /COMPLEMENT DCA ARM /ENABLE OR DISABLE AUTO REPEAT TAD ARM /CHECK STATE TO SEND PROPER COMMAND TO KEYBOARD SZA CLA AC7776 /RESET (BECOMES 0341, DISABLE AUTO-REPEAT CMND) TAD KBEAR /SET - REINSTATE KEYBOARD DEFAULTS JMS I XF1DSP /SEND COMMAND TO THE KEYBOARD KBXQPT /(ROUTINE IN FIELD ONE) / JMP SRRET /JUMP BACK TO PREVIOUS PAGE TO RETURN / / KBEAR, 0343 /KEYBOARD COMMAND TO RE-ENABLE AUTOREPEATS / / / ------------------------------------------ / SCKM, RCKM - SET OR RESET CURSOR KEY MODE. / ------------------------------------------ / SCKM, AC7777 RCKM, DCA CURKEY /SET UP CLEAR CURSOR KEY MODE. JMP SRRET /RETURN TO CALLING POINT / CURKEY, 0 /CURSOR KEY MODE (0000=DIRECTION MODE, CSI A; / 7777=APPLICATION MODE, SS3 A) PAGE / ------------------------------------------------------- / F1DSPX - CALL A SUBROUTINE IN FIELD ONE FROM FIELD ZERO / ------------------------------------------------------- / / ENTRY: AC = DESIRED AC AT ENTRY TO DESTINATION ROUTINE / ADDRESS OF ROUTINE IN FIELD ONE FOLLOWS THE CALL / F1DSPX, 0 / CDF 00 /FORCE INSTRUCTION FIELD / DCA F1DSTM /SAVE AC AT ENTRY / TAD I F1DSPX /GET ADDRESS OF DESTINATION ROUTINE DCA F1DST1 / ISZ F1DSPX /INCREMENT RETURN ADDRESS (SKIPS ADDRESS) / CIF 10 /INSTRUCTION FIELD ONE (DATA FIELD STILL ZERO) JMS I XF1RCV /CALL THE FIELD ONE RECEIVER ROUTINE / JMP I F1DSPX /RETURN WHEN ALL DONE / / F1DSTM, 0 F1DST1, 0 XF1RCV, F1RCVR /RECEIVER ROUTINE IN FIELD ONE / -------------------------------------------------------- / F0RCVR - FIELD ZERO CROSSFIELD DISPATCH RECEIVER ROUTINE / -------------------------------------------------------- / / ENTRY: AC = 0000 / F0RCVR, 0 / TAD I XF0DT1 /GET DESTINATION ROUTINE ADDRESS FROM FIELD ONE DCA F0RCTM / TAD I XF0DTM /GET AC AT ENTRY FROM FIELD ONE / CDF 00 /NOW CHANGE DATA FIELD / JMS I F0RCTM /CALL THE ROUTINE (DATA AND INST FIELDS = ZERO) / CIF CDF 10 /WHEN DONE, RETURN TO FIELD ONE JMP I F0RCVR / / F0RCTM, 0 XF0DT1, F0DST1 /SAVED ROUTINE ADDRESS IN FIELD ONE XF0DTM, F0DSTM /SAVED AC IN FIELD ONE / --------------------------------------------- / RATIN - ROW ADDRESS TABLE FOR INITIALIZATION / --------------------------------------------- / / THIS TABLE USED TO BUILD THE RAT. / ONLY EVERY OTHER WORD APPEARS HERE / RATIN, 41 /(2)0400 THIS PART OF THE RAT IS REALLY USED 42 /(2)1000 43 /(2)1400 44 /(2)2000 45 /(2)2400 46 /(2)3000 47 /(2)3400 50 /(2)4000 51 /(2)4400 52 /(2)5000 53 /(2)5400 54 /(2)6000 55 /(2)6400 56 /(2)7000 73 /(3)5400 AVOIDS USING THE TOP OF FIELD TWO 74 /(3)6000 AVOIDS USING THE BOTTOM OF FIELD THREE 61 /(3)0400 62 /(3)1000 63 /(3)1400 64 /(3)2000 65 /(3)2400 66 /(3)3000 67 /(3)3400 70 /(3)4000 71 /(3)4400 25TH LINE FOR RAM REFRESH (INVISIBLE) 72 /(3)5000 26TH LINE FOR RAM REFRESH (VISIBLE) / ----------------------- / RAT - ROW ADDRESS TABLE / ----------------------- / / RAT, ZBLOCK 64 /CRTC ROW ADDRESS TABLE (52. WORDS LONG) /ALLOWS FOR 24 VISIBLE CHARACTER ROWS ON THE SCREEN AND /TWO INVISIBLE ROWS FOR RAM REFRESH. / / / ===================================================================== / EACH TWO-WORD ENTRY IN THE CRTC ROW ADDRESS TABLE IS FORMATTED THUSLY. / / WORD1<0> ROW VISIBILITY BIT (1=INVISIBLE) / WORD1<1:3> 000 / WORD1<4:11> LOW BYTE OF ADDRESS OF ROW'S FIRST CHARACTER / (MAY BE USED FOR HORIZONTAL SCROLL ??) / / WORD2<0:3> 0000 / WORD2<4:5> ROW ATTRIBUTES (00 -> SINGLE HEIGHT, SINGLE WIDTH / 01 -> SINGLE HEIGHT, DOUBLE WIDTH / 10 -> DOUBLE HEIGHT-WIDTH, TOP HALF / 11 -> DOUBLE HEIGHT-WIDTH, BOTTOM) / WORD2<6:7> LOW TWO BITS OF FIELD OF ROW DATA (HIGH BIT ALWAYS 0) / WORD2<8:11> HIGH NIBBLE OF ADDRESS OF ROW'S FIRST CHARACTER / ====================================================================== / --------------------------------------------- / SLCSLK - SELECT CAPS/SHIFT LOCK MODE (PR3 15) / --------------------------------------------- / / AC<11> = 0 --> SELECT CAPS LOCK / 1 --> SELECT SHIFT LOCK / SLCSLK, JMS AC11EX /DETERMINE FLAG VALUE FROM AC<11> DCA CPSHFT /SAVE CAPS/SHIFT LOCK FLAG / JMP I XPRQ3Z /RETURN THROUGH PR3 HANDLER / XPRQ3Z, PRQ3Z CPSHFT, 0 /CAPS LOCK/SHIFT LOCK MODE, /0000=CAPS LOCK, 7777=SHIFT LOCK / / / ---------------------------------------------------- / SLCMEN - SELECT COMPOSE MODE ENABLE/DISABLE (PR3 16) / ---------------------------------------------------- / / AC<11> = 0 --> DISABLE COMPOSE / 1 --> ENABLE COMPOSE / SLCMEN, JMS AC11EX /DETERMINE FLAG VALUE FROM AC<11> JMS I XF1DSP /CALL ROUTINE IN FIELD ONE TO CMPSIN / SET/RESET COMPOSE MODE / JMP I XPRQ3Z /RETURN THROUGH PR3 HANDLER / / / / ------------------------------------------------------- / SLSBEN - SELECT SCREEN BLANK ENABLE/DISABLE FROM AC<11> / ------------------------------------------------------- / / AC<11> = 0 --> ENABLE SCREEN BLANK AFTER ONE-HALF HOUR, / 1 --> NEVER BLANK THE SCREEN / SLSBEN, JMS AC11EX /DETERMINE FLAG VALUE FROM AC<11> DCA I XBLNEN /SAVE SCREEN BLANK ENABLE/DISABLE FLAG / JMS I XF1DSP /TURN ON SCREEN AND RESTART COUNTERS SCRNON / JMP I XPRQ3Z /RETURN THROUGH PR3 HANDLER / / XBLNEN, BLNKEN / ------------------------------------- / SLIDIN - SELECT IDIN MODE FROM AC<11> / ------------------------------------- / / AC<11> = 0 --> DISABLE IDIN MODE / = 1 --> ENABLE IDIN MODE (PASS KEYCODES STRAIGHT TO USER) / SLIDIN, JMS AC11EX /DETERMINE FLAG VALUE FROM AC<11> DCA IDIN /SAVE IDIN MODE FLAG / JMS I XXSILS /CLEAR QUEUE TO USER TO AVOID MIXED DATA TYPES / JMP I XPRQ3Z /RETURN THROUGH PR3 HANDLER / / XXSILS, SILSET IDIN, 0 /IDIN MODE FLAG, / 0 = NORMAL TRANSLATION OF KEYCODES INTO / CHARACTERS, / -1 = PASS KEYCODES STRAIGHT TO USER. / / / --------------------------------------------- / AC11EX - EXPAND ACSAV<11> TO A FULL WORD FLAG / --------------------------------------------- / AC11EX, 0 / TAD ACSAV /GET THE AC AT PANEL RAM ENTRY RAR /ROTATE AC<11> INTO LINK SZL CLA AC7777 /IF SET, USE 7777, ELSE USE 0000 / JMP I AC11EX /RETURN WITH FLAG VALUE IN AC PAGE / --------------------------------- / CHINS - INSERT CHARACTER SHUFFLER / --------------------------------- / / SHUFFLE CHARACTERS TO THE RIGHT. / THE NUMBER OF SPACES TO INSERT ARE SPECIFIED IN THE 'AC' AT ENTRY; A VALUE / OF ZERO IS CONVERTED TO ONE. / CHINS, 0 /ENTRY / JMS ICDCSB /DO PROCESSING COMMON TO ICH AND DCH / SPA /NEED CHARACTERS TO SHUFFLE JMP CHINS2 /HAVE 'EM, GO SHUFFLE / AC7777 TAD MRIGCO /NO SHUFFLE, ADJUST NUMBER CHARS TO ERASE TAD CURCOL DCA INSERS /(2'S COMPLEMENT FOR LOOP) JMP CHINS8 /SKIP SHUFFLE AND GO ERASE / / SHUFFLE CHARACTERS TO SAVE PLACE (TWO-PART MOVE) / CHINS2, CLL CML RAR /DIVIDE SHUFFLE COUNT BY FOUR CLL CML RAR / TO DO FOUR PER LOOP DCA INSSHF / AC7777 /SET UP TO USE ZEROTH ROW AS DESTINATION DCA REG14 / (-1 FOR AUTO-INCREMENT) / AC7777 /(-1 FOR AUTO-INCREMENT) TAD CHARAD /SET UP SOURCE POINTER FOR SHUFFLE DCA REG15 / TAD INSSHF /GET NUMBER OF CHARACTERS/4 TO SHUFFLE FOR LOOP DCA TEMP1 / /SHUFFLE FOUR CHARACTERS PER LOOP TO MINIMIZE / LOOP CONTROL OVERHEAD. OK TO GO BEYOND / VISIBLE LINE. / CHINS4, TAD I REG15 /GET CHARACTER TO SHUFFLE DCA I REG14 /PUT IN TEMP STORAGE FOR NOW TAD I REG15 DCA I REG14 TAD I REG15 DCA I REG14 TAD I REG15 DCA I REG14 ISZ TEMP1 /INCREMENT LOOP COUNTER JMP CHINS4 /LOOP UNTIL EXHAUSTED / MOVE CHARACTERS BACK INTO ROW (DISPLACED BY INSERTION CONSTANT) / AC7777 /(-1 FOR AUTO-INCREMENT) TAD CHARAD /GET DESTINATION FOR REPLACEMENT SHUFFLE TAD TEMP DCA REG14 / AC7777 /SET UP TO USE ZEROTH ROW FOR SOURCE DCA REG15 / /SHUFFLE FOUR CHARACTERS PER LOOP CHINS7, TAD I REG15 /GET SAVED CHARACTER DCA I REG14 /PUT INTO ROW (SHUFFLED NOW) TAD I REG15 DCA I REG14 TAD I REG15 DCA I REG14 TAD I REG15 DCA I REG14 ISZ INSSHF /INCREMENT LOOP COUNTER JMP CHINS7 /LOOP TIL DONE / / ERASE CHARACTERS / CHINS8, AC7777 /GET ERASE POINTER (-1 FOR AUTO-INCREMENT) TAD CHARAD DCA REG14 / CHINS9, DCA I REG14 /ERASE CHARACTER ISZ INSERS /INCREMENT LOOP COUNTER JMP CHINS9 /LOOP UNTIL DONE / CDF 00 /BACK TO HOME FILED / JMP I CHINS /RETURN / / INSSHF, 0 /# CHARACTERS TO SHUFFLE INSERS, 0 /# CHARACTERS TO ERASE / ------------------------- / DCH - DELETE CHARACTER(S) / ------------------------- / / DELETE THE SPECIFIED NUMBER OF CHARACTERS, STARTING WITH THE CURRENT CURSOR / POSITION. THE REMAINING CHARACTERS AT THE RIGHT OF THE LINE ARE SHUFFLED / LEFT TO FILL THE DELETED AREA. BLANKS ARE BROUGHT IN TO PAD THE RIGHT SIDE / OF THE LINE. / DCH, JMS I XGETPA /GET PARAMETER FROM THE ESCAPE SEQUENCE PARSER CLA /IF NONE, ASSUME ZERO ENTRY / JMS ICDCSB /DO COMMON PROCESSING / SPA CLA /CAN'T SHUFFLE LESS THAN ONE JMP DCH2 /GO TO SHUFFLE / AC7777 TAD MRIGCO /CAN'T SHUFFLE, ERASE ALL THE RIGHT SIDE OF THE LINE TAD CURCOL CLL CML RAR /DIVIDE BY TWO DCA INSERS / AC7777 /GET THE FIRST CHARACTER TO ERASE (-1 FOR AUTO-INC) TAD CHARAD /START WITH CURSOR CAUSE NO SHUFFLE REQUIRED DCA REG15 /SAVE FOR ERASE LOOP CONTROL / JMP DCH8 /SKIP SHUFFLE AND GO ERASE / DCH2, AC7777 /GET SOURCE POINTER FOR SHUFFLE (-1 FOR AUTO-INCREMENT) TAD CHARAD TAD TEMP DCA REG14 /START FROM THE FIRST CHARACTER THAT'S NOT DELETED / AC7777 /GET DESTINATION POINTER FOR SHUFFLE (-1 FOR AUTO-INC) TAD CHARAD DCA REG15 /START FROM CURRENT COLUMN POSITION / DCH4, TAD I REG14 /GET CHARACTER DCA I REG15 /MOVE LEFT ISZ INSSHF /INCREMENT LOOP COUNTER JMP DCH4 /LOOP THROUGH SHUFFLE / DCH8, DCA I REG15 /ERASE TWO CHARACTERS PER LOOP FOR LOW OVERHEAD DCA I REG15 ISZ INSERS /INCREMENT LOOP COUNTER JMP DCH8 /LOOP THROUGH ERASE / CDF 00 /BACK TO HOME FIELD / DCA LSTCOL /RESET AUTO-WRAP PENDING FLAG / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE ROUTINE / ------------------------ / ECH - ERASE_CHARACTER(S) / ------------------------ / ECH, TAD VT200 /ONLY ALLOWED IN LEVEL 2 SNA CLA JMP ECH8 /LEVEL 1, IGNORE REQUEST / JMS I XGETPA /GET THE PARAMETER CLA /DEFAULT TO ZERO IF NONE JMS ICDCSB /DO COMMON PROCESSING / SPA CLA /CHECK IF TOO MANY ERASURES REQUESTED JMP ECH4 /NO, GO USE THOSE REQUESTED / AC7777 /TOO MANY, ERASE TO END OF LINE TAD MRIGCO TAD CURCOL DCA INSERS / ECH4, AC7777 /POINT TO CHARACTERS TO ERASE TAD CHARAD DCA REG14 / ECH6, DCA I REG14 /ERASE A CHARACTER ISZ INSERS /INCREMENT THROUGH ERASE FIELD JMP ECH6 /LOOP TIL DONE / CDF 00 /BACK TO HOME FIELD / DCA LSTCOL /CLEAR AUTOWRAP PENDING FLAG (IN CASE) / ECH8, JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE ROUTINE / ------------------------------------------ / ICDCSB - COMMON PROCESSING FOR ICH AND DCH / ------------------------------------------ / ICDCSB, 0 /ENTRY / SPA SNA /CHECK FOR POSITIVE-DEFINITE VALUE AC0001 /IF NOT, USE A ONE / DCA TEMP /SAVE NUMBER OF CHARACTERS TO INSERT / TAD LINEFL /GET THE DATA FIELD OF THE DISPLAY DATA JMS I XCDFAC / TAD TEMP /DETERMINE NUMBER OF CHARS TO ERASE CIA /(2'S COMPLEMENT FOR LOOP COUNTER) DCA INSERS / AC7777 TAD MRIGCO /DETERMINE NUMBER OF CHARS TO SHUFFLE TAD TEMP TAD CURCOL DCA INSSHF / DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / TAD INSSHF /CHECK IF SHUFFLE REQUIRED / JMP I ICDCSB /RETURN PAGE /----------------------------------------------------- / TABINI - INITIALIZE TAB STOPS TO EVERY EIGHT COLUMNS /----------------------------------------------------- / / SET UP THE TAB STOPS TABLE (TABS IN FIELD 3) TO 0 (NO TABS) EVERYWHERE / EXCEPT EVERY EIGHTH POSITION, WHICH WILL HAVE -1 (TAB STOP). / / TABINI, 0 /ENTRY / AC7777 /POINT TO TAB STOP TABLE (-1 FOR AUT0-INC) TAD TABSP DCA REG14 / TAD M21 /GET LOOP COUNTER (DO EIGHT COLUMNS PER LOOP) DCA TEMP / (-17) * (8) = (-136) / CDF 30 /USE FIELD 3 FOR THE TABS TABLE / TABIN5, AC7777 /PUT ONE TAB EVERY EIGHTH (= -1) DCA I REG14 DCA I REG14 /AND PUT IN SEVEN NO-TABS (= 0) DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 ISZ TEMP /INCREMENT COUNTER THROUGH LOOP JMP TABIN5 / AND LOOP UNTIL DONE / AC7777 /ENSURE LAST POSITION HAS TAB STOP DCA I TABENP / CDF 00 /BACK TO FIELD 0 / DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / JMP I TABINI /RETURN / / TABSP, TABS /POINTER TO TAB STOPS TABLE IN FIELD THREE M21, -0021 / ----------------------- / TABACL - CLEAR ALL TABS / ----------------------- / / MARK THE TAB STOPS TABLE WITH NO-TABS AT EVERY POSITION EXCEPT THE END. / / TABACL, AC7777 /GET ADDRESS OF TABS TABLE (-1 FOR AUTO-INC) TAD TABSP DCA REG14 / TAD M21 /GET LOOP COUNTER DCA TEMP / / CDF 30 /USE FIELD THREE FOR TABS TABLE / TABAC5, DCA I REG14 /CLEAR EACH TAB STOP DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 DCA I REG14 ISZ TEMP /INCREMENT COUNTER JMP TABAC5 /LOOP UNTIL DONE / DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / JMP TABCL8 /GO FINISH UP / ------------------------------------------------ / HTS - SET TAB STOP AT CURRENT CURSOR POSITION / ------------------------------------------------ / / MARK THE TABS TABLE WITH A TAB STOP (-1) AT THE CURRENT COLUMN POSITION / / HTS, CLA /GET THE ADDRESS OF THE CURRENT TAB STOP TAD TABSP TAD CURCOL DCA TEMP / CDF 30 /FIELD 3 FOR TAB STOPS TABLE / TABCL8, AC7777 /MARK THE TAB STOP WITH A TAB (-1) DCA I TEMP / CDF 00 /BACK TO FIELD 0 / JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / / ------------------------------------------------ / TABCLR - CLEAR TAB STOP AT CURRENT CURSOR POSITION / ------------------------------------------------ / / MARK THE TABS TABLE WITH A NO-TAB STOP (0) AT THE CURRENT COLUMN POSITION / / TABCLR, CLA /GET THE ADDRESS OF THE CURRENT TAB STOP TAD TABSP TAD CURCOL DCA TEMP / CDF 30 /FIELD 3 FOR TAB STOPS TABLE / DCA I TEMP /MARK THE TAB STOP WITH A NO-TAB (0) / AC7777 /ENSURE THE LAST TAB STAYS THERE DCA I TABENP / CDF 00 /BACK TO FIELD 0 / JMP I DONE /RETURN / / TABENP, TABS+0204 / ------------------- / HT - HORIZONTAL TAB. / -------------------- / HT, TAD TABSPP /GET ADDRESS OF TAB STOPS TABLE TAD CURCOL /INDEX INTO IT WITH CURSOR COLUMN POSITION DCA REG14 /SAVE IN AUTO-INDEXING REGISTER / CDF 30 /USE FIELD THREE FOR TAB STOPS TABLE / HT10, TAD I REG14 /GET TAB STOP STATUS SNA CLA /CHECK FOR TAB HERE (-1 = TAB, 0 = NO TAB) JMP HT10 /IF NO TAB, LOOP TILL ONE IS FOUND / CDF 00 /BACK TO HOME FIELD / TAD TABSPP /GET DISPLACEMENT INTO TABLE CIA TAD REG14 DCA CURCOL /CURCOL = NEXT TAB STOP / JMS I XXUPCC /GO UPDATE THE CURSOR / DCA LSTCOL /CLEAR AUTOWRAP PENDING FLAG / DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / JMP I NEXT /EXIT WITHOUT TOUCHING ESCAPE PROCESSOR / / TABSPP, TABS /POINTER TO TAB STOPS TABLE XXUPCC, UPDCC / ------------------------------------------------- / CRSSAV, CRSRES - CURSOR SAVE AND RESTORE ROUTINES / ------------------------------------------------- / / MOVES ROW AND COLUMN CURSORS, CHARACTER ATTRIBUTES, AND CHARACTER SET / DESIGNATORS AND ORIGIN MODE FLAG / CRSSAV, JMS CRSSA /SAVE THE CURSORS, ETC. JMP I DONE / / CRSSA, 0 /ENTRY / TAD CRSSVP /SAVE AREA POINTER DCA REG14 TAD CRSACP /ACTIVE AREA POINTER DCA REG15 TAD SAVGM1 /SAVED MAP AREA DCA REG12 TAD MAPGM1 /ACTIVE MAP AREA DCA REG13 / JMS I XCRSSR /MOVE THE DATA / JMP I CRSSA /RETURN / / CRSRES, TAD CRSSVP /SAVE AREA POINTER DCA REG15 TAD CRSACP /ACTIVE AREA POINTER DCA REG14 TAD SAVGM1 /SAVED MAP AREA DCA REG13 TAD MAPGM1 /ACTIVE MAP AREA DCA REG12 / JMS I XCRSSR /MOVE THE DATA / JMS I XXADTB /ADJUST TOP/BOTTOM MARGINS, HANDLE CURSOR / OUT OF BOUNDS, ETC. / TAD MRIGCO /CHECK IF AT END-OF-LINE TAD CURCOL SMA CLA TAD I XXXWRP /CHECK ALSO IF AUTOWRAP ENABLED AND LSTCOL /RESET AUTOWRAP PENDING FLAG IF NECESSARY DCA LSTCOL / JMP I DONE /RETURN / / SAVGM1, GXSAVE-1 MAPGM1, GXMAP-1 XCRSSR, CRSSR CRSACP, CURROW-1 /POINTER TO ACTUAL CURSOR STORAGE CRSSVP, CRSSV-1 / TO SAVED CURSOR STORAGE XXXWRP, WRAP XXADTB, ADJTBD / ---------------------------------------------- / RATSIZ - SET UP THE CRTC RAT SCROLL BOUNDARIES / ---------------------------------------------- / / ENTRY: AC = SIZE OF ROW ADDRESS TABLE (-1) / EXIT: AC = 0000 / RATSIZ, 0 / DCA TEMP3 /SAVE THE RAT SIZE / TAD KK7 /SELECT REGISTER SEVEN LSCREG / CLA TAD TEMP3 /GET THE RAT SIZE LDCRTC / CLA CLL JMP I RATSIZ /RETURN / / KK7, 0007 PAGE / ------------------------------------------ / CRSSR - CURSOR SAVE/RESTORE COMMON ROUTINE / ------------------------------------------ / / CRSSR, 0 / TAD MM0007 /SAVE/RESTORE SEVEN DECIMAL WORDS DCA TEMP / CRSSR5, TAD I REG15 /MOVE THE BUFFER WORD-AT-A-TIME DCA I REG14 ISZ TEMP /INCREMENT LOOP COUNTER JMP CRSSR5 /LOOP UNTIL DONE / DCA CRTBSY /HOLD OFF USER OUTPUT TO FIRMWARE / TAD M0004 /GET COUNT OF MAPS TO SAVE (2'S COMP) DCA CRTMP2 / FOR LATER LOOP TAD XMAPMO /GET ADDRESS OF MAP MOVE ROUTINE DCA EOFPRO / TO EXECUTE AT NEXT EOF / JMP I CRSSR /RETURN / / MM0007, -0007 M0004, -0004 XMAPMO, MAPMOV / ---------------------------------------------------- / MAPMOV - MOVE CHARACTER MAPS FOR CURSOR SAVE/RESTORE / ---------------------------------------------------- / MAPMOV, ISZ CRTMP2 /INCREMENT MAP NUMBER JMP MAPMO2 /NOT DONE WITH MAPS, GO DO ANOTHER JMS ADJTBD /MAPS DONE, ADJUST RAT JMP I XEOF10 /ALL DONE, RETURN THROUGH EOF PROCESSOR / MAPMO2, TAD M60 /GET WORD COUNT FOR MOVE (/2 CAUSE 2 PER LOOP) DCA CRTMP1 CDF 10 /FIELD ONE FOR MAPS MAPMO5, TAD I REG13 /MOVE THE MAPS TWO WORDS AT A TIME DCA I REG12 TAD I REG13 DCA I REG12 ISZ CRTMP1 /INCREMENT THE LOOP COUNTER JMP MAPMO5 /LOOP THROUGH MAPS CDF 00 /HOME FIELD / DCA EOFOK /MARK NOT OK TO HANDLE EOF AT PANEL EXIT / JMP I XEOF20 /RETURN TO USER FOR A WHILE / / CRTMP1, 0 CRTMP2, 0 / -------------------------------------- / ADJTBD - ADJUST TOP/BOTTOM ROWS OF CRT / -------------------------------------- / / ADJUST TOP AND BOTTOM OF DISPLAY REGION BASED ON ORIGIN MODE AND MARGINS / ADJTBD, 0 /ENTRY / TAD ORIGIN /CHECK ORIGIN MODE TO SEE HOW DISPLAY SNA CLA / REGION HAS TO BE UPDATED JMP ADJTB6 /GO DO ABSOLUTE MODE STUFF / /ORIGIN MODE SET, USE SCROLLING MARGINS TAD TOP /USE TOP MARGIN AS TOP OF DISPLAY REGION DCA TOPROW TAD BOTTOM /USE BOTTOM MARGIN AS BOTTOM OF DISPLAY DCA BOTROW DCA SCRGOF /ZERO OFFSET BETWEEN DISPLAY AND SCROLL REGIONS JMP ADJTB8 /GO DETERMINE MAX ROW CURSOR VALUE / / /ORIGIN MODE RESET, USE FULL SCREEN ADJTB6, DCA TOPROW /USE TOP OF SCREEN AS TOP OF DISPLAY REGION TAD K0027 /USE BOTTOM OF SCREEN AS BOTTOM OF DISPLAY DCA BOTROW TAD TOP /REAL OFFSET BETWEEN DISPLAY AND SCROLL REGIONS DCA SCRGOF / ADJTB8, TAD TOPROW /COMPUTE MAXIMUM ROW CURSOR ALLOWED CIA TAD BOTROW DCA MODROW /MODROW = BOTROW - TOPROW / TAD TOP /COMPUTE THE SIZE OF THE SCROLLING REGION CIA TAD BOTTOM DCA SCRGSZ / JMS I XUPDAT /UPDATE CRTC'S CURSORS, NO CHANGE IN VISIBILITY / JMP I ADJTBD /RETURN / / / ---------------------------------------------------------- / ADTBHC - ADJUST TOP AND BOTTOM MARGINS AND HOME THE CURSOR / ---------------------------------------------------------- / ADTBHC, 0 / DCA CURROW /HOME CURSOR DCA CURCOL DCA LSTCOL /CLEAR AUTOWRAP PENDING FLAG / JMS ADJTBD /SET UP THE TOP AND BOTTOM MARGINS / JMP I ADTBHC /RETURN / ---------------------------------------- / SGR - SELECT GRAPHICS RENDITION FUNCTION / ---------------------------------------- / /ATTRIBUTE SET UP. BOLD, BLINK, UNDERLINE, REVERSE VIDEO / SGR, JMS I XGETPA /GET THE NEXT PARAMETER JMP SGR8 /FINISHED WITH PARAMETERS, GO CLEAN UP SNA /SKIP IF A NON ZERO PARAMETER JMP SGR7 /GO CLEAR ATTRIBUTES / MQL /SAVE THE CHARACTER ACL /GET BACK THE CHARCTER TAD M0033 /THIS IS THE MAXIMUM VALUE FOR NOW SMA SZA CLA /SKIP IF WITHIN THE RANGE OF THE ATTRIBUTE JMP SGR /GO GET THE NEXT PARAMETER ACL TAD KSGR /GET TABLE BASE ADDRESS DCA TEMP /SAVE POINTER CDF 10 /FIELD ONE FOR TABLE TAD I TEMP /GET CURRENT VALUE CDF 00 /BACK TO HOME FIELD RAR /CHECK LSB TO DETERMINE IF SET OR RESET SZL JMP SGR5 /IF SET, IMPLIES TURN OFF ATTRIBUTE / CLL RAL /NOT SET, GET BACK THE 'OR' MASK MQL /STORE THE CURRENT MASK TAD ATTRIB /GET EXISTING VALUES MQA /AND OR IN THE NEW JMP SGR7 /AND GO SAVE THEM / SGR5, CLL RAL /GET BACK THE 'AND' MASK (FOR RESET) AND ATTRIB /AND WITH THE ATTRIBUTES SGR7, DCA ATTRIB /SAVE THEM JMP SGR /GO BACK AND DO IT AGAIN / SGR8, JMS I XNOBLN /ENSURE BLINK DISABLED IF IN EXTENDED / CHARACTER ADDRESSING MODE JMP I DONE /RETURN THROUGH ESCAPE SEQUENCE PARSER / XNOBLN, NOBLNK KSGR, SGRTAB-1 M0033, -0033 / -------------------------------------------- / PRIV - PRIVATE INTERMEDIATE PARAMETER PARSER / -------------------------------------------- / / GET HERE FROM ESC # / PRIV, JMS ESCPRO /NEXT LEVEL OF PROCESSING JMS I XCHKIN /TEST FOR INTERMEDIATE VALUE SNL CLA /SKIP IF NOT ONE JMP I XPRINA TAD KLINCH JMS I XLOOKU JMP I DONE / / KLINCH, LINCHR / --------------------------------------------------------------- / STDMN - DESIGNATE DEC MULTINATIONAL SUPPLEMENTAL CHARACTER SET / --------------------------------------------------------------- / STDMN, 0 / CLA CLL TAD K0200 /POINT AT SECOND QUADRANT OF ROM JMS I XUSASC / AND BUILD THE BASIC SET / TAD PDMNTA /POINT AT TABLE OF UNDEFINED CODES DCA REG10 /SAVE FOR CHANGES TO MAP / CDF 10 /FIELD ONE FOR TABLE AND MAP / STDM2, TAD I REG10 /GET A CODE POSITION SPA /CHECK IF END OF TABLE (7777) JMP STDM8 /YES, FINISH UP / TAD INTERM /ADD BASE ADDRESS OF MAP DCA TEMP / TO CREATE ADDRESS / TAD K0177 /GET THE ERROR CHARACTER DCA I TEMP / INTO MAP REPLACING UNDEFINED CODE / JMP STDM2 /LOOP THROUGH ALL UNDEFINES / STDM8, CDF 00 /BACK TO HOME FIELD JMP I STDMN /RETURN / / PDMNTA, DMNTAB-1 /POINTER TO TABLE PAGE / ----------------------------------- / CMPLVL - SELECT COMPATIBILITY LEVEL / ----------------------------------- / / HERE FROM DOUBLE-QUOTE INTERMEDIATE: ESC [ PN " / CMPLVL, JMS ESCPRO /GET NEXT CHARACTER / JMS I XCHKIN /CHECK IF ANOTHER INTERMEDIATE SNL CLA JMP I XPRINA /IF SO, INVALIDATE SEQUENCE AND WAIT FOR FINAL / TAD KCMPCH /LOOKUP FOR FINAL CHARACTERS ALLOWED WITH THIS JMS I XLOOKU / INTERMEDIATE / JMP I DONE /NOT FOUND, CLEAR THE ESCAPE SEQUENCE / / KCMPCH, CMPCHR /FINAL CHARACTER TABLE FOR DOUBLE-QUOTE INTERM.