summaryrefslogtreecommitdiff
path: root/lc_examples/memory.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lc_examples/memory.lua')
-rw-r--r--lc_examples/memory.lua81
1 files changed, 81 insertions, 0 deletions
diff --git a/lc_examples/memory.lua b/lc_examples/memory.lua
new file mode 100644
index 0000000..cf38121
--- /dev/null
+++ b/lc_examples/memory.lua
@@ -0,0 +1,81 @@
+--Digilines Memory Example
+
+--Connect an EEPROM or SRAM chip on channel "memory"
+--Enter "help" in the terminal for a command list
+
+local function runcmd(command)
+ if command ~= "" then
+ print(" "..command,true)
+ print()
+ end
+ if string.sub(command,1,4) == "read" then
+ local address = string.sub(command,6,7)
+ if string.sub(address,2,2) == " " then address = string.sub(address,1,1) end
+ address = tonumber(address)
+ if (not address) or address > 31 or address < 0 or math.floor(address) ~= address then
+ print("Invalid address - address must be an integer from 0 to 31")
+ else
+ digiline_send(mem.channel,{command = "read",address = address})
+ mem.readsuccess = false
+ interrupt(1,"readtimeout")
+ return --Suppress printing a new prompt
+ end
+ elseif string.sub(command,1,5) == "write" then
+ local address = string.sub(command,7,8)
+ local data = string.sub(command,10,-1)
+ if string.sub(address,2,2) == " " then
+ address = string.sub(command,7,7)
+ data = string.sub(command,9,-1)
+ end
+ address = tonumber(address)
+ if (not address) or address > 31 or address <0 or math.floor(address) ~= address then
+ print("Invalid address - address must be an integer from 0 to 31")
+ elseif data == "" then
+ print("No data specified")
+ else
+ print(string.format("Wrote to address %d",address))
+ digiline_send(mem.channel,{command = "write",address = address,data = data})
+ end
+ elseif string.sub(command,1,7) == "channel" then
+ local channel = string.sub(command,9,-1)
+ if channel and channel ~= "" then
+ mem.channel = channel
+ print("Channel changed")
+ else
+ print("No channel specified")
+ end
+ elseif command == "clear" then
+ clearterm()
+ print(">")
+ return --Suppress printing a new prompt - it was done already to omit the blank line
+ elseif command == "help" then
+ print("Available commands:")
+ print("channel <channel>: Changes the digilines channel the memory device is attached to, default is \"memory\"")
+ print("clear: Clears the screen")
+ print("read <address>: Reads from the specified address and displays the received data")
+ print("write <address> <data>: Writes the specified data to the specified address")
+ print("help: Shows this help message")
+ elseif command == "" then
+ --Do nothing
+ else
+ print("Unknown command - use \"help\" to see a list of valid commands.")
+ end
+ print()
+ print(">")
+end
+
+if event.type == "program" then
+ mem.channel = "memory"
+ runcmd("clear")
+elseif event.iid == "readtimeout" and not mem.readsuccess then
+ print("No response received. Is there a memory device connected on the channel \""..mem.channel.."\"?")
+ print()
+ print(">")
+elseif event.channel == mem.channel then
+ mem.readsuccess = true
+ print(event.msg)
+ print()
+ print(">")
+elseif event.type == "terminal" then
+ runcmd(event.text)
+end