home *** CD-ROM | disk | FTP | other *** search
- ; WSUFIX VERSION 4 - 11/22/83 by:
- ;
- ; Ron Mozer
- ; Southwest Computer Center
- ; 121 Wyatt Dr. Suite 7
- ; Las Cruces, NM 88001
- ; (505) 523-6037 RCP/M
- ; (505) 526-2842 Voice
- ;
- ;
- ; THIS PROGRAM IS TO BE OVERLAYED WITH WS.COM TO FIX THE PROBLEM
- ; WITH THE OVERLAY FILES BEING EXPECTED IN THE CURRENT USER.
- ;
- ;**NOTICE**NOTICE** This patch for WS MUST be considered experimental at this
- ; time. It has been tested on a NorthStar Horizon and a Kaypro10 and
- ; seems to work as advertised. Please report any bugs, comments, or
- ; suggestions for improvement to the RCP/M listed above or to the
- ; Mesilla Valley RCP/M, (505) 522-8856.
- ;
- ;
- ; Known limitations:
- ;
- ; 1) The (R)un command has some restrictions that are caused by the fact
- ; that WS must be switched to DEFUSR and stay there while the .COM
- ; file is executing. WS returns to the current(start up) user when
- ; the first .OVR file is opened upon return to normal WS operation.
- ; All .COM files to be run must be in DEFUSR and either DEFDRV or the
- ; current drive. When executing programs such as COMPARE, HEXDIF,
- ; BISHOW, etc. that require a filename input on the command line,
- ; those files must be in DEFUSR on the CURRENT drive. Directory
- ; programs such as SD will show the directory of the CURRENT drive and
- ; DEFUSR. Calculator programs such as @ or ALLBASE, and disk util-
- ; ities such as DU seem to execute with no problem. The latter are
- ; the types of programs one would most likely want to (R)un under
- ; Wordstar. (The previous assumes operation under ZCPR2 with DEFUSR/
- ; DRV somewhere in the path.)
- ;
- ; 2) If you try to edit an .OVR or .COM file under Wordstar(who would
- ; want to do that?), the file will be created in the current drive/
- ; user, but then cannot be accessed again from that location. The
- ; file, once created, must be in DEFUSR of the CURRENT drive before it
- ; can be accessed under WS.
- ;
- ; 3) This patch has not been tested with SPELSTAR.OVR. It is expected
- ; that SPELSTAR.DCT would have to be in DEFUSR of the CURRENT drive
- ; for it to execute properly. Who knows where the various work files
- ; would wind up.
- ;
- ;
- ; REVISION HISTORY
- ;
- ; 11/22/83 Changed logic to look for an .OVR or .COM filetype before switching
- ; VER #4 to DEFUSR. In the case of .COM files, WS stays in DEFUSR while
- ; the program executes and then returns to the current user when the
- ; first .OVR file is again opened. This allows limited use of the
- ; (R)un command. Moved CURUSR and added COMFLG, both located in a
- ; safe memory location outside of the MORPAT area. This area is
- ; overwritten when the (R)un commanbd is used. Moved code that gets
- ; and saves the current user area to a separate routine invoked from
- ; INISUB. The user area saved is that from which WS is invoked.
- ; Changed back to 8080 code which uses all but two bytes of MORPAT.
- ; (pwc). Changed to use table driven compare routine.(Ron Mozer).
- ;
- ; 11/10/83 Fixed lots of bugs. Made Z80 code and require MAC
- ; VER #3 to assemble. (Ron Mozer)
- ;
- ; 11/09/83 Changed to make compatible with all wordstars?
- ; of varied version numbers. Still must make sure
- ; VER #2 you get the right address for INTERC. This code now
- ; needs to be simplified since there is only a couple of
- ; bytes left in MOPAT, thus no room to include spell star
- ; as one of the overlay files to check.
- ; (Ron Mozer)
- ;
- ; 10/03/83 Orignal version 1 (Ron Mozer)
- ;
- ; All BDOS calls made by Wordstar except for normal I/O are intercepted
- ; and sorted out. If the call is made to open the .OVR files the
- ; intercept will set the user to DEFUSR. After the BDOS returns, the
- ; intercept will set the user back to the current user. (See VER #4 notes above
- ; for change).
- ;
- ; This will allow those people who are running ZCPR, NZCPR, ZCPR2, etc,
- ; to have only one copy of wordstar on the system and be able to use
- ; it from any user/drive combination. (Very useful for hard disk machines)
- ;
- ; Care must be taken for those people who have already made major changes
- ; in wordstar. The area at MORPAT is being used by this program to
- ; accomadate the intercept. With VER #4, INISUB is also used.
- ;
- ; To implement this program, first edit this file to suit your needs,
- ; then assemble it with ASM. You can then overlay this use DDT as follows:
- ;
- ; >DDT WS.COM
- ; DDT VERS 2.2
- ; NEXT PC
- ; 3F00 0100
- ; -IWSUFIX.HEX
- ; -R
- ; NEXT PC
- ; 3F00 0000
- ; -G0
- ; >SAVE 62 WS.COM
- ;
- ;
- ;************************ W A R N I N G **************************
- ; If you are using a non-standard CP/M (one that does not start the
- ; TPA at 100H such as TRS-80, HEATH H8, etc.) you will have to change
- ; MOPAT, INTERC, BDOS, DEFDSK and anything else that may conflict.
- ;*****************************************************************
- ;
- DEFUSR EQU 0AH ;User area which has the .OVR and .COM files
- DEFDRV EQU 1 ;The default disk drive to test for
- ;the .OVR and .COM files (A=1, B=2, etc.)
-
- BDOS EQU 5 ;BDOS ENTRY POINT
- USRCMD EQU 32 ;GET/SET USER COMMAND
- OPEN EQU 15 ;OPEN FILE COMMAND
-
- DEFDSK EQU 02DCH ;location of DEFDSK in WS.COM
- MORPAT EQU 02E0H ;location of MORPAT (free space)
- inisub equ 02a4h ;location of inisub routine called on startup
- INTERC EQU 1824H ;location of intercept address. NOTE:
- ;you should check this with your favorite
- ;debuger to make sure that it is the LSB of
- ;the BDOS entry point. INTERC-1 should be:
- ; CD 05 00
-
- ;******************************************************************************
-
- ;NOTE***** These locations must be in an unused area of memory. DO NOT leave
- ;them in the morpat area as they are overwritten by WS when the (R)un command
- ;is used.
-
- CURUSR equ 0FE08H ;TEMP SAVE AREA for startup user area.
- comflg equ 0FE0AH ;location of COM file flag
-
- ;******************************************************************************
-
- yes equ 0ffh
- no equ 0
-
- org inisub
- jmp savusr ;Save user area from which WS is invoked.
-
- ORG DEFDSK
- DB DEFDRV ;Set the default disk drive in WS.
-
- ORG INTERC
- DW PATCH ;INSTALL INTERCEPT PATCH
-
- ORG MORPAT
- PATCH MOV A,C ;GET COMMAND
- CPI OPEN ;OPEN???
- JNZ BDOS ;LET BDOS HAVE IT IF NOT
- push h
- push d
- push b
- xchg ;get address of FCB in HL
- lxi d,9
- dad d ;point to filetype
- LXI D,OVRNM ;Set up to compare filetype with OVR
- CALL CMPARE ;check it
- JNZ TRYCOM ;NO, check for COMfile
- mvi a,no ;is OVR, so indicate not COM
- sta comflg
- jmp setdef ;is OVR so look in def drive/user
-
- trycom LXI D,COMNM ;Set up to compare filetype with COM
- CALL CMPARE ;check it
- JNZ RETBDOS ;Not COM so do normal BDOS call
- mvi a,yes ;is COM so set flag and fall through to setdef
- sta comflg
-
- setdef pop b
- pop d
- pop h
- MVI A,DEFUSR ;SELECT DEFAULT USER
- CALL USER
- CALL BDOS ;PROCESS OPEN COMMAND
- PUSH PSW
- lda comflg ;If COM file, must stay in defusr until finished
- cpi yes ;return to current du after next OVR file open.
- jz stay
- LDA CURUSR ;GET CURRENT USER BACK
- CALL USER
- POP PSW
- RET
- ;
- USER PUSH B ;SAVE EVERYTHING IN SIGHT
- PUSH D
- PUSH H
- MOV E,A
- MVI C,USRCMD
- CALL BDOS
- POP H
- POP D
- POP B
- RET
-
- retbdos pop b
- pop d ;restore registers
- pop h
- jmp bdos ;normal bdos call
-
- stay pop psw ;get back open file result and stay in DEFUSR.
- ret
-
- CMPARE MVI B,3 ;CHECK THREE BYTES
- CMPLP LDAX D ;WHAT WERE CHECKING AGAINST
- CMP M ;WHAT WERE CHECKING
- RNZ ;NOT THE SAME
- INX H ;POINT TO NEXT BYTE
- INX D
- DCR B ;DECREMENT COUNTER
- JNZ CMPLP ;LOOP TILL DONE
- RET
-
- OVRNM DB 'OVR'
- COMNM DB 'COM'
-
- ;The following routine is jumped to from INISUB
-
- savusr: MVI A,0FFH ;REQUEST USER NUMBER
- CALL USER
- STA CURUSR ;SAVE IT
- ret
-
- end