;		KAYPRO LISTST BIOS PATCH
;			(KPPATCH.ASM)
;
;	The Kaypro IV has a bug in the BIOS function 14, LISTST.
; This bug causes the print buffer function in MDM7nn not to work
; properly. 
;	According to the DRI Alteration Guide, this function is
; supposed to return a value of 0FFH in register A if the printer
; is available, and 00 if it is busy. The Kaypro BIOS (which in
; turn calls the ROM) does not return the zero in A, but it does
; return with the zero FLAG set. This can be fixed by the BIOS
; patch which follows:
;
;
BIOS	EQU	0FA00H	; Beginning of BIOS jump vectors
LISTST	EQU	BIOS + 165H
;
BIOS14	EQU	BIOS + 3*14 + 3
;
	ORG	BIOS14	; Put jump to patch here
	JMP	PATCH
;
SPARE	EQU	BIOS - 18	; Hole for patch
;
	ORG	SPARE
PATCH:	CALL	LISTST	; Call the ROM
	RNZ		; OK except when zero
	XRA	A	; Clear accumulator
	RET		; And return
	END
;
;
; 	Since the bug is in the BIOS, the patch requires
; generating a new version and placing it in the system
; tracks of your disk. To accomplish this, take the
; following steps:
;
; (1) Assemble the code above using ASM or MAC. The
; output will be KPPATCH.HEX. Note that this file has all
; text commented out, so it should assemble without
; editing.
;
; (2) Use SYSGEN to get a copy of CP/M in memory.
; To do this, insert a disk containing both SYSGEN
; and DDT into drive A. Then type:
;
;	SYSGEN
;
; When SYSGEN prompts with
;
; SOURCE DRIVE NAME (OR RETURN TO SKIP),
;
; respond with an  A. This will cause SYSGEN to
; generate a copy of the system tracks in low RAM.
;
; (3) When SYSGEN prompts for the destination drive,
; answer with a RETURN to reboot. The CP/M copy will
; remain in RAM.
; 
; (4) Save the copy of CP/M to disk by typing:
;
;	SAVE 36 CPM.COM
;
; (5) Type the following commands exactly as they
; appear:
;
;	DDT CPM.COM
;	IKPPATCH.HEX
;	R2580
;
; This causes DDT to load CPM.COM, then overlay it
; with the patches. The "2580" is the offset required
; to compensate for the fact that we are using a copy
; moved to low RAM. Just to be sure, type:
;
;	L1FAD
; and
;	L1F65
;
; You should see JMP F9EE at the first address, and
; the short subroutine at the second.
;
; (6) Exit DDT with G0 (that's a zero!) or ^C.
; The patched copy will remain in RAM.
;
; (7) Now run SYSGEN again. This time, respond to the
; first prompt with a RETURN (the system is already
; in RAM). At the second prompt, you can either respond
; with an "A", which will load the system onto the
; system tracks of the same disk, or "B" to load it onto
; any disk you desire to put in drive B.
;
; Note that you can continue to write the patched system
; onto as many disks as you like, simply by responding
; to the prompt appropriately. DO NOT type ^C when you
; insert a new disk!
;
; Note also that you can do this for existing disks. The
; contents of the directory or files on the disk will not
; be affected. Obviously, you might want to try this with
; a test disk, to make sure you get it right, before
; inserting the one with your PhD dissertation on it.
;
; If you experience any difficulties, please send me
; EMAIL at 72325,1327.
;
; Jack Crenshaw
