home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / XEROX / XE2-WS4.LBR / XE2-WS4.ZZ0 / XE2-WS4.Z80
Text File  |  2000-06-30  |  23KB  |  949 lines

  1. ;    XEROX 820-II SPECIFIC PATCHES FOR WS4
  2.  
  3.     ASEG
  4.     .Z80
  5.  
  6.     ORG    029BH
  7.  
  8. STRING    EQU    0283H
  9.  
  10. FALSE    EQU    0
  11. TRUE    EQU    NOT FALSE
  12.  
  13. REVERSE    EQU    TRUE
  14.  
  15.     IF    REVERSE
  16. BRIGHT    EQU    ')'
  17. DIM    EQU    '('
  18. MODE    EQU    '7'
  19.     ELSE
  20. BRIGHT    EQU    '('
  21. DIM    EQU    ')'
  22. MODE    EQU    '8'
  23.     ENDIF
  24.  
  25. BS    EQU    8
  26. LF    EQU    0AH
  27. CR    EQU    0DH
  28. ESC    EQU    1BH
  29. DEL    EQU    7FH
  30.  
  31. CTRL@    EQU    0
  32. CTRLA    EQU    1
  33. CTRLB    EQU    2
  34. CTRLC    EQU    3
  35. CTRLD    EQU    4
  36. CTRLE    EQU    5
  37. CTRLF    EQU    6
  38. CTRLG    EQU    7
  39. CTRLH    EQU    8
  40. CTRLI    EQU    9
  41. CTRLJ    EQU    0AH
  42. CTRLK    EQU    0BH
  43. CTRLL    EQU    0CH
  44. CTRLM    EQU    0DH
  45. CTRLN    EQU    0EH
  46. CTRLO    EQU    0FH
  47. CTRLP    EQU    10H
  48. CTRLQ    EQU    11H
  49. CTRLR    EQU    12H
  50. CTRLS    EQU    13H
  51. CTRLT    EQU    14H
  52. CTRLU    EQU    15H
  53. CTRLV    EQU    16H
  54. CTRLW    EQU    17H
  55. CTRLX    EQU    18H
  56. CTRLY    EQU    19H
  57. CTRLZ    EQU    1AH
  58. ;CTRL[    EQU    1BH
  59. ;CTRL\    EQU    1CH    ;(CTRL,) FOR XEROX 820 KEYBOARD
  60. ;CTRL]    EQU    1DH
  61. ;CTRL^    EQU    1EH    ;(HELP) FOR XEROX 820 KEYBOARD
  62. CTRL_    EQU    1FH    ;(^-) FOR XEROX 820 KEYBOARD
  63.  
  64. ;The function key table allows you to program any function keys that
  65. ;your terminal supports into one or more other keystrokes.  Note that
  66. ;on many terminals, the function keys generate a sequence of characters
  67. ;where the first character is a control code.  Since WordStar probably
  68. ;uses this same code for one its commands, a timer is used to determine
  69. ;when the "burst" of characters from the function key is done.
  70. ;This works because the terminal will usually send the function
  71. ;key characters at close to full baud rate.  At 9600 baud, each character
  72. ;takes 1/960 of a second to send, or close to one millisecond.  That
  73. ;means that three characters would take approximately three milliseconds.
  74. ;There is no way that even the fastest human typist could type that
  75. ;fast!  Therefore, this method will usually work.
  76. ;
  77. ;Each function key in the table below is represented by two strings.
  78. ;The first describes the "burst" from the key.  The second is what it
  79. ;should be translated into.  You may not use string indirections in
  80. ;this table (size of -1 followed by address).
  81. ;
  82. ;The end of the function key table is indicated when the size of the
  83. ;function key string is zero.  If you have more function keys than will
  84. ;fit, you can put a continuation address after the zero to point to more
  85. ;table.  The table at that address must be the same format as this
  86. ;one.  No continuation is indicated by an address of zero.
  87. ;
  88. ;One character "bursts" will not work here.  If you need to translate
  89. ;a single character into something else, use the user console input
  90. ;routine UCONI.
  91. ;
  92. ;Warning!  Terminals or computers that have their own type-ahead
  93. ;buffering may cause problems with this approach since it will be more
  94. ;likely that characters other than just function keys will be "burst"
  95. ;into WordStar by it.
  96. ;
  97.  
  98. FUNDLY::
  99.     DB    1        ;Milliseconds of delay between characters
  100.                 ;of function key burst (if zero, no
  101.                 ;function keys are implemented).  See
  102.                 ;section on delays below before adjusting
  103.                 ;FUNDLY for your system.
  104.  
  105.     DB    1CH        ;Character that starts each burst
  106.                 ;(set to 0FFh to disable)
  107.  
  108. ;    XEROX 820-II FUNCTION KEY TABLE
  109.  
  110. FUNTBL:
  111.  
  112. ;    KEYPAD FUNCTION DEFINITIONS
  113.  
  114.     DB    2
  115.     DB    1CH,'1'
  116.     DB    2
  117.     DB    CTRLK,'1'
  118.  
  119.     DB    2
  120.     DB    1CH,'2'
  121.     DB    2
  122.     DB    CTRLK,'2'
  123.  
  124.     DB    2
  125.     DB    1CH,'3'
  126.     DB    2
  127.     DB    CTRLK,'3'
  128.  
  129.     DB    2
  130.     DB    1CH,'4'
  131.     DB    2
  132.     DB    CTRLK,'4'
  133.  
  134.     DB    2
  135.     DB    1CH,'5'
  136.     DB    2
  137.     DB    CTRLK,'5'
  138.  
  139.     DB    2
  140.     DB    1CH,'6'
  141.     DB    2
  142.     DB    CTRLK,'6'
  143.  
  144.     DB    2
  145.     DB    1CH,'7'
  146.     DB    2
  147.     DB    CTRLK,'7'
  148.  
  149.     DB    2
  150.     DB    1CH,'8'
  151.     DB    2
  152.     DB    CTRLK,'8'
  153.  
  154.     DB    2
  155.     DB    1CH,'9'
  156.     DB    2
  157.     DB    CTRLK,'9'
  158.  
  159.     DB    2
  160.     DB    1CH,'0'
  161.     DB    2
  162.     DB    CTRLK,'0'
  163.  
  164.     DB    2
  165.     DB    1CH,'.'
  166.     DB    2
  167.     DB    CTRLK,CTRLH
  168.  
  169.     DB    2
  170.     DB    1CH,01H        ;UP ARROW
  171.     DB    1
  172.     DB    CTRLE
  173.  
  174.     DB    2
  175.     DB    1CH,02H        ;DOWN ARROW
  176.     DB    1
  177.     DB    CTRLX
  178.  
  179.     DB    2
  180.     DB    1CH,03H        ;RIGHT ARROW
  181.     DB    1
  182.     DB    CTRLD
  183.  
  184.     DB    2
  185.     DB    1CH,04H        ;LEFT ARROW
  186.     DB    1
  187.     DB    CTRLS
  188.  
  189.     DB    2
  190.     DB    1CH,'-'
  191.     DB    3
  192.     DB    CTRLQ,CTRLQ,CTRLR
  193.  
  194.     DB    2
  195.     DB    1CH,'+'
  196.     DB    3
  197.     DB    CTRLQ,CTRLQ,CTRLC
  198.  
  199.     DB    0        ;END OF TABLE
  200.     DW    FNTBL2        ;EXTENSION ADDRESS FOR TABLE
  201.  
  202.     IF    $ GT FUNTBL+128
  203. ******* FUNTBL IS TOOOOOO LARGE
  204.     ENDIF
  205.  
  206.     IF    $ LT FUNTBL+128
  207.  
  208.     REPT    128-($-FUNTBL)    ;FILL REMAINDER OF 128 BYTES
  209.     DB    0
  210.     ENDM
  211.  
  212.     ENDIF
  213.  
  214.     DB    0,0        ;Reserved
  215.  
  216. ;
  217. ;        TERMINAL PATCH AREA
  218. ;
  219. ;This section contains the user-modifiable constants and
  220. ;    routines for hardware-dependent terminal functions
  221. ;    and characteristics required by the editor.
  222. ;
  223. ;There are three types of patches in this area.  One can
  224. ;    patch data values (HITE, WID) which describe the
  225. ;    terminal, strings (CLEAD1, ERAEOL) which define
  226. ;    control sequences, or actual microprocessor
  227. ;    instructions.
  228. ;
  229. ;For the string sequences, the first byte of the patch
  230. ;    indicates the number of bytes in the string,
  231. ;    followed by that many string bytes.  If there is
  232. ;    insufficient room for the whole string, the format
  233. ;    can be modified by putting a -1 (0FFH) where the
  234. ;    number of bytes would go, and then putting the
  235. ;    address in the following two bytes (low order byte
  236. ;    first) of the address where the longer patch
  237. ;    resides.  The longer patch must then be of the
  238. ;    normal format which is the number of bytes followed
  239. ;    by the string.
  240. ;
  241. ;This area is normally patched for your specific terminal
  242. ;    by the interactive INSTALL program.  Additional
  243. ;    patching to this area is needed only for unusual
  244. ;    terminals or video boards, or to meet special
  245. ;    requirements, or to enhance or personalize your
  246. ;    copy of WordStar.  The default user area is
  247. ;    set up for this example installation.
  248. ;
  249.  
  250. ;
  251. ;Video screen height, width, and wrap-around parameters are required.
  252. ;
  253. HITE::
  254.     DB    24        ;Must be exact screen height in lines.
  255. WID::
  256.     DB    80        ;Must be <= exact screen width in columns.
  257. WRAP::
  258.     DB    TRUE        ;Indicates if terminal wraps around to next
  259.                 ;line if a character is displayed in WIDth
  260.                 ;column of screen (set FALSE if it doesn't)
  261.  
  262. XONOFF::
  263.     DB    FALSE        ;TRUE if XON/XOFF protocol to be used for
  264.                 ;the CRT terminal
  265.  
  266. SCROLL::
  267.     DB    20        ;Number of columns that are horizontally
  268.                 ;scrolled when cursor moves beyond right
  269.                 ;or left side of screen.
  270.  
  271. DIRSIZ::
  272.     DB    5        ;Number of lines available for directory
  273.                 ;at bottom of screen.  If zero, no directory.
  274.  
  275.     DB    11        ;Larger directory for document selection
  276.  
  277. ;
  278. ;Delete Display String
  279. ;
  280. ;The following string indicates to WordStar how to display a delete
  281. ;character (hex 7F) on the screen while editing.  On terminals that
  282. ;interpret the delete character code into a displayable character, it
  283. ;is recommended that DELSTR be translated into the delete code itself
  284. ;(length of 1, then 7FH).  All characters in the string must display.
  285. ;
  286. DELSTR::
  287.     DB    3        ;Number of chars in string
  288.     DB    'DEL'        ;What is displayed
  289.     DB    0,0        ;Spare bytes
  290.  
  291. ;
  292. ;Soft and End of Line Hyphen Display String
  293. ;
  294. ;In order to distinguish soft hyphens from normal hyphens in the text,
  295. ;WordStar will substitute the following string when one is encountered.
  296. ;
  297.  
  298. SHYSTR::
  299.     DB    1        ;Number of chars in string
  300.     DB    '='        ;What is displayed
  301.     DB    0,0,0,0        ;Spare bytes
  302. ;
  303. ;Block Marker Strings
  304. ;
  305. ;Block marker strings are displayed on the screen to show the start and
  306. ;end of a block of text.  The strings are in the typical format of the
  307. ;length followed by as many characters.  Control characters should not
  308. ;be included within these strings because they would not be sent
  309. ;directly to the screen.
  310. ;
  311.  
  312. BBLOCK::
  313.     DB    3        ;Three chars
  314.     DB    '<B>'        ;Begin block
  315.     DB    0        ;1 spare
  316. ;
  317. KBLOCK::
  318.     DB    3        ;Three chars
  319.     DB    '<K>'        ;End block
  320.     DB    0        ;1 spare
  321.  
  322. ;
  323. ;Special character used when displaying soft spaces with ^OB.
  324. ;
  325. SOFTSP::
  326.     DB    '+'        ;Soft spaces show up as plus signs
  327.  
  328.     DB    0,0,0,0,0    ;Reserved
  329.  
  330.  
  331. ;
  332. ;The following string is used at sign-on to describe the type
  333. ;of terminal being used by WordStar.  Up to 40 bytes are available
  334. ;for the string, including its null terminator.
  335. ;
  336. CRTID::
  337.     DB    'Xerox 820-II        ',CR,LF,0    ;Terminal name
  338.  
  339.     DB    '                 '        ;Extra room
  340.  
  341. ;
  342. ;Cursor positioning control sequences are required.
  343. ;
  344. ;Cursor positioning for most terminals is accomplished
  345. ;    by sending:
  346. ;
  347. ;    1. A 'lead-in' string of one or more terminal
  348. ;        specific characters.
  349. ;    2. The line number, with an offset (often 20H) added.
  350. ;        For some terminals, the column number is
  351. ;        sent first.
  352. ;    3. For some terminals, another 'lead-in' string.
  353. ;    4. The column (or line) number, with an offset.
  354. ;    5. For some terminals, a terminating string.
  355. ;
  356. ;For most terminals, the line and column number are sent
  357. ;    as one-byte binary numbers.  Some terminals require
  358. ;    that a two- or three-digit ASCII number is sent.
  359. ;
  360. ;For terminals that do not fit the above patterns, you
  361. ;    must code your own subroutine.
  362. ;
  363. ;For example, the cursor is positioned on this sample
  364. ;    installation by sending:
  365. ;
  366. ;    ESCAPE, '=',
  367. ;    line number plus 20H,
  368. ;    column number plus 20H.
  369. ;
  370. CLEAD1::            ;Initial lead-in string
  371.     DB    2        ;Number of characters
  372.     DB    ESC        ;First character
  373.     DB    '='        ;Second character
  374.     DB    0,0        ;Space for two more characters
  375.  
  376. CLEAD2::            ;Sent between line and column
  377.     DB    0        ;Number of characters, none in our
  378.     DB    0        ;example.  First character
  379.     DB    0,0,0        ;Space for three more characters
  380.  
  381. CTRAIL::            ;Terminating string
  382.     DB    0        ;Number of characters
  383.     DB    0,0,0,0        ;Space for four characters
  384.  
  385. CB4LFG::            ;Send column before line?
  386.     DB    0        ;Set non-zero to send column first
  387.  
  388. CUROFF::            ;Cursor offsets
  389.  
  390.                 ;Offset to add to line
  391.     DB    20H        ;Add 20H to line number (0 is top
  392.                 ;line of screen before offset)
  393.  
  394.                 ;Offset to add to column
  395.     DB    20H        ;Add 20H to column number (0 is
  396.                 ;left-most column of screen
  397.                 ;before offset)
  398.  
  399. ASCUR::                ;Binary/ASCII digit flag
  400.     DB    0        ;0 to send binary line and column
  401.                 ;2 to send 2-digit ASCII numbers
  402.                 ;3 to send 3-digit ASCII numbers
  403.  
  404. ;
  405. ;Provision for positioning cursor by user-coded
  406. ;    subroutine, instead of under control of above
  407. ;    items.  For use in exceptional cases only.
  408. ;
  409. ;Insert a JMP instruction to your subroutine in the
  410. ;    following three bytes.  Whenever the first byte
  411. ;    is non-NOP, this location will be called to
  412. ;    position the cursor, and the above cursor patch
  413. ;    items will be ignored.
  414. ;
  415. ;Your subroutine will receive the line number in the L
  416. ;    register (0 = top line), the column number in
  417. ;    the H register (0 = left-most column), and the
  418. ;    video attributes at the next typing position in 
  419. ;    the A register.  Attributes are represented as 
  420. ;    described for the VIDATT routine, except that the 
  421. ;    warning/error bit indicates double-strike.
  422. ;
  423. ;Your subroutine may alter all registers.
  424. ;
  425. UCRPOS::
  426.     NOP            ;Normally NOP, or JMP to your cursor
  427.     NOP            ;positioning routine.
  428.     RET
  429.  
  430. ;
  431. ;Displaying characters on some screens can be significantly faster if the
  432. ;cursor can be turned off.
  433. ;
  434. ONCUR::                ;Turn cursor on by changing to jump
  435.     NOP            ;to custom subroutine.
  436.     NOP            ; L = current cursor line
  437.     RET            ; H = cursor column
  438.  
  439. OFFCUR::            ;Turn cursor off by changing to jump
  440.     NOP            ;to custom subroutine.
  441.     NOP            ; L = current cursor line
  442.     RET            ; H = cursor column
  443.  
  444. ;
  445. ;Everything in the rest of this section is optional.
  446. ;    The items relate either to enhanced performance,
  447. ;    or for accomodating unusual terminals.
  448. ;
  449.  
  450. ;
  451. ;Erase screen.  If this function is not available, leave
  452. ;    the first byte zero, and the WordStar will either send
  453. ;    line feeds, or update a screen of text using ERAEOL
  454. ;    below.
  455. ;
  456. ;After the screen is erased, WordStar assumes that the video
  457. ;    attributes are set to normal (dim for the example 
  458. ;    terminal), and that the cursor is at the home position
  459. ;    (upper left hand corner).
  460. ;
  461. ERASCR::
  462.     DB    3        ;Number of characters
  463.     DB    CTRLZ        ;First character  (clear screen)
  464.     DB    ESC,DIM        ;Room for 17 characters total
  465. INISCR:
  466.     DB    9
  467.     DB    CTRLZ        ;First character  (clear screen)
  468.     DB    ESC,MODE
  469.     DB    ESC,DIM
  470.     DB    ESC,'1'
  471.     DB    ESC,'<'        ;USED BY MY CUSTOM ROM..WON'T HURT YOU
  472.     DB    0,0,0
  473.  
  474.  
  475. ;
  476. ;Backspace one character string.  If this function is not
  477. ;    available, leave the first byte zero, and WordStar
  478. ;    will use cursor addressing to backspace.
  479. ;
  480. BAKSPC::
  481.     DB    1        ;Number of characters
  482.     DB    BS        ;First character
  483.     DB    0,0,0        ;Additional characters
  484.  
  485. ;
  486. ;Erase to end of line string. If this function is not
  487. ;    available, leave the first byte zero, and WordStar
  488. ;    will perform the function more slowly via software.
  489. ;
  490. ERAEOL::
  491.     DB    2        ;Number of characters
  492.     DB    ESC        ;First character
  493.     DB    'T',0,0        ;Additional characters
  494.  
  495. ;
  496. ;Erase to end of screen string.  If this function is not
  497. ;    available, leave the first byte zero, and WordStar
  498. ;    will perform the function more slowly via software.
  499. ;
  500. ERAEOS::
  501.     DB    2        ;Number of characters
  502.     DB    ESC        ;First character
  503.     DB    'Y',0,0        ;Additional characters
  504.  
  505. ;
  506. ;Delete screen line containing the cursor, and move lower
  507. ;    lines on the screen up one line.  If this function
  508. ;    is not available, leave the first byte zero, and
  509. ;    WordStar will perform the function more slowly
  510. ;    via software.
  511. ;
  512. LINDEL::
  513.     DB    2        ;Number of characters
  514.     DB    ESC        ;First character
  515.     DB    'R',0,0        ;Additional characters
  516.  
  517. ;
  518. ;Insert a blank line on the screen, moving the line
  519. ;    containing the cursor, and the lines below it down
  520. ;    one line.  If this function is not available, leave
  521. ;    the first byte zero, and WordStar will perform
  522. ;    the function more slowly via software.
  523. ;
  524. LININS::
  525.     DB    2        ;Number of characters
  526.     DB    ESC        ;First character
  527.     DB    'E',0,0        ;Additional characters
  528.  
  529. ;
  530. ;WordStar will use LINDEL and LININS to delete or insert a group
  531. ;    of lines rather than just displaying a whole new screenful
  532. ;    of characters.  LINMAX below indicates the maximum number
  533. ;    of lines that this would generally be faster than the
  534. ;    re-display.  Set to zero if don't care.
  535. ;
  536. LINMAX::
  537.     DB    0
  538.  
  539. ;
  540. ;Terminal initialization string.  A string of bytes which
  541. ;    will be sent to the terminal at the beginning of a
  542. ;    session.  See also INISUB.
  543. ;
  544. TRMINI::
  545.     DB    -1        ;Number of bytes
  546.     DW    INISCR        ;Use extension mechanism (-1 as byte
  547.     DB    0,0        ;count) to erase screen as initialization.
  548.  
  549. ;
  550. ;Terminal un-initialization string.  A string of bytes
  551. ;    which will be sent to the terminal at the end of a
  552. ;    session.  See also UNISUB.
  553. ;
  554. TRMUNI::
  555.     IF    REVERSE
  556.     DB    4        ;Number of bytes
  557.     DB    ESC,DIM
  558.     DB    1AH,6
  559.  
  560.     ELSE
  561.  
  562.     DB    4        ;Number of bytes
  563.     DB    ESC,BRIGHT
  564.     DB    1AH,6
  565.  
  566.     ENDIF
  567. ;
  568. ;User-patchable initialization subroutine.  Called before
  569. ;    the TRMINI string is sent.  This subroutine may be
  570. ;    used for special console initialization or other
  571. ;    purposes.  See UCRPOS comments.
  572. ;
  573. INISUB::
  574.     NOP            ;Normally NOP, or JMP to
  575.     NOP            ;your subroutine
  576.     RET
  577.  
  578. ;
  579. ;User patchable un-initialization subroutine.  Called
  580. ;    before the TRMUNI string is sent.  This subroutine
  581. ;    may be used to 'undo' any special terminal status
  582. ;    used for the WordStar. See UCRPOS comments.
  583. ;
  584. UNISUB::
  585.     NOP            ;Normally NOP, or JMP to
  586.     NOP            ;your subroutine
  587.     RET
  588.  
  589. ;
  590. ;Video attributes are used in various places on the WordStar display.
  591. ;The following table describes what each bit of an attribute byte
  592. ;means when used within WordStar.  Note that when no bit is set, that
  593. ;is the normal condition.
  594. ;
  595. ;    Bit    WordStar Usage
  596. ;
  597. ;    none    Normal text
  598. ;     0    Strike-out text
  599. ;     1    Warning & error messages
  600. ;     2    Marked block of text
  601. ;     3    Underlined text
  602. ;     4    Subscripted text
  603. ;     5    Superscripted text
  604. ;     6    Bold text
  605. ;     7    Italic (or ribbon color)
  606. ;
  607. ;For this sample installation, the following translation of attribute
  608. ;bits into video conditions could be used.
  609. ;
  610. ;    WordStar    Example
  611. ;
  612. ;    Normal        Dim
  613. ;    Warning        Bright
  614. ;    Marked        Bright
  615. ;    Underlined    Bright
  616. ;    Subscripted    Bright
  617. ;    Superscripted    Bright
  618. ;    Highlighted    Bright
  619. ;    Italic        Bright
  620. ;
  621. ;Because each terminal uses such diverse strings to change video
  622. ;attributes, you must provide a custom subroutine at VIDATT to
  623. ;build the proper one for yours.  You may be able to take advantage
  624. ;of the fact that many terminals use a binary method to encode the
  625. ;attributes.  If you do not wish to use any video attributes, put
  626. ;the customary two NOP's followed by a RET at VIDATT to disable it.
  627. ;
  628. ;The VIDATT subroutine is used to change video attributes on the screen.
  629. ;On entry, WordStar will supply the attributes that are on in the C
  630. ;register.  You must translate them into whatever your particular terminal
  631. ;requires.  The following implementation is a sample installation.
  632. ;This subroutine is called only when a video attribute changes.
  633. ;
  634.  
  635.  
  636. ;    XEROX 820-II VIDEO ATTRIBUTE PATCH FOR WS4
  637.  
  638. VIDATT::
  639.     LD    HL,HILITE
  640.     LD    A,C
  641.     AND    11111110B
  642.     JR    Z,BOLDTEST
  643.     LD    A,(BRITE)
  644.     OR    A
  645.     JP    Z,STRING
  646.     JR    NORMVID
  647.  
  648. BOLDTEST:
  649.     LD    A,C
  650.     AND    00000001B
  651.     JP    NZ,STRING
  652. NORMVID:
  653.     LD    HL,LOWLIT
  654.     JP    STRING
  655.  
  656. HILITE:
  657.     DB    2,1BH
  658.     DB    BRIGHT
  659. LOWLIT:
  660.     DB    2,1BH
  661.     DB    DIM
  662.  
  663. ;    PATCH TO CONVERT XEROX HI-PROFILE FUNCTION KEYS 
  664. ;    WITH BIT 7 HIGH INTO TWO BYTE STRINGS PREFIXED
  665. ;    WITH 1CH. ALSO CONVERTS HELP KEY (1EH) TO 0AH
  666. ;    (CTRL J) &(CTRL -) TO  A PSEUDO FUNCTION KEY.
  667.  
  668. XECONST:
  669.     LD    A,(FUNFLG)    ;IS A FUNCTION KEY READY ?
  670.     OR    A
  671.     JR    Z,KDLY1        ;IF NO FUNCTION KEY
  672.  
  673.     OR    0FFH
  674.     RET
  675.  
  676. KDLY1:
  677.     LD    A,0        ;INSURE THAT THE INTERUPT DRIVEN
  678. KEYDLY    EQU    $-1        ;820-II BIOS ISN'T FASTER THAN
  679.     AND    7        ;THE FUNCTION KEY ROUTINE
  680.     DEC    A
  681.     LD    (KEYDLY),A
  682.     JR    Z,BCONST
  683.     XOR    A
  684.     RET
  685. BCONST:
  686.     LD    HL,(1)        ;GET WBOOT VECTOR
  687.     INC    HL        ;POINT TO CONSTS
  688.     INC    HL
  689.     INC    HL
  690.     JP    (HL)        ;GET BIOS KB STATUS
  691.  
  692. XECONIN:
  693.     LD    A,0        ;GET FUNCTION FLAG
  694. FUNFLG    EQU    $-1
  695.     INC    A        ;FUNCTION ACTIVE ?
  696.     JR    NZ,BCONIN    ;IF NOT,GET KB CHAR
  697.     LD    (FUNFLG),A    ;CLEAR FUNCTION FLAG
  698.  
  699.     LD    A,0        ;ELSE, SEND CHAR #2 OF FUNC KEY
  700. CHAR2    EQU    $-1
  701.     RET
  702.  
  703.     ;GET KB CHAR WITH BIOS CALL
  704. BCONIN:    
  705.     XOR    A        ;CLEAR FUNCTION FLAG
  706.     LD    (FUNFLG),A
  707.  
  708.     LD    HL,(1)        ;GET BIOS WBOOT ADDR
  709.     LD    DE,6        ;BIOS CONIN OFFSET
  710.     ADD    HL,DE
  711.     LD    DE,CONRET    ;RETURN ADDRESS
  712.     PUSH    DE
  713.     JP    (HL)        ;GET CHAR
  714.  
  715. CONRET:
  716.     CP    1EH        ;HELP KEY ?
  717.     JR    NZ,NXTTST
  718.     LD    A,0AH        ;CONVERT TO WS HELP KEY
  719.     RET
  720. NXTTST:
  721.     CP    1FH        ;CTRL_ ?
  722.     JR    Z,SETFUNC    ;MAKE CTRL_ INTO A FUNC KEY
  723.  
  724.     ;NO OTHER KEYS ARE CONVERTED, BUT IF THEY
  725.     ;WERE, YOU COULD DO IT HERE
  726.  
  727. FUNCTST:
  728.     BIT    7,A        ;FUNCTION KEY ?
  729.     RET    Z        ;IF NOT, WE'RE DONE
  730.  
  731. SETFUNC:
  732.     RES    7,A        ;RESET BIT 7
  733.     LD    (CHAR2),A    ;SAVE THE BASIC CHAR
  734.     LD    A,0FFH
  735.     LD    (FUNFLG),A    ;SET PASS2 FLAG
  736.     LD    A,1CH        ;FUNCTION KEY LEAD-IN
  737.     RET
  738.  
  739.     IF    $ GT VIDATT+128
  740. ******* VIDATT IS TOOOOOO LARGE
  741.     ENDIF
  742.  
  743.     IF    $ LT VIDATT+128
  744.  
  745.     REPT    128-($-VIDATT)    ;FILL REMAINDER OF 128 BYTES
  746.     DB    0
  747.     ENDM
  748.  
  749.     ENDIF
  750.  
  751. ;
  752. ;Normally the status line, text and directories are displayed in 
  753. ;dim intensity so that bold and doublestruck text can be shown in 
  754. ;high intensity.  Setting BRITE to 0FFH reverses the usage of 
  755. ;bright and dim for the status line, text and directories ;zero
  756. ;normally.
  757. ;
  758. BRITE::    DB    0        ;Don't reverse
  759.                 ;0FFH = normal text bright
  760.  
  761. ;
  762. ;Delays are executed after various terminal functions, before
  763. ;    the next character is sent to the terminal, to
  764. ;    allow response time required by certain terminals
  765. ;    when operating at a high baud rate.  Set to a
  766. ;    larger value if you suffer a loss of characters
  767. ;    after a terminal function.
  768. ;
  769. ;Note that an additional delay FUNDLY is located near the
  770. ;    function key table FUNTBL above.
  771. ;
  772. ;Each delay is approximately the number of milliseconds
  773. ;    on a 4 MHz Z80 processor, about twice as long on
  774. ;    a 2 MHz 8080 (in other words, divide delay values
  775. ;    in half for a 2 MHz processor to achieve the same
  776. ;    results).
  777. ;
  778. DELCUS::
  779.     DB    0        ;No delay after cursor positioning
  780.                 ;(if your terminal works better with
  781.                 ;5 milliseconds of delay, you would
  782.                 ;put a "5" here instead)
  783.  
  784. DELMIS::            ;Miscellaneous screen delays
  785.     DB    0        ;No delay
  786.  
  787. DXOFF::                ;If XON/XOFF used for terminal, sometimes
  788.     DW    2000        ;a legitimate ^S will be interpreted as an
  789.                 ;XOFF character.  DXOFF is used to time out
  790.                 ;so that the terminal will continue.
  791.  
  792. DLONG::                ;Long delays (like at sign-on)
  793.     DW    2000        ;2 seconds = 2,000 milliseconds
  794.                 ;(1000 if 8080)
  795.  
  796. DMED::                ;Medium delays (like at P, O, or K menus)
  797.     DW    1000        ;1 second = 1,000 milliseconds
  798.                 ;(500 if 8080)
  799.  
  800. DSHORT::            ;Short delays (like before help menus)
  801.     DW    200        ;200 milliseconds (100 if 8080)
  802.  
  803. UPDLY::                ;Position update delay
  804.     DW    200        ;200 milliseconds (100 if 8080)
  805.  
  806. ;----------------------------------------------------------------------
  807. ;NOTE....This function combined with AHEAD can cause SERIOUS problems
  808. ;     for even moderately fast touch typists if left in the default
  809. ;     values supplied by Micropro.        RWS
  810.  
  811.  
  812. DDISK::                ;Disk access delay.  If character typed
  813.     DW    0        ;during disk access, wait this duration for
  814.                 ;more characters. (500 milliseconds default)
  815. ;-----------------------------------------------------------------------
  816.  
  817. DFAST::                ;Delay when typing fast.  Holds off displaying
  818.     DW    50        ;the rest of the line briefly
  819.  
  820. ;
  821. ;Optional user-supplied console I/O subroutines.  You may
  822. ;    patch JMP's here to your own console input, console
  823. ;    output, and console status subroutines, in which
  824. ;    case these routines, instead of the operating
  825. ;    system BIOS entry points, will be used for all
  826. ;    console I/O.  These subroutines may alter all registers.
  827.  
  828.  
  829. UCNSTA::
  830.     JP    XECONST
  831. UCONI::
  832.     JP    XECONIN
  833.  
  834. UCONO::
  835.     NOP
  836.     NOP
  837.     RET
  838.  
  839. MORPAT::
  840.     DS    128
  841.  
  842. CRTPAT::
  843. ;    EXTENSION OF FUNCTION TABLE
  844.  
  845. FNTBL2:
  846.  
  847. ;    UPPER ROW OF MAIN KEYBOARD + TAB KEY
  848.  
  849.     DB    2
  850.     DB    1CH,CTRLQ        ;CTRL 1 (!)
  851.     DB    2
  852.     DB    CTRLQ,CTRLR        ;TOP OF FILE
  853.  
  854.     DB    2
  855.     DB    1CH,CTRLR        ;CTRL 2 (@)
  856.     DB    2
  857.     DB    CTRLQ,CTRLE        ;TOP OF SCREEN
  858.  
  859.     DB    2
  860.     DB    1CH,CTRLS        ;CTRL 3 (#)
  861.     DB    2
  862.     DB    CTRLQ,CTRLI        ;GOTO PAGE/LINE
  863.  
  864.     DB    2
  865.     DB    1CH,CTRLT        ;CTRL 4 ($)
  866.     DB    2
  867.     DB    CTRLK,CTRLD        ;SAVE,GO TO MENU
  868.  
  869.     DB    2
  870.     DB    1CH,CTRLU        ;CTRL 5 (%)
  871.     DB    2
  872.     DB    CTRLK,CTRLQ        ;QUIT,GO TO MENU
  873.  
  874.     DB    2
  875.     DB    1CH,CTRLV        ;CTRL 6 (^)
  876.     DB    1
  877.     DB    1EH            ;HARD>SOFT OR AUTO INDENT
  878.  
  879.     DB    2
  880.     DB    1CH,CTRLW        ;CTRL 7 (&)
  881.     DB    2
  882.     DB    CTRLQ,CTRLA        ;FIND & REPLACE
  883.  
  884.     DB    2
  885.     DB    1CH,CTRLX        ;CTRL 8 (*)
  886.     DB    2
  887.     DB    CTRLQ,CTRLF        ;FIND
  888.  
  889.     DB    2
  890.     DB    1CH,CTRLY        ;CTRL 9 '('
  891.     DB    2
  892.     DB    CTRLQ,CTRLS        ;BEGINNING OF LINE
  893.  
  894.     DB    2
  895.     DB    1CH,CTRLP        ;CTRL 0 ')'
  896.     DB    2
  897.     DB    CTRLQ,CTRLD        ;END OF LINE
  898.  
  899.     DB    2
  900.     DB    1CH,CTRL_        ;CTRL _/-
  901.     DB    2
  902.     DB    CTRLQ,DEL        ;DEL LINE TO LEFT
  903.  
  904.     DB    2
  905.     DB    1CH,CTRLZ        ;CTRL +/=
  906.     DB    2
  907.     DB    CTRLQ,CTRLY        ;DEL LINE TO RIGHT
  908.  
  909.     DB    2
  910.     DB    1CH,CTRLI        ;CTRL TAB
  911.     DB    2
  912.     DB    CTRLP,CTRLI        ;INSERT ASCII TAB CHAR
  913.  
  914.     DB    0        ;END OF TABLE
  915.     DW    0        ;EXPANSION ADDRESS
  916.  
  917.     IF    $ GT CRTPAT+128
  918. ******* FNTBL2 IS TOOOOOO LARGE
  919.     ENDIF
  920.  
  921.     IF    $ LT CRTPAT+128
  922.  
  923.     REPT    128-($-CRTPAT)    ;FILL REMAINDER OF 128 BYTES
  924.     DB    0
  925.     ENDM
  926.  
  927.  
  928.     ORG    086DH
  929.  
  930. ;
  931. ;AHEAD indicates whether type ahead is allowed for ^E, ^X, ^W, ^Z,
  932. ;^G, DEL, ^T, ^Y, ^QY, and ^QDEL.  If AHEAD is 0, WordStar's type
  933. ;ahead buffer will be flushed whenever one of the functions is
  934. ;encountered.  If it is non-zero, no flushing will occur.  This
  935. ;flag should be used primarily for external keyboard enhancers where
  936. ;the functions shown above are to be used.  WordStar's function key
  937. ;and shorthand processing automatically compensate.
  938. ;
  939.  
  940. ;NOTE....This function combined with DDISK can cause SERIOUS problems
  941. ;     for even moderately fast touch typists if left in the default
  942. ;     values supplied by Micropro.        RWS
  943.  
  944. AHEAD::
  945.     DB    TRUE        ;DON'T Flush
  946.  
  947.  
  948.     END
  949.