MegaProcessor

Hex Artifact Content
Login

Artifact b71f8a7265c8d867a7b73d40268c8890577ac0bb:


0000: 2d 2d 0a 2d 2d 20 55 73 61 67 65 3a 20 72 65 71  --.-- Usage: req
0010: 75 69 72 65 28 27 74 68 69 73 66 69 6c 65 27 29  uire('thisfile')
0020: 3b 0a 2d 2d 0a 0a 6c 6f 63 61 6c 20 69 68 65 78  ;.--..local ihex
0030: 5f 61 64 64 72 65 73 73 20 3d 20 30 78 30 30 30  _address = 0x000
0040: 30 3b 0a 0a 66 75 6e 63 74 69 6f 6e 20 69 68 65  0;..function ihe
0050: 78 5f 72 65 73 65 74 28 29 0a 09 69 68 65 78 5f  x_reset()..ihex_
0060: 61 64 64 72 65 73 73 20 3d 20 30 78 30 30 30 30  address = 0x0000
0070: 3b 0a 65 6e 64 0a 0a 66 75 6e 63 74 69 6f 6e 20  ;.end..function 
0080: 69 68 65 78 5f 73 65 74 28 20 76 61 6c 75 65 20  ihex_set( value 
0090: 29 0a 20 20 20 20 69 68 65 78 5f 61 64 64 72 65  ).    ihex_addre
00a0: 73 73 20 3d 20 76 61 6c 75 65 3b 0a 65 6e 64 0a  ss = value;.end.
00b0: 0a 66 75 6e 63 74 69 6f 6e 20 74 61 62 6c 65 2e  .function table.
00c0: 62 79 74 65 28 74 2c 69 29 0a 20 20 20 20 72 65  byte(t,i).    re
00d0: 74 75 72 6e 28 20 74 5b 69 5d 20 29 3b 0a 65 6e  turn( t[i] );.en
00e0: 64 0a 0a 66 75 6e 63 74 69 6f 6e 20 74 61 62 6c  d..function tabl
00f0: 65 2e 6c 65 6e 28 74 29 0a 20 20 20 20 72 65 74  e.len(t).    ret
0100: 75 72 6e 28 20 23 74 20 29 3b 0a 65 6e 64 0a 2d  urn( #t );.end.-
0110: 2d 0a 2d 2d 20 49 6e 70 75 74 20 3a 20 73 74 72  -.-- Input : str
0120: 69 6e 67 20 6f 72 20 61 6e 20 61 72 72 61 79 20  ing or an array 
0130: 6f 66 20 62 79 74 65 2d 76 61 6c 75 65 73 20 61  of byte-values a
0140: 6e 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 6c  nd an optional l
0150: 65 6e 67 74 68 0a 2d 2d 20 49 66 20 74 68 65 20  ength.-- If the 
0160: 66 69 72 73 74 20 70 61 72 61 6d 65 74 65 72 20  first parameter 
0170: 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e  is a table, then
0180: 20 69 74 20 67 65 74 73 20 32 20 61 64 64 69 74   it gets 2 addit
0190: 69 6f 6e 61 6c 20 6d 65 74 68 6f 64 2d 66 69 65  ional method-fie
01a0: 6c 64 73 0a 2d 2d 20 74 68 61 74 20 74 79 70 65  lds.-- that type
01b0: 20 27 73 74 72 69 6e 67 27 20 61 6c 72 65 61 64   'string' alread
01c0: 79 20 68 61 73 20 62 79 20 69 74 73 65 6c 66 2e  y has by itself.
01d0: 0a 2d 2d 0a 2d 2d 20 4f 75 74 70 75 74 73 20 61  .--.-- Outputs a
01e0: 20 69 68 65 78 2d 66 6f 72 6d 61 74 20 72 65 63   ihex-format rec
01f0: 6f 72 64 20 63 6f 6e 74 61 69 6e 69 6e 67 20 27  ord containing '
0200: 6c 65 6e 27 20 62 79 74 65 73 2c 0a 2d 2d 20 73  len' bytes,.-- s
0210: 74 61 72 74 69 6e 67 20 66 72 6f 6d 20 62 79 74  tarting from byt
0220: 65 20 27 73 74 61 72 74 27 20 28 64 65 66 61 75  e 'start' (defau
0230: 6c 74 3a 20 66 69 72 73 74 29 0a 2d 2d 20 61 6e  lt: first).-- an
0240: 64 20 75 70 64 61 74 65 73 20 67 6c 6f 62 61 6c  d updates global
0250: 20 69 68 65 78 5f 61 64 64 72 65 73 73 0a 2d 2d   ihex_address.--
0260: 0a 2d 2d 0a 66 75 6e 63 74 69 6f 6e 20 69 68 65  .--.function ihe
0270: 78 5f 64 61 74 61 72 65 63 6f 72 64 28 62 75 66  x_datarecord(buf
0280: 2c 6c 65 6e 2c 73 74 61 72 74 29 0a 20 20 20 20  ,len,start).    
0290: 73 74 61 72 74 20 3d 20 28 73 74 61 72 74 20 6f  start = (start o
02a0: 72 20 31 29 20 2d 20 31 3b 0a 20 20 20 20 69 66  r 1) - 1;.    if
02b0: 28 20 74 79 70 65 28 62 75 66 29 20 3d 3d 20 27  ( type(buf) == '
02c0: 74 61 62 6c 65 27 20 29 20 74 68 65 6e 20 2d 2d  table' ) then --
02d0: 20 41 64 64 20 27 73 74 72 69 6e 67 27 20 6d 65   Add 'string' me
02e0: 74 68 6f 64 73 20 74 68 61 74 20 27 74 61 62 6c  thods that 'tabl
02f0: 65 27 20 6d 69 73 73 65 73 2e 0a 20 20 20 20 20  e' misses..     
0300: 20 20 20 62 75 66 2e 62 79 74 65 20 3d 20 74 61     buf.byte = ta
0310: 62 6c 65 2e 62 79 74 65 3b 20 62 75 66 2e 6c 65  ble.byte; buf.le
0320: 6e 20 3d 20 74 61 62 6c 65 2e 6c 65 6e 3b 0a 20  n = table.len;. 
0330: 20 20 20 65 6e 64 0a 0a 09 6c 6f 63 61 6c 20 6f     end...local o
0340: 75 72 4c 65 6e 20 3d 20 6c 65 6e 20 6f 72 20 62  urLen = len or b
0350: 75 66 3a 6c 65 6e 28 29 3b 0a 09 6c 6f 63 61 6c  uf:len();..local
0360: 20 6f 75 72 53 75 6d 20 3d 20 6f 75 72 4c 65 6e   ourSum = ourLen
0370: 3b 0a 0a 09 69 6f 2e 77 72 69 74 65 28 20 73 74  ;...io.write( st
0380: 72 69 6e 67 2e 66 6f 72 6d 61 74 28 27 3a 25 30  ring.format(':%0
0390: 32 58 25 30 34 58 30 30 27 2c 6f 75 72 4c 65 6e  2X%04X00',ourLen
03a0: 2c 69 68 65 78 5f 61 64 64 72 65 73 73 29 20 29  ,ihex_address) )
03b0: 3b 0a 0a 09 66 6f 72 20 69 3d 31 2c 6f 75 72 4c  ;...for i=1,ourL
03c0: 65 6e 20 64 6f 0a 20 20 20 20 20 20 20 20 6c 6f  en do.        lo
03d0: 63 61 6c 20 6f 75 72 42 79 74 65 20 3d 20 62 75  cal ourByte = bu
03e0: 66 3a 62 79 74 65 28 69 2b 73 74 61 72 74 29 20  f:byte(i+start) 
03f0: 3b 0a 20 20 20 20 20 20 20 20 6f 75 72 53 75 6d  ;.        ourSum
0400: 20 3d 20 6f 75 72 53 75 6d 20 2b 20 6f 75 72 42   = ourSum + ourB
0410: 79 74 65 3b 0a 20 20 20 20 20 20 20 20 69 6f 2e  yte;.        io.
0420: 77 72 69 74 65 28 20 73 74 72 69 6e 67 2e 66 6f  write( string.fo
0430: 72 6d 61 74 28 27 25 30 32 58 27 2c 20 6f 75 72  rmat('%02X', our
0440: 42 79 74 65 20 29 20 29 3b 0a 20 20 20 20 65 6e  Byte ) );.    en
0450: 64 0a 0a 09 6f 75 72 53 75 6d 20 3d 20 6f 75 72  d...ourSum = our
0460: 53 75 6d 20 2b 20 62 69 74 33 32 2e 62 61 6e 64  Sum + bit32.band
0470: 28 69 68 65 78 5f 61 64 64 72 65 73 73 2c 30 78  (ihex_address,0x
0480: 66 66 29 3b 0a 09 6f 75 72 53 75 6d 20 3d 20 6f  ff);..ourSum = o
0490: 75 72 53 75 6d 20 2b 20 62 69 74 33 32 2e 62 61  urSum + bit32.ba
04a0: 6e 64 28 20 62 69 74 33 32 2e 72 73 68 69 66 74  nd( bit32.rshift
04b0: 28 69 68 65 78 5f 61 64 64 72 65 73 73 2c 38 29  (ihex_address,8)
04c0: 2c 30 78 66 66 29 3b 0a 0a 09 6f 75 72 53 75 6d  ,0xff);...ourSum
04d0: 20 3d 20 62 69 74 33 32 2e 62 6e 6f 74 28 6f 75   = bit32.bnot(ou
04e0: 72 53 75 6d 29 20 2b 20 31 3b 0a 09 6f 75 72 53  rSum) + 1;..ourS
04f0: 75 6d 20 3d 20 62 69 74 33 32 2e 62 61 6e 64 28  um = bit32.band(
0500: 6f 75 72 53 75 6d 2c 30 78 66 66 29 3b 0a 0a 09  ourSum,0xff);...
0510: 69 6f 2e 77 72 69 74 65 28 20 73 74 72 69 6e 67  io.write( string
0520: 2e 66 6f 72 6d 61 74 28 27 25 30 32 58 27 2c 20  .format('%02X', 
0530: 6f 75 72 53 75 6d 20 29 20 29 3b 0a 09 69 6f 2e  ourSum ) );..io.
0540: 77 72 69 74 65 28 20 27 5c 6e 27 20 29 3b 0a 0a  write( '\n' );..
0550: 09 69 68 65 78 5f 61 64 64 72 65 73 73 20 3d 20  .ihex_address = 
0560: 69 68 65 78 5f 61 64 64 72 65 73 73 20 2b 20 6f  ihex_address + o
0570: 75 72 4c 65 6e 3b 0a 65 6e 64 0a 0a 66 75 6e 63  urLen;.end..func
0580: 74 69 6f 6e 20 69 68 65 78 5f 65 6e 64 72 65 63  tion ihex_endrec
0590: 6f 72 64 28 29 0a 09 69 6f 2e 77 72 69 74 65 28  ord()..io.write(
05a0: 27 3a 30 30 30 30 30 30 30 31 46 46 5c 6e 27 29  ':00000001FF\n')
05b0: 3b 0a 65 6e 64 0a 0a 2d 2d 20 45 4f 46 20 2d 2d  ;.end..-- EOF --
05c0: 0a                                               .