In the past 30 years, more solution was born to increase the speed of the ZX81.
The hardware-ideas are Well-documented: Kevin Baker's clock doubler (which was then improved by Wilf Rigter )
or even Wilf's "Why Wait" article, which promises to increase the SLOW mode program speed by 10%.
But what about the ROM-patches?
Full description of the ecellent SG81 can be found on Geoff Wermouth's website.
And where's the rest? I found nowhere. (for example what Siggi wrote "for/next", "gosub/return")
So it is possible that this little patch is a well-known mod, but nowhere described:
Code: Select all
; ------------------------------------
; THE 'NON MASKABLE INTERRUPT' ROUTINE
; ------------------------------------
;
; ( It takes 29 clock cycles while incrementing towards zero - it was 32TS).
;; NMI
L0066:
EX AF,AF' ; (4) switch in the NMI's copy of the
; accumulator.
INC A ; (4) increment.
;
; JP M,L006D (10) was removed for faster NMI-service: the user application gets +3TS/NMI
;
JR Z,L006C ; (12) forward to NMI-CONT
; when line count has incremented to zero.
;
;; NMI-RET (7!!!) else
;
EX AF,AF' ; (4) switch out the incremented line counter
; or test result $80
RET ; (10) return to User application for a while.
; ---
; This branch is taken when the 55 (or 31) lines have been drawn.
;; NMI-CONT (its address was L006F)
L006C:
EX AF,AF' ; (4) restore the main accumulator.
PUSH AF ; (11) * Save Main Registers
PUSH BC ; (11) **
PUSH DE ; (11) ***
PUSH HL ; (11) ****
; the next set-up procedure is only really applicable when the top set of
; blank lines have been generated.
LD HL,($400C) ; (16) fetch start of Display File from D_FILE
; points to the HALT at beginning.
SET 7,H ; (8) point to upper 32K 'echo display file'
HALT ; (1) HALT synchronizes with NMI.
; Used with special hardware connected to the
; Z80 HALT and WAIT lines to take 1 clock cycle.
OUT ($FD),A ; (11) Stop the NMI generator.
JP IX_to_PC ; (10) Delay because of the removed 'JP M,...'
IX_to_PC
JP (IX) ; (8) forward to L0281 (after top) or L028F
Zsolt