PART NUMBER 318020-05 --EDITOR, KERNEL, CP/M ($C000-$FFFF)
CAPS LOCK Q. Previously an error in key matrix decode table caused
a lowercase 'Q' to be passed when the keyboard is in CAPS LOCK
mode. The table has been corrected by substituting the correct
value for upper-case 'Q'.
FUNCTION KEYs. Previously the function key handler, part of the
SCNKEY routine at CKIT2, failed to detect a function key string
pending. This has been corrected via patch routine, which will
ignore new function key depressions until the string in prograss
has been output (i.e., KYNDX = 0). Also, DOPFKEY now exits via
SCNRTS, instead of simply RTSing.
IOINIT system initialization. Previously the RS-232 pseudo-6551
registers were not initialized because these values are expected to
be given by the user whenever RS-232 channels are OPENed.
Apparently many C64 users have taken advantage of the fact the C64
'happened' to clear these locations an fail to specify critical
parameters. These RS-232 registers are now initialized to default
to: no parity, full duplex, 3-line, 1-stop bit, 8-bit words and 300
baud, via a patch subroutine.
IOINIT PAL system initialization. Adjustements have been made to
the 8563 initialization values fro PAL systems. The PAL horizontal
total (register 0) changes from $7E to $7F. The PAL vertical total
(register 4) changes from $27 to $26. These changes sift the cycle
time from 20.320us to 20.032us. The patch required a patch
subroutine as well as a change to VDCTBL.
BASIN system call. Previosly attempting input from a logical
channel to the screen (e.g., via INPUT#) resulted line too long
errors. This has been corrected utilizing a subroutine patch to
preserve bit-7 of CRSW, which serves as a flag to the Editor that a
(pseudo) end-of-line has been reached. Also, TBLX is copied to
LINTMP to correctly locate the current cursor line for the Editor.
Please note that switching between the 40 and 80-column text
screens, opening and closing windows, or clearing text screens can
confuse logical screen channels. The Editor variable LINTMP ($A30)
is a global, not local, variable as it should have been. Users can
POKE LINTMP with the logical screen line number before INPUT#'s as
OPEN RS-232 system call. Previously it was possible to receive a
carry-set status, normally indicating an error, when no error
existed after OPENing an RS-232 channel. This has been corrected
totally in-line by a modification to the code which checks for the
proper X-line hardware states.
LOAD system call. Previously the normal (a.k.a. SLOW) load
mechanism old not preserve the starting address of any LOADs, which
made the BASIC 'BOOT "file"' command form malfunction
unpredictably. This is apparent only when used with 1541 drives.
This has been corrected via a patch subroutine, which saves the
starting address of all LOADed files at SAL and SAH, the same place
the fast (a.k.a. BURST) load mechanism does.
DMA system call. Previosly the Kernel forced the I/O block into
the user's memory configuration at all times, which is no longer
necessary and, in fact, seriously limits the functionality of the
RAM expansion cartridge. This has been corrected by a ROM patch
routine, which affects all Kernel DMA system calls as well as the
BASIC FETCH, STASH, and SWAP commands. Also, previously it was
possible for an IRQ to occur between the 'arm DMA' and 'trigger
DMA' sequences, resulting in a DMA orperation with the system
configuration in context regardless of desired configuration. This
has been corrected by adding 'PHP/SEI...PLP' instructions around
the JSR to DMA RAM code at $3F0. Applications using the DMA RAM
code at $3F0 should do likewise. Finally, in this patch changes
were made to enable DMA operations to all RAM banks by correctly
using The VIC bank pointer found in the MMU RAM configuration
register ($D506, VA16=bit-6 and VA17=bit-7). Applications using the
Kernel routine at $FF50 will inherit these changes automatically.
Please note that NMI interrupts can screw-up DMA operations, as
they cannot be masked.