ROM is much simpler than RAM since its contents never need to be altered. It has an MAR and an MBR, although its MBR is always wired up to be the output of the ROM, never its input. In fact, a ROM is a combinational circuit. Input the address of the word that needs to be read, and after a delay the output is contents of that word.
Fig. 5.13.1 shows a 4-word 3-bit ROM. The MAR is 2-bits, so there are four word-select wires coming out of the decoder, just as in the RAM. But the output wires are hooked directly to these word select wires, instead of coming from flip-flops. Wherever there is a black dot, think of this as a solder point that connects the wires, although ROM as actually manufactured using small fuses just like PLAs.
Here are the values that are stored in this ROM by the pattern of solder points:
binary address decimal address value stored -------------- --------------- ------------ 00 0 101 01 1 110 10 2 001 11 3 111
Notice that the word select wire for 00 is soldered to wires R2 and R0, causing 1 to be placed on those wires if 00 is the address. All other word select wires would be 0, so the input to the two OR gates would be one 1 and all other 0s. The OR gate inputs for R1 would be all 0s so the R1 output would be 0; thus the value 101 appears on the output wires.
ROMs are manufactured as PLAs which are programmed by the factory, which burns in the desired pattern of 1s and 0s. Other types of ROMs are called programmable because the user can burn their own pattern of values into ROMs "in the field" in order to make custom ROMs. These are dubbed PROMs (Programmable ROMs). Yet another type of ROM is the EPROM, or Erasable Programmable ROM which can be "cleared" by exposing the chip to strong ultraviolet light and then reprogrammed. The process of storing a set of values in a ROM has come to be called programming a ROM although it bears no resemblance to programming except for the fact that many ROMs do store programs.