From 6f86ce7057dd7cd1b491e8f09501258822d2ea74 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 23 May 2017 17:06:09 +0200 Subject: Import j1demo --- j1demo/firmware/loader.fs | 114 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 j1demo/firmware/loader.fs (limited to 'j1demo/firmware/loader.fs') diff --git a/j1demo/firmware/loader.fs b/j1demo/firmware/loader.fs new file mode 100644 index 0000000..d4ae725 --- /dev/null +++ b/j1demo/firmware/loader.fs @@ -0,0 +1,114 @@ +( LOADER PROTOCOL JCB 09:16 11/11/10) + +947 constant PORT + +: response0 ( -- ) + ETH.IP.UDP.SOURCEPORT packet@ + PORT + d# 2 ETH.IP.SRCIP mac-inoffset mac@n + net-my-ip + 2over arp-lookup + ( dst-port src-port dst-ip src-ip *ethaddr ) + udp-header + d# 0 mac-pkt-, + ETH.IP.UDP.LOADER.SEQNO packet@ mac-pkt-, +; + +: response1 + udp-wrapup mac-send +; + +: respond + response0 + response1 +; + +: ramread + response0 + ETH.IP.UDP.LOADER.RAMREAD.ADDR packet@ + d# 128 bounds begin + dup @ mac-pkt-, + cell+ + 2dup= + until + 2drop + response1 +; + +: ramwrite + ETH.IP.UDP.LOADER.RAMWRITE.ADDR packet@ + d# 64 0do + ETH.IP.UDP.LOADER.RAMWRITE.DATA i cells + packet@ + over ! + cell+ + loop + drop + respond +; + +: reboot + respond bootloader ; + +: flashread + response0 + ETH.IP.UDP.LOADER.FLASHREAD.ADDR packetd@ d2/ + flash-reset + d# 64 0do + 2dup flash@ + mac-pkt-, + d1+ + loop + 2drop + response1 +; + +: flasherase + respond flash-chiperase ; + +: flashdone + response0 + ETH.IP.UDP.LOADER.FLASHREAD.ADDR packetd@ d2/ + flash-erased mac-pkt-, + response1 +; + +: flashwrite + ETH.IP.UDP.LOADER.FLASHWRITE.ADDR packetd@ d2/ + d# 64 0do + 2dup + ETH.IP.UDP.LOADER.FLASHWRITE.DATA i cells + packet@ + -rot flash! + d1+ + loop + 2drop + respond +; + +: flashsectorerase + ETH.IP.UDP.LOADER.FLASHWRITE.ADDR packetd@ d2/ + flash-sectorerase + respond +; + +jumptable opcodes +( 0 ) | ramread +( 1 ) | ramwrite +( 2 ) | reboot +( 3 ) | flashread +( 4 ) | flasherase +( 5 ) | flashdone +( 6 ) | flashwrite +( 7 ) | flashsectorerase + +: loader-handler ( -- ) + IP_PROTO_UDP ip-isproto if + ETH.IP.UDP.DESTPORT packet@ PORT = + d# 2 ETH.IP.SRCIP mac-inoffset mac@n arp-lookup 0<> and if + udp-checksum? if + ETH.IP.UDP.LOADER.OPCODE packet@ + \ s" loader opcode=" type dup hex4 cr + opcodes execute + then + then + then +; -- cgit v1.2.3