ClearAll[memory, MemoryGet, MemorySet, MemorySubtract] memory = {15, 17, -1, 17, -1, -1, 16, 1, -1, 16, 3, -1, 15, 15, 0, 0, -1, 72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33, 10, 0}; MemoryGet[addr_] := memory[[addr + 1]] MemorySet[addr_, value_] := memory[[addr + 1]] = value MemorySubtract[addr1_, addr2_] := MemorySet[addr1, MemoryGet[addr1] - MemoryGet[addr2]] p = 0; While[p >= 0, a = MemoryGet[p]; b = MemoryGet[p + 1]; c = MemoryGet[p + 2]; If[b == -1, Print[FromCharacterCode[MemoryGet[a]]] , MemorySubtract[b, a]; If[MemoryGet[b] < 1, p = MemoryGet[p + 2]; Continue[] ] ]; p += 3; ]