home *** CD-ROM | disk | FTP | other *** search
- -----------------------------------
- DATE: April 13,1982
-
- PRODUCT: WordStar
- CATEGORY: CORRECTION
- Revision: All
- PROBELM: ETX/ACK & XON/XOFF protocols through CP/M LIST DEVICE
- REF: USER4, LISINP:, XON/XOFF, ETX/ACK, LST:, PRINTER
-
- Description:
-
- This bug only affects printers which are sent output characters through
- the standard CP/M list (LST:) device and the users wishes to implement
- the XON/OFF or ETX/ACK protocols.
-
- The list device driver in USER 4 includes a patchable item called LISINP:
- which is necessary to provide a routine to retreive the ACK character from
- the printer.
-
- Unfortunately this routine is never called by WordStar. The fix is as
- follows:
-
- A>SID WSOVLY1.OVR<CR>
- SID VERS 1.4
- NEXT PC END
- 8600 0100 BCFF
- #S739B<CR>
- 739B FA CA<CR>
- 739C 25 .<CR>
- #S7992<CR>
- 7992 FA CA<CR>
- 7993 25 .<CR>
- #G0<CR>
- A>SAVE 133 WSOVLY1.OVR<CR>
-
- EAS
-
- -----------------------------------
- ;DATE: April 13,1982
- ;
- ;PRODUCT: WordStar
- ;CATEGORY: MODIFICATION
- ;Revision: 3.0 only
- ;Subject: SYSTEM FILE DISPLAY SUPPRESSION IN WS DIRECTORY
- ;
- ; THIS PATCH WILL SUPPRESS DISPLAY OF ANY FILES ASSIGNED TO BE SYSTEM FILES
- ; UNDER CP/M 2.XX (HAVEN'T TESTED MP/M) WITH THE COMMAND:
- ;
- ; STAT FN.FT $SYS
- ;
- ; PATCH IS FOR WORDSTAR 3.00 EAS 02/03/82
- ;
- ; THE PATCH REPRESENTS 31 BYTES OF CODE IN THE USER PATCH AREA (USER1,
- ; MORPAT:) ORGANIZED TO EXIST AT THE HIGHEST LOCATION AVAILABLE SO THAT
- ; CURRENTLY EXISTING PATCHES WHICH DO NOT EXTEND PAST LOCATION 33CH WILL
- ; NOT BE AFFECTED BY THE INSTALLATION OF THIS SYSTEM FILE SUPPRESSION.
- ;
- ; Enjoy,
- ; Evan
- ;
- DELENTX EQU 2C28H
- DELENTY EQU 2C2BH
- DTAB EQU 2C69H
- DENTPT EQU 36D1H
- DOSNX EQU 2C8AH
- NDTST EQU 2BF6H
-
- ORG 33DH
- ;
- MORPAT: PUSH D
- INX D
- LDAX D
- ANI 80H
- POP D
-
- JNZ NODISP
- LXI H,DTAB
-
- JMP DELENTY
- ;
- NODISP: POP H
- POP B
- XCHG
- LHLD DENTPT
- XCHG
- PUSH H
- CALL DOSNX
- POP H
- POP D
- JMP NDTST
- ;
- ORG DELENTX
- ;
- JMP MORPAT
- END
-
- ;DATE: April 13,1982
- ;
- ;PRODUCT: WordStar
- ;CATEGORY: MODIFICATION
- ;Revision: 3.0 only
- ;Subject: Formmated output from printer driver
- ;
- *************************************************
- * PRINT TO DISK WITH WORDSTAR 3.0 *
- *************************************************
- ;
- ; THIS PROGRAM TAKES WHAT WORDSTAR SENDS TO THE LIST DEVICE
- ; TO A FILE CALLED FILEOUT. THIS MEANS YOU CAN PRINT FILES
- ; DIRECTLY TO THE DISK AND THEN PRINT THEM LATER USING PIP
- ; OR AN EQUIVALENT. ALSO GOOD FOR SEEING EXACTLY WHAT WORDSTAR
- ; DOES FOR ANY SPECIFIC PRINTER INSTALLATION. INSTALL
- ; WORDSTAR FOR THE PRINTER OF YOUR CHOICE, NO PROTOCOL,
- ; AND CP/M "LST:" DEVICE DRIVER. THIS PROGRAM USES
- ; PBGMEM, SO BE SURE TO SAVE ENOUGH PAGES TO HOLD THE
- ; PATCHES.
- ;
- *************************
- * EQUATES *
- *************************
- ;
- DEFBUF EQU 0080H ; DEFAULT BUFFER USED FOR FILE I/O
- BDOS EQU 5 ; LOCATION OF BDOS JUMP VECTOR
- CLOSEF EQU 16 ; CLOSE FILE FUNCTION
- DELETEF EQU 19 ; DELETE FILE FUNCTION
- MAKEF EQU 22 ; MAKE FILE FUNCTION
- WRITEF EQU 21 ; WRITE SEQUENTIAL
- SETDMA EQU 26 ; SET DMA ADDRESS
- INISUB EQU 02A4H ; ADDRESS OF INITIALIZATION SUBR IN WS 3.0
- UNISUB EQU 02A7H ; " " DEINITIALIZATION SUBR IN 3.0
- PRINIT EQU 070DH ; " " PRINTER INITIALIZATION SUBR
- PRFINI EQU 0710H ; " " " DEINITIALIZATION SUBR
- MORPAT EQU 02E0H ; " " EXTRA PATCHING AREA IN ROOT
- LISEND EQU 071DH ; " " LST: PRINTER DRIVER IN WS
- PBGMEM EQU 035CH ; " " POINTER TO FREE MEMORY
- MEM EQU 7900H ; WHERE THE ABOVE POINTER POINTS TO INITIALLY
- ;
- ORG INISUB
- JMP INITA ; CHANGE BDOS VECTOR TO GO TO OUR ROUTINE
- ; WHICH CHECKS FOR WS CHANGING DMA ADDRESS
- ; SO WE CAN RESET IT AFTER WE WRITE OUR FILE
- ; TO THE DISK.
- ;
- ORG UNISUB
- JMP DEINITA ; CHANGE BDOS VECTOR BACK TO WHAT IT WAS
- ; ORIGINALLY.
- ;
- ORG PRINIT
- JMP INITB ; DELETE THE FILE IF IT EXISTS, AND CREATE
- ; A NEW ONE.
- ;
- ORG PRFINI
- JMP DEINITB ; WRITE LAST SECTOR TO, AND CLOSE FILEOUT
- ;
- ORG LISEND
- JMP PFILE ; PRINT FILE TO DISK
- ;
- ORG MORPAT
- INITA: LHLD BDOS+1 ; GET BDOS VECTOR
- SHLD CBDOS+1 ; STORE IT FOR USE AFTER CHECKING FOR
- ; CHANGE DMA ADDRESS
- LXI H,TRANS ; POINT TO TRANSLATE ROUTINE
- SHLD BDOS+1 ; MAKE 6 & 7 POINT THERE SO
- ; THAT WE CAN DO TRANSLATION
- RET ; AND RETURN
- ;
- INITB: MVI C,DELETEF ; DELETE "FILEOUT"
- LXI D,FILE ; IF IT EXISTS
- CALL BDOS ; NOTE, NO ERROR CHECKING
- MVI C,MAKEF ; CREATE THE FILE ON CURRENTLY LOGGED DRIVE
- LXI D,FILE
- CALL BDOS
- INR A ; IF NO DIRECTORY SPACE
- JZ EXIT ; RETURN TO OPERATING SYSTEM
- RET ; ELSE DONE
- ;
- DEINITA:LHLD CBDOS+1 ; POINT TO ORIGINAL JMP ADDRESS
- SHLD BDOS+1 ; STORE IT BACK
- RET
- ;
- DEINITB:LXI D,DEFBUF ; POINT TO BUFFER
- MVI C,SETDMA ; CHANGE DMA
- CALL CBDOS
- LXI D,FILE ; POINT TO FCB
- MVI C,WRITEF ; WRITE IT OUT
- CALL CBDOS
- ORA A ; ERROR IF NON-ZERO
- JNZ EXIT ; RETURN TO OPERATING SYSTEM
- LXI H,DEFBUF-1 ; POINT TO 80H
- SHLD COUNT ; STORE NEW COUNT
- LHLD NEWDMA ; GET WS'S DMA ADDRESS
- XCHG ; PUT IN DE
- MVI C,SETDMA ; TO SET DMA AND
- CALL CBDOS ; CHANGE IT BACK
- MVI C,CLOSEF ; CLOSE THE FILE
- LXI D,FILE
- CALL CBDOS
- INR A ; CHANGED DISKS ON US?
- JZ EXIT ; IF SO, REBOOT
- RET ; ELSE DONE
- ;
- TRANS: PUSH PSW ; SAVE ACCUMULATOR
- MOV A,C ; GET BDOS FUNCTION NUMBER
- CPI SETDMA ; IF SETTING DMA, WE WANT TO KNOW WHERE TO
- JZ STODMA ;
- POP PSW ; ELSE RESTORE ACC
- CBDOS: JMP 0000H ; AND JMP TO THE BDOS (ADDRESS PUT IN AT INITA)
- ;
- STODMA: XCHG ; GET NEW DMA IN HL
- SHLD NEWDMA ; STORE IT FOR FUTURE USE
- XCHG ; RESTORE DE & HL TO ORIGINAL VALUES
- POP PSW ; RESTORE ACCUMULATOR
- JMP CBDOS ; AND JUMP TO BDOS
- ;
- NEWDMA: DW 0000H ; THIS IS WHERE WS'S DMA IS (PUT IN FROM
- ; STODMA ROUTINE ABOVE
- ;
- ORG PBGMEM
- DW LEN + MEM ; STORE NEW POINTER TO END OF MEMORY AT PBGMEM
- ;
- ORG MEM ; START WHERE PBGMEM ORIGINALLY POINTED TO
- ; BECAUSE THERE'S NOT ENOUGH SPACE TO DO
- ; ALL THIS IN MORPAT
- ;
- ; ACTUAL ROUTINE TO PRINT FILE TO DISK
- ;
- PFILE: LHLD COUNT ; GET COUNT
- INX H ; INCREMENT IT
- MOV B,A ; SAVE CHARACTER BEING PRINTED
- MOV A,H ; GET HI ORDER COUNT
- CPI 1 ; GONE TO 100H?
- JZ WRITIT ; YES, TIME TO WRITE A SECTOR
- SHLD COUNT ; NO, STORE NEW COUNT
- MOV M,B ; STORE CHARACTER
- RET ; AND RETURN
- WRITIT: PUSH B ; SAVE LAST CHARACTER
- LXI D,DEFBUF ; POINT TO BUFFER
- MVI C,SETDMA ; CHANGE DMA
- CALL CBDOS
- LXI D,FILE ; POINT TO FCB
- MVI C,WRITEF ; WRITE IT OUT
- CALL CBDOS
- ORA A ; ERROR IF NON-ZERO
- JNZ EXIT ; RETURN TO OPERATING SYSTEM
- LXI H,DEFBUF-1 ; POINT TO 80H
- SHLD COUNT ; STORE NEW COUNT
- LHLD NEWDMA ; GET WS'S DMA ADDRESS
- XCHG ; PUT IN DE
- MVI C,SETDMA ; TO SET DMA AND
- CALL CBDOS ; CHANGE IT BACK
- POP B ; GET LAST CHARACTER
- MOV A,B ; INTO A
- JMP PFILE ; AND START AGAIN
- ;
- EXIT: CALL DEINITA ; RESTORE BDOS VECTOR
- JMP 0000 ; AND REBOOT
- ;
- COUNT: DW 80H-1 ; INITIALIZE TO BEGINNING - 1
- FILE: DB 0
- DB 'FILEOUT ',' '; FCB FOR OUTPUT FILE
- DB 0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0
- DW -1 ; TO MARK END
- LEN EQU $-PFILE
- END
- ;