loader.fs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. ( LOADER PROTOCOL JCB 09:16 11/11/10)
  2. 947 constant PORT
  3. : response0 ( -- )
  4. ETH.IP.UDP.SOURCEPORT packet@
  5. PORT
  6. d# 2 ETH.IP.SRCIP mac-inoffset mac@n
  7. net-my-ip
  8. 2over arp-lookup
  9. ( dst-port src-port dst-ip src-ip *ethaddr )
  10. udp-header
  11. d# 0 mac-pkt-,
  12. ETH.IP.UDP.LOADER.SEQNO packet@ mac-pkt-,
  13. ;
  14. : response1
  15. udp-wrapup mac-send
  16. ;
  17. : respond
  18. response0
  19. response1
  20. ;
  21. : ramread
  22. response0
  23. ETH.IP.UDP.LOADER.RAMREAD.ADDR packet@
  24. d# 128 bounds begin
  25. dup @ mac-pkt-,
  26. cell+
  27. 2dup=
  28. until
  29. 2drop
  30. response1
  31. ;
  32. : ramwrite
  33. ETH.IP.UDP.LOADER.RAMWRITE.ADDR packet@
  34. d# 64 0do
  35. ETH.IP.UDP.LOADER.RAMWRITE.DATA i cells + packet@
  36. over !
  37. cell+
  38. loop
  39. drop
  40. respond
  41. ;
  42. : reboot
  43. respond bootloader ;
  44. : flashread
  45. response0
  46. ETH.IP.UDP.LOADER.FLASHREAD.ADDR packetd@ d2/
  47. flash-reset
  48. d# 64 0do
  49. 2dup flash@
  50. mac-pkt-,
  51. d1+
  52. loop
  53. 2drop
  54. response1
  55. ;
  56. : flasherase
  57. respond flash-chiperase ;
  58. : flashdone
  59. response0
  60. ETH.IP.UDP.LOADER.FLASHREAD.ADDR packetd@ d2/
  61. flash-erased mac-pkt-,
  62. response1
  63. ;
  64. : flashwrite
  65. ETH.IP.UDP.LOADER.FLASHWRITE.ADDR packetd@ d2/
  66. d# 64 0do
  67. 2dup
  68. ETH.IP.UDP.LOADER.FLASHWRITE.DATA i cells + packet@
  69. -rot flash!
  70. d1+
  71. loop
  72. 2drop
  73. respond
  74. ;
  75. : flashsectorerase
  76. ETH.IP.UDP.LOADER.FLASHWRITE.ADDR packetd@ d2/
  77. flash-sectorerase
  78. respond
  79. ;
  80. jumptable opcodes
  81. ( 0 ) | ramread
  82. ( 1 ) | ramwrite
  83. ( 2 ) | reboot
  84. ( 3 ) | flashread
  85. ( 4 ) | flasherase
  86. ( 5 ) | flashdone
  87. ( 6 ) | flashwrite
  88. ( 7 ) | flashsectorerase
  89. : loader-handler ( -- )
  90. IP_PROTO_UDP ip-isproto if
  91. ETH.IP.UDP.DESTPORT packet@ PORT =
  92. d# 2 ETH.IP.SRCIP mac-inoffset mac@n arp-lookup 0<> and if
  93. udp-checksum? if
  94. ETH.IP.UDP.LOADER.OPCODE packet@
  95. \ s" loader opcode=" type dup hex4 cr
  96. opcodes execute
  97. then
  98. then
  99. then
  100. ;