diff --git a/Firmware/Dcodes.cpp b/Firmware/Dcodes.cpp index 9a353be8..5af12e2e 100644 --- a/Firmware/Dcodes.cpp +++ b/Firmware/Dcodes.cpp @@ -246,32 +246,31 @@ void dcode_1() ### D2 - Read/Write RAM <a href="https://reprap.org/wiki/G-code#D2:_Read.2FWrite_RAM">D3: Read/Write RAM</a> This command can be used without any additional parameters. It will read the entire RAM. #### Usage - + D2 [ A | C | X ] - + #### Parameters - - `A` - Address (x0000-x1fff) - - `C` - Count (1-8192) + - `A` - Address (x0000-x21ff) + - `C` - Count (1-8704) - `X` - Data #### Notes - The hex address needs to be lowercase without the 0 before the x - - Count is decimal + - Count is decimal - The hex data needs to be lowercase - + */ void dcode_2() { - LOG("D2 - Read/Write RAM\n"); - uint16_t address = 0x0000; //default 0x0000 - uint16_t count = 0x2000; //default 0x2000 (entire ram) - if (code_seen('A')) // Address (0x0000-0x1fff) + DBG(_N("D2 - Read/Write RAM\n")); + uint16_t address = 0x200; // default to start of sram + uint16_t count = 0x2200; // entire addressable space + if (code_seen('A')) // Address (0x0000-0x21ff) address = (strchr_pointer[1] == 'x')?strtol(strchr_pointer + 2, 0, 16):(int)code_value(); - if (code_seen('C')) // Count (0x0001-0x2000) + if (code_seen('C')) // Count (0x0000-0x2200) count = (int)code_value(); - address &= 0x1fff; - if (count > 0x2000) count = 0x2000; - if ((address + count) > 0x2000) count = 0x2000 - address; + if (address > 0x2200) address = 0x2200; + if ((address + count) > 0x2200) count = 0x2200 - address; if (code_seen('X')) // Data { uint8_t data[16]; @@ -280,7 +279,7 @@ void dcode_2() { for (uint16_t i = 0; i < count; i++) *((uint8_t*)(address + i)) = data[i]; - LOG("%d bytes written to RAM at address %04x", count, address); + DBG(_N("%d bytes written to RAM at address 0x%04x\n"), count, address); } else count = 0;