@@ -209,6 +209,7 @@ uint32 getCommon(void);
209
209
uint32 sim_map_resource (uint32 baseaddr , uint32 size , uint32 resource_type ,
210
210
int32 (* routine )(const int32 , const int32 , const int32 ), const char * name , uint8 unmap );
211
211
212
+ static void PutBYTEasROMorRAM (register uint32 Addr , const register uint32 Value , const register uint32 makeROM );
212
213
void PutBYTEExtended (register uint32 Addr , const register uint32 Value );
213
214
uint32 GetBYTEExtended (register uint32 Addr );
214
215
void cpu_raise_interrupt (uint32 irq );
@@ -1937,6 +1938,15 @@ static void PutBYTE(register uint32 Addr, const register uint32 Value) {
1937
1938
}
1938
1939
}
1939
1940
1941
+ static void PutBYTEasROMorRAM (register uint32 Addr , const register uint32 Value , const register uint32 makeROM ) {
1942
+ Addr &= ADDRMASK ; /* registers are NOT guaranteed to be always 16-bit values */
1943
+ if ((cpu_unit .flags & UNIT_CPU_BANKED ) && (((common_low == 0 ) && (Addr < common )) || ((common_low == 1 ) && (Addr >= common ))))
1944
+ Addr |= bankSelect << MAXBANKSIZELOG2 ;
1945
+
1946
+ mmu_table [Addr >> LOG2PAGESIZE ] = makeROM ? ROM_PAGE : RAM_PAGE ;
1947
+ M [Addr ] = Value ;
1948
+ }
1949
+
1940
1950
void PutBYTEExtended (register uint32 Addr , const register uint32 Value ) {
1941
1951
MDEV m ;
1942
1952
@@ -7507,10 +7517,17 @@ t_stat sim_load(FILE *fileref, CONST char *cptr, CONST char *fnam, int flag) {
7507
7517
https://deramp.com/downloads/misc_software/hex-binary utilities for the PC/
7508
7518
*/
7509
7519
static t_stat cpu_hex_load (FILE * fileref , CONST char * cptr , CONST char * fnam , int flag ) {
7520
+ char gbuf [CBUFSIZE ];
7510
7521
char linebuf [1024 ], datastr [1024 ], * bufptr ;
7511
7522
int32 bytecnt , rectype , databyte , chksum , line = 0 , cnt = 0 ;
7523
+ uint32 makeROM = FALSE;
7512
7524
t_addr addr , org = 0 ;
7513
7525
7526
+ get_glyph (cptr , gbuf , 0 );
7527
+ if (strcmp (gbuf , "ROM" ) == 0 ) {
7528
+ makeROM = TRUE;
7529
+ }
7530
+
7514
7531
while (!feof (fileref )) {
7515
7532
if (fgets (linebuf , sizeof (linebuf ), fileref ) == NULL )
7516
7533
break ;
@@ -7548,7 +7565,7 @@ static t_stat cpu_hex_load(FILE *fileref, CONST char *cptr, CONST char *fnam, in
7548
7565
}
7549
7566
bufptr += 2 ;
7550
7567
7551
- PutBYTE (addr ++ , databyte );
7568
+ PutBYTEasROMorRAM (addr ++ , databyte , makeROM );
7552
7569
7553
7570
chksum += databyte ;
7554
7571
cnt ++ ;
@@ -7564,7 +7581,7 @@ static t_stat cpu_hex_load(FILE *fileref, CONST char *cptr, CONST char *fnam, in
7564
7581
}
7565
7582
}
7566
7583
7567
- return sim_messagef (SCPE_OK , "%d byte%s loaded at %x.\n" , PLURAL (cnt ), org );
7584
+ return sim_messagef (SCPE_OK , "%d byte%s loaded at %x%s .\n" , PLURAL (cnt ), org , ( makeROM ) ? " [ROM]" : "" );
7568
7585
}
7569
7586
7570
7587
void cpu_raise_interrupt (uint32 irq ) {
0 commit comments