Bei einem dynamischen Array muß man das erste Element und nicht das Array selber übergeben. Falls du ein dynamisches Array benutzt geht es so besser:
Read(DatenBytes[0], Length(DatenBytes));
Da das statische Array als lokale Varialbe deklariert ist, belegt es Speicher auf dem Stack. Wenn man die Deklaration vor die procedure schreibt wird der Speicher im Datensegment belegt und die Begrenzung gilt nicht mehr.
Delphi-Quellcode:
type
TDatenBytes = array[0..1048576] of Byte;
var
DatenBytes: TDatenBytes;
Procedure RomEinlesen(Datei: String);
...
...