; ; ; NEC 3550 Printer install for Wordstar ver 3.30. ; by Brad Harrison ; 12/03/86 ; ; NOTE: This patch will only work if you use the Wordstar Port driver. ; ; This patch allows Wordstar ver 3.3 to function correctly with ; a NEC 3550 printer. The WINSTALL program has a selection for ; the NEC-3550 but this definition is flawed. There are two ; basic errors in the NEC-3550 definition as supplied by Micropro: ; ; 1. The DRLF sequence is incorrect. This sequence is used to ; reverse line feed a daisy wheel printer. The sequence ; supplied is - 1B 0A . This patch will correct the ; sequence to 1B 37 . ; ; 2. The NEC 3550 printer is unique in that it requires an escape ; sequence after the VMI (vertical motion index) sequence. ; WS 3.3 added the DVMITR area to accomplish this but when ; it is used, Wordstar seems to lose track of the page length ; and basically just doesn't work right. This patch will clear ; out the DVMITR sequence so that WS will print correctly. ; In order to send the VMI trailer sequence, the Wordstar port ; driver will be changed to look at the characters being printed ; and append a 1B 32 after it finds a 1B 41 xx. ; ; Example: (DVMITR) ; <----> --- VMI trailer sequence ; 1B 41 01 1B 42 ; VMI header -- <----> ! ; (DVMILE) !----- VMI value (0 to 56) ; ; INSTALLATION: ; 1. Use the WINSTALL program to set up wordstar. Install the NEC-3550 ; printer and use the port driver. ; 2. Change the DATOUT equate below to match the output port for ; your printer. (should be the same value you used with WINSTALL) ; 3. Assemble this patch. ex: ASM WS3550 ; 4. Overlay the resulting hex file onto your installed WS COM file. ; example: MLOAD WS.COM=WS.COM,WS3550.HEX ; DATOUT: EQU 0F8H ; output port ** HARDWARE DEPENDANT ** ; ; ; change signon message - show date of this mod ORG 1AEH DB 'NEC-3550 Printer (12/03/86 BH)' ; ; ; ---- begin of WS port driver patch for NEC 3550 ; scan all outgoing characters to printer and when ; a ESC,'A',x is found, append a ESC,'2' afterwards ORG 2BDH ; space in user1 for patch NECOUT: EQU $ PUSH A ; save registers PUSH H PUSH B LXI H,NSTAT ; (HL) is our status flag MOV C,A ; char to be sent in C LDA NSTAT ; find out where we are ORA A JZ NEC00 ; nstat=0 (looking for esc) CPI 1 JZ NEC01 ; nstat=1 (looking for 'A') ; nstat must be a 2 - we need to append esc '2' after this char DCR M ; put nstat back to 0 DCR M CALL CHOUT MVI C,ESC ; add on an ESC '2' CALL CHOUT MVI C,'2' NEC99: CALL CHOUT ; send char and return POP B ; restore registers POP H POP A RET ; back to the ws driver ; ; nstat must be a 0 - we need to look for ESC that begins ESC 'A' NEC00: EQU $ MOV A,C CPI ESC ; first thing to look for is esc JNZ NEC99 ; n - just send char INR M ; y - change from 0 to 1 JMP NEC99 ; send char and return ; ; nstat must be a 1 - we found an ESC now check for 'A' NEC01: EQU $ DCR M ; put back to 0 just in case MOV A,C CPI 'A' JNZ NEC99 ; nstat is back to 0 : look for esc INR M ; 0 --> 1 INR M ; 1 --> 2 JMP NEC99 ; CHOUT: CALL POBSY ; printer busy? JC CHOUT ; y- we will wait MOV A,C ; get back the char to print OUT DATOUT ; send the char RET ; NSTAT: DB 0 ; 0= check for esc ; 1= found esc, check for 'A' ; 2= found esc and 'A' append after this chr ; ; ---- end of wordstar port driver patch ; ; BS: EQU 8 ; backspace LF: EQU 10 ; line feed FF: EQU 12 ; form feed CR: EQU 13 ; carriage return DEL: EQU 7FH ; delete or rubout ESC: EQU 01BH ; escape ; ; ; ******************************************************************** ; we must modify the WS port driver so that it calls our ; extension which is located in USER1 (and listed above). ; POBSY: EQU 727H ; port driver : status check ; ORG 732H ; port driver : character out POSEND: EQU $ CALL NECOUT ; call our modified driver RET ; ; ----- daisy wheel printer stuff ------------------ ; the nec 3550 driver normally has WS append a ESC '2' after ; a VMI sequence. WS doesn't do this correctly, so we blank ; out the VMI trailing sequence and let the printer driver ; (above) append the ESC '2' ; ORG 77FH DVMITR: DB 0 DB 0,0,0,0 ; ; ; this was just a bug in the NEC driver as supplied from MICROPRO ; The reverse line feed sequence shoud be 1B 37 ; ; ----- fix up :drlf+2 from 0A to 37 ORG 7ABH+2 DB '7' ; END