In trying to blanket copy a block of the Spectrum's ROM using PEEK$ it turns out that in using PEEK$ the ROM isn't actually available to be copied.

This was the code:

; system font position @ 15616 / 0x3D00
%b=%15616
; using string peek because it can read variable length
f$= PEEK$ (%b,768)
; poke the contents into a new location
POKE 64000,f$
; this should have printed the '!' character
PRINT PEEK 64008

This doesn't work because when you use PEEK$ a different ROM is paged in and the memory map changes. So you’ll never be able to do it like this. Indeed this is true for all new NextBASIC routines.