WS3330.DOC--User Patch Points for WordStar 3.3 and 3.0 This file lists the user patch points for both WordStar 3.3 and WordStar 3.0, including the mnemonic label, the hexadecimal address, and a brief description. The far righthand column lists the bytes (in hex) that will be found at each location in the Kaypro-installed version of WordStar 3.3 delivered with the Kaypro 2, 2X, 4, and 10. Users of Kaypro WordStar 3.3 can use these bytes for reference; all others should just ignore the actual values given. The patch points are listed in the order in which they are found in WordStar 3.3. As a result, WordStar 3.0 users will find that a few of their patch points are not listed strictly in order, as MicroPro moved some things around when they changed versions. Sorry, but there was no way to avoid it. To make this list, I've combined those from WS33.DOC and WS30.DOC, which were originally compiled by Milton Hicks and updated by Guy Gamble. (I owe them, and the anonymous contributors who preceded them, many thanks.) I've also added some new information and made a number of corrections. Ted Silveira Santa Cruz, CA 06/15/85 Labels and Addresses of Patch Points for WordStar 3.3 and 3.0 KAYPRO WORDSTAR 3.3 WS 3.3 WS 3.0 ORIGINAL LABEL ADDR ADDR DESCRIPTION SETTINGS WSVER 0110 0110 WordStar version COPRIT 0112 0117 copyright notice SIGNON 014E 0153 WordStar sign-on message 0179 017F serial number IDTEX 018A 018F terminal id text PIDTEX 01AE 01B3 printer id text PROTTX 01D2 01D7 printer protocol text PDRVTX 01F6 01FD port driver text 021B 0220 various flags and holders for internal . use by WordStar . . HITE 0232 0248 screen height in lines (24) 18 WID 0233 0249 screen width in columns (80) 50 CLEAD1 0234 024A cursor positioning: lead-in string 02 1B 3D 00 00 00 00 00 00 CLEAD2 023D 0253 crsr pos: string between row/column 00 00 00 00 00 CTRAIL 0242 0258 crsr pos: ending string 00 00 00 00 00 CB4LFG 0247 025D crsr pos: 00 = row/col, FF = col/row 00 LINOFF 0248 025E crsr pos: row offset 20 COLOFF 0249 025F crsr pos: column offset 20 ASCUR 024A 0260 crsr pos: 00 = binary row & col numbers 00 UCRPOS 024B 0264 jmp to user crsr pos routine 00 00 C9 00 00 ERAEOL 0250 026D terminal erase to end of line string 01 18 00 00 00 00 00 LINDEL 0257 0274 terminal delete line string 00 00 00 00 00 00 00 LININS 025E 027B terminal insert line string 00 00 00 00 00 00 00 00 00 IVON 0267 0284 turn on highlighting string 06 1B 42 30 1B 42 31 IVOFF 026E 028B turn off highlighting string 06 1B 43 30 1B 43 31 TRMINI 0275 0292 terminal initialization string 01 1A 00 00 00 00 00 00 00 TRMUNI 027E 029B terminal uninitialization string 00 00 00 00 00 00 00 00 00 INISUB 0287 02A4 jmp to user term init routine 00 00 C9 UNISUB 028A 02A7 jmp to user term uninit routine 00 00 C9 USELST 028D 02AA FF = can use last row w/o scrolling 00 DELCUS 028E 02AE delay after cursor positioning 0A DELMIS 028F 02AF delay after misc other functions 05 MEMAPV 0290 02B0 FF = memory-mapped video display 00 MEMADR 0291 02B1 address of home pos in mm video 00 00 HIBIV 0293 02B3 FF = highlighting by setting high bit 00 HIBCUR 0294 02B4 FF = show crsr by setting high bit 00 CRBLIV 0295 02B5 FF = WS blink crsr in iv, term or mmv 00 ZAFCIN 0296 02B6 fix for backspace on delete 00 00 RUBFXF 0298 02B8 FF = use RFIXER 00 RFIXER 0299 02B9 fix for backspace on delete 00 UCNSTA 029A 02BA jmp to user con stat routine 00 00 C9 UCONI 029D 02BD jmp to user con input routine 00 00 C9 UCONO 02A0 02C0 jmp to user con output routine 00 00 C9 SWIN 02A3 02C3 routine or jmp before char out to con 00 00 C9 00 00 00 SWOUT 02A9 02C9 routine or jmp after char out to con 00 00 C9 00 00 00 DEL1 02AF 02CF short delay - highlight crsr blink on 03 DEL2 02B0 02D0 short delay - highlight crsr blink off 09 DEL3 02B1 02D1 medium delay - time to prefix menus 19 DEL4 02B2 02D2 long delay - time for msg displays 40 DEL5 02B3 02D3 delay until screen redisplay/refresh 09 TRSCRS 02B4 02D4 for TRS-80 only 00 TRSCIF 02B5 02D5 for TRS-80 only 00 HETHBS 02B6 02D6 for Lifeboat CP/M - Heath 89 00 APLFLG 02B7 02D7 for Apple only 00 MPMFLG 02B8 MP/M flag 00 NMOFUS 02D8 number of users on system 01 TCKFLG 02DA for MP/M only 00 RSTFLG 02DB FF = no disk resets by WordStar 00 DEFDSK 02B9 02DC drive for OVR files after logged drive 01 SCRLSZ 02BA 02DD columns for horizontal scroll 14 CNVTBL 02BB ?? 00 00 00 00 00 . . . MORPAT 02CB 02E0 space for user-added routines CD 8A 02 C3 AB (with mysterious 12 bytes of code) 24 CD A0 3E C3 87 02 00 00 00 00 00 00 00 00 . . . PBGMEM 034B 035C pointer to beg of memory (i.e. text) 60 84 ITHELP 034D 0360 initial help level 03 NITHLF 034E 0361 00 = display spec msg if ITHELP 1 or 2 FF ITITOG 034F 0362 FF = insert mode on, 00 = off FF ITDSDR 0350 0363 FF = no-file dir on, 00 = off FF INITPF 0351 0366 initial page format: line height 1/48s 08 0352 0367 paper length (.pl) in lines (66) 42 0353 0368 paper length in 1/48s 10 02 0355 036A line height in 1/48s again 08 0356 036B margin at top (.mt) in lines 03 0357 036C margin at top in 1/48s 18 00 0359 036E line height again 08 035A 036F heading margin (.hm) in lines 02 035B 0370 heading margin in 1/48s 10 00 035D 0372 line height again 08 035E 0373 bottom margin (.mb) in lines 08 035F 0374 bottom margin in 1/48s 40 00 0361 0376 line height again 08 0362 0377 footing margin (.fm) in lines 02 0363 0378 footing margin in 1/48s 10 00 0365 037A line height again 08 0366 037B 00 for standard character width 00 0367 037C std char width in 1/120s 0C 0368 037D alt char width in 1/120s 0A 0369 037E page offset in characters 08 INITLM 036A 037F initial left margin less 1 00 INITRM 036B 0380 init right mar less 1, up to WID - 4 40 INITSR 036C 0381 initial sub/superscript roll in 1/48s 03 INITWF 036D 0385 word wrap (^OW), 00 = off, FF = on FF 036E 0386 justification (^OJ), 00 = off, FF = on FF 036F 0387 variable tabs (^OV), 00 = off, FF = on FF 0370 0388 soft hyphens (^OE), 00 = off, FF = on 00 0371 0389 hyphen help (^OH), 00 = off, FF = on FF 0372 038A show ctrl char (^OD), 00 = off, FF = on FF 0373 038B show ruler line, 00 = off, FF = on FF 0374 038C figure page breaks, 00 = off, FF = on FF 0375 038D show page breaks, 00 = off, FF = on FF 0376 038E line spacing 01 0377 038F (^KN) 00 = block move, FF = column 00 NONDOC 0378 0392 direct entry, 00 = doc, FF = nondoc 00 DOTSON 0379 0397 dot cmds during edit, 00 = disable FF DECCHR 037A 0393 decimal point character 2E DOTCHR 037B 0395 character to begin dot cmds 2E BLNCHR 0386 0396 non-break space char (^O) 0F CMTCHR 0387 comment char (;) 3B ENDEXP 0388 47 RVELIM 0389 03D8 MailMerge delimiter for data values 2C RVQUOT 038A 03D9 MM delimiter for enclosed values 22 00 TXBACK 038C 2F 42 VARCH1 038E 03DB MM delimiter to introduce variables 26 VARCH2 038F 03DC MM delimiter to terminate variables 26 VAROPC 0390 03DE char after name before option letters 2F 0391 03DF opt ltr for omit line if variable null 4F . . . COMPOP 0396 table of MM comparison operators 3C 3E 00 FD 3E . . . LOGICP 03B7 table of MM logical operators 2E 41 4E 44 2E . . . HZONE 03C9 039A hyphenation zone at end of line 04 03CA 039B pointer to non-consonant table D3 03 03CC 039D pointer to vowel table CE 03 VOWTAB 03CE 039F table of vowels 59 5B 5D 7B 7D NONCON 03D3 03A4 table of non-consonants 41 45 49 4F 55 00 00 00 00 00 BOFCHR 03DD 03AE beginning of file flag char 3A CONCHR 03DE 03AF line cont past screen edge flag char 2B EOFCHR 03DF 03AD end of file flag char 2E FDTCHR 03E0 03B5 merge-print command flag char 4D HARDCR 03E1 03B4 hard cr flag char 3C LFCHR 03E2 03B1 line ends in lf w/o cr flag char 4A OVPCHR 03E3 03B0 overprint line flag char 2D PAGCHR 03E4 03B2 end of page flag char 50 SOFTCR 03E5 03B3 soft cr flag char 20 SOFHYC 03E7 03B8 character used for soft hyphens AD PAGFIL 03E8 03B9 character used for page breaks 2D MARKS 03E9 03BA character used for start of blocks 42 03EA 03BB character used for end of blocks 4B 03EE 03BF characters (0-9) used for place markers 30 31 32 33 34 35 36 37 38 39 PODBLK 03F8 03CA disk file output, 00 = no, FF = yes 00 03F9 03CB use form feeds, 00 = no, FF = yes 00 03FA 03CC suppress page format, 00 = no, FF = yes 00 03FB 03CD pause between pages, 00 = no, FF = yes 00 NOUFF 03FC 03D1 FF = suppress form feed question above 00 ITPOPN 03FD 03D3 print page numbers, 00 = on, FF = off 00 ITMIJ 03FE 03D4 microjustification, FF = on, 00 = off FF ITBIP 03FF 03D5 bi-directional print, FF = on, 00 = off FF FNWSCM 0400 03E6 name of main WordStar program WS COM DSKTNA 040C 03F2 name of message file WSMSGS OVR FNOVLY 0418 03FE name of overlay file WSOVLY1 OVR FNMRGP 0424 040A name of merge-print overlay MAILMRGEOVR AUTOBS 0430 0422 table of auto-backspace characters 00 00 00 00 00 00 00 00 00 00 00 BSCHR 043B 042D char to use after autobs, usually ^H 08 NOFTAB 043C 0430 no-file command table 04 00 00 01 (each entry 4 bytes, first two are . cmd chars, next two are address of . routine) . VTAB 0489 0481 file editing command table 11 FF 12 00 (same format as NOFTAB) 0B FF 16 00 0F FF 1E 00 0A FF 22 00 0499 0491 set help level ^JH 0A 08 04 01 049D 0495 cursor left ^S . 04A1 0499 backspace ^H . 04A5 049D cursor right ^D . 04A9 04A1 cursor left ^A 04AD 04A5 cursor right word ^F 04B1 04A9 cursor down ^X 04B5 04AD cursor up ^E 04B9 04B1 cursor to left margin ^QS 04BD 04B5 cursor to end of line ^QD 04C1 04B9 cursor to bottom of screen ^QX 04C5 04BD cursor to top of screen ^QE 04C9 04C1 cursor to block begin ^QB 04CD 04C5 cursor to block end ^QK 04D1 04C9 cursor to previous position ^QP 04D5 04CD crsr to source of search, move ^QV 04D9 04D1 cursor to marker 0 ^Q0 04DD 04D5 " " " 1 ^Q1 04E1 04D9 " " " 2 ^Q2 04E5 04DD " " " 3 ^Q3 04E9 04E1 " " " 4 ^Q4 04ED 04E5 " " " 5 ^Q5 04F1 04E9 " " " 6 ^Q6 04F5 04ED " " " 7 ^Q7 04F9 04F1 " " " 8 ^Q8 04FD 04F5 " " " 9 ^Q9 0501 04F9 cursor to begin file ^QR 0505 04FD cursor to end file ^QC 0509 0501 find ^QF 050D 0505 find & replace ^QA 0511 0509 set left margin ^QL 0515 0511 scroll back continuously ^QW 0519 0515 scroll forward continuously ^QZ 051D 0539 delete to begin line ^Q 0521 053D " " " " ^Q_ 0525 0541 delete to end line ^QY 0529 0551 repeat nest command ^QQ 052D 050D repeat last ^QF or ^QA ^L 0531 0519 scroll forward one line ^Z 0535 051D scroll back one line ^W 0539 0521 scroll back one screen ^R 053D 0525 scroll forward one screen ^C 0541 0529 delete character left 0545 052D " " " ^_ 0549 0531 delete char under cursor ^G 054D 0535 delete line ^Y 0551 0545 delete word right ^T 0555 0549 toggle insert mode on/off ^V 0559 054D reformat to end paragraph ^B 055D 0555 insert line ^N 0561 0559 tab ^I 0565 055D carriage returnRN ^M 0569 0561 put nxt char in txt as ctrl char ^P 056D 0565 toggle display of marked block ^KH 0571 0569 mark/hide block begin ^KB 0575 056D mark/hide block end ^KK 0579 0571 set/hide marker 0 ^K0 057D 0575 " " 1 ^K1 0581 0579 " " 2 ^K2 0585 057D " " 3 ^K3 0589 0581 " " 4 ^K4 058D 0585 " " 5 ^K5 0591 0589 " " 6 ^K6 0595 058D " " 7 ^K7 0599 0591 " " 8 ^K8 059D 0595 " " 9 ^K9 05A1 0599 move block ^KV 05A5 059D copy block ^KC 05A9 05A1 delete block ^KY 05AD 05A5 toggle column mode on/off ^KN 05B1 05A9 ^KZ 05B5 05AD interrupt command in progress ^U 05B9 05B1 save file and exit ^KX 05BD 05B5 save file and return to menu ^KD 05C1 05B9 save file and continue ^KS 05C5 05BD abandon file and return to menu ^KQ 05C9 05C1 read file into text ^KR 05CD 05C5 write block to another file ^KW 05D1 05C9 delete file ^KJ 05D5 05CD toggle directory on/off ^KF 05D9 05D1 print file ^KP 05DD 05D5 change logged disk ^KL 05E1 05D9 copy file ^KO 05E5 05DD rename file ^KE 05E9 05E1 set left margin ^OL 05ED 05E5 set right margin ^OR 05F1 05E9 set tab ^OI 05F5 05ED clear tab ^ON 05F9 05F1 set mar/tabs frm new ruler line ^OF 05FD 05F5 toggle word wrap on/off ^OW 0601 05F9 " justification on/off ^OJ 0605 05FD " variable tab on/off ^OV 0609 0601 " dot cmd interp on/off ^OD 060D 0605 " ruler display on/off ^OT 0611 0609 " page break display on/off ^OP 0615 060D " soft hyphen on/off ^OE 0619 0611 " hyphen help on/off ^OH 061D 0615 paragraph tab ^OG 0621 0619 margin release ^OX 0625 061D center line ^OC 0629 0621 set line spacing ^OS 062D 0625 help for dot commands ^JD 0631 0629 " " status line ^JS 0635 062D " " flags ^JF 0639 0631 " " place markers ^JP 063D 0635 " " paragraph reform ^JB 0641 0639 " " tabs and margins ^JM 0645 063D command index ^JI 0649 0641 help for moving text ^JV . 064B 0645 " " ruler line ^JR . 0651 ^JA . XTAB 0655 0649 expansion space for edit cmd table 00 00 00 00 . . . FPTAB 067A 066E merge-print cmd table 10 00 28 43 (2 byte cmd char + 2 byte address) . . . 00 PNFTAB 068B 067F pointer to no-file cmd table 3C 04 PVTAB 068D 0681 pointer to edit cmd table 89 04 PFPTAB 068F 0683 pointer to merge-print table 7A 06 (following are spec chars used at prompts) CLCHR 0691 0686 cursor left char 13 CRCHR 0692 0687 cursor right char 04 LITCHR 0693 0688 prefix to take next char as literal 10 DIRCH 0694 0689 directory on/off 06 scroll dir up 1A scroll dir down 17 STPCHR 0697 068C must match interrupt char above 15 ERELCH 0698 068D error release char for interrupt 1B POSMTH 0699 0690 type of printer FF FF = teletype, no backspace 00 = teletype w/backspace 01 = daisywheel 03, 04 = special oem printers BLDSTR 069A 0691 number of strikes for boldface 03 DBLSTR 069B 0692 number of strikes for double-strike 02 (Next 8 labels active only if POSMTH = FF or 00) PSCRLF 069C 0696 string to do CR and LF 02 0D 0A 0D 0A 0A 00 00 00 00 00 PSCR 06A7 06A1 string to do CR only 02 0D 00 00 00 00 00 PSHALF 06AE 06A8 string to do CR and half-LF 00 0D 0A 00 00 00 00 PBACKS 06B5 06AF string to do backspace 00 08 00 00 00 00 PALT 06BB 06B5 string to set alt char width ^PA 00 1B 45 00 00 PSTD 06C0 06BA string to set std char width ^PN 00 1B 4E 00 00 ROLUP 06C5 06BF str to roll carr up part line ^PT 00 00 00 00 00 ROLDOW 06CA 06C4 str to roll carr down part line ^PV 00 00 00 00 00 USR1 06CF 06C9 string for user function 1 ^PQ 00 00 00 00 00 USR2 06D4 06CE " " " " 2 ^PW 00 00 00 00 00 USR3 06D9 06D3 " " " " 3 ^PE 00 00 00 00 00 USR4 06DE 06D8 " " " " 4 ^PR 00 00 00 00 00 RIBBON 06E3 06DD string to set alt ribbon color ^PY 00 00 00 00 00 RIBOFF 06E8 06E2 string to set std ribbon color ^PY 00 00 00 00 00 PSINIT 06ED 06E7 string to initialize printer 01 0D 54 31 32 00 00 00 00 00 00 00 00 00 00 00 00 PSFINI 06FE 06F8 string to uninitialize printer 00 1B 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SOCHR 070F 070B character for strikeout 2D ULCHR 0710 070C character for underline 5F PRINIT 0711 070D jmp to user printer init routine 00 00 C9 PRFINI 0714 0710 jmp to user printer uninit routine 00 00 C9 CSWTCH 0717 0717 switch to select printer driver 00 (00 = primary list device) (01 = WordStar's port driver) (02 = user printer driver) (03 = oem driver) (04 = alternate console driver) HAVBSY 0718 0718 have printer busy rtn? FF = yes 00 (If CSWTCH = 00, next 3 active) LIBSY 0719 071A jmp to user busy test routine 00 B7 C9 LISEND 071C 071D routine send character to list device 5F 0E 05 CD 05 00 B7 C9 LISINP 0724 0725 jmp to user char input rtn 00 37 C9 (if using XON/XOFF or ETX/ACK) (If CSWTCH = 01, next 11 active) POBSY 0727 0728 port driver output status entry DB POSTAT 0728 0729 output status port address 05 00 E6 POMASK 072B 072C bit mask for transmit ready 01 EE POOM 072D 072E bits that change 01 37 C0 B7 C9 POSEND 0732 0733 port driver send char entry D3 POOP 0733 0734 output data port address 04 00 C9 POINP 0736 0737 port driver input status entry DB PISTAT 0737 0738 input status port address 05 00 E6 POINSK 073A 073B bit mask for receive ready 02 EE POIM 073C 073D bits that change 02 37 C0 DB POIP 0740 0741 input data port address 04 00 B7 C9 (If CSWTCH = 02, next 3 active) PUBSY 0744 074C jmp to user printer busy test routine 00 B7 C9 PUSEND 0747 074F jmp to user char output routine 00 00 C9 PUINP 074A 0752 jmp to user char input routine 00 37 C9 (If CSWTCH = 04, next 7 active) ACBSY 074D 0758 jmp to user alt con busy test 00 B7 C9 ACSEND 0750 075B send char to alt con CD 6C 07 CD F0 20 C3 63 07 ACINP 0759 0764 input char from alt con CD 6C 07 CD 55 1D C4 6C 1D 57 ACFIN 0763 076E exit routine start 78 ACSTA1 076F 076F set/reset iobyte 32 03 00 7A B7 C0 37 C9 ACSTAR 076C 0777 entry routine start 57 3A 03 00 47 E6 FC F6 CONFIE 0774 077F alt con device assignment 01 (00 = TTY:, 01 = CRT:) . . . PROTCL 0778 0786 printer protocol type 00 (00 = none) (01 = ETX/ACK) (02 = XON/XOFF) EAKBSZ 0779 0787 ETX/ACK msg buffer size 7F (Most of the following are for daisywheels only) DVMILE 077A 0790 vertical motion index leadin string 00 1B 1E 00 00 DVMITR 077F ?? 00 1B 02 00 00 DVMMIN 0784 0795 ?? FF FF DVMRNG 0786 0797 ?? FF FF DHMILE 0788 0779 horizontal motion index leadin string 00 1B 1F 00 00 DHMIFG 078D 079E ?? 00 DHMIN 078E 079F ?? FF FF DHRNG 0790 07A1 ?? FF FF DFWD 0792 07A3 string to set forward print 00 1B 35 00 00 DBAK 0797 07A8 string to set backward print 00 1B 36 00 00 DSP 079C 07AD forward space 00 20 00 00 00 DBS 07A1 07B2 backward space 00 08 00 00 00 DLF 07A6 07B7 line feed vmi 00 0A 00 00 00 DRLF 07AB 07BC reverse line feed 00 1B 0A 00 00 DPHSPC 07B0 07C1 print phantom space 00 1B 59 00 DPHRUB 07B4 07C5 print phantom rubout 00 1B 5A 00 DNPROS 07B8 07D3 suppress proportional spacing 00 (00 = on, FF = off) DMJWB 07B9 07D5 use alt microjustification algorithm 00 (00 = no, FF = yes) PSTAB 07BA 07D8 proportional spacing table . (righthand digit of each byte is . the one involved in the totally . unsupported proportional spacing command ^P^P) 083A 083A END OF USER PATCHING AREA