Directly to answer your question:
- yes, if the RAM copy is substituted after the machine has started up;
- otherwise, not reliably, as it's likely the first five bytes have been altered.
With reference to The complete Timex TS1000/Sinclair ZX81 ROM disassembly notice the 'skip constants' routine starting at the bottom of page 87 of the PDF, page 52 of the real book, in particular these lines at the top of the next page:
LD DE,+0000 ; The dummy address.
CALL 19FE,STK-CONST ; Perform imaginary stacking of an
; expanded constant.
The STK-CONST
routine is at the top of page 87/52 but you don't need to read most of it, just the first few words of the description from a page prior: "This subroutine places on the calculator stack..." and its restatement that goes with the two lines at the bottom of that page from 19FC
:
LD H, D ; This subroutine performs the
LD L, E ; manipulatory operation of adding a
; 'last value' to the calculator stack;
; hence HL is set to point to one past the
; present 'last value' and hence point to
; the result.
So, ignoring the rest of the code:
- DE points to the location of the calculator stack at entry of
STK-CONST
;
- this routine writes to that stack; and
- the skip constants routine provides a dummy value of
DE=0
in order to negate that behaviour.
So: If you have RAM rather than ROM at address 0
then it'll actually be overwritten with five bytes, representing one of the ZX81's format of floating-point numbers.
Given that a Z80 always starts reading instructions from address 0
after reset, that'll cause the machine no longer to start up correctly.
Sadly, 'skip constants' isn't especially obscure — it's used every time the machine parses a BASIC line number.
Disclaimer: I learnt of this flaw through empirical debugging — trapping for writes into the ROM area and then working backwards. I considered the discovery of one such flaw sufficient to answer the question. I am not aware whether this is the only obstacle.