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
/
PROGRAMS
/
WSTAR
/
WSUFIX4.AQM
/
WSUFIX4.ASM
Wrap
Assembly Source File
|
2000-06-30
|
8KB
|
230 lines
; 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