]> cloudbase.mooo.com Git - z180-stamp.git/commitdiff
switch fifos conin,conout hexrel-6.2
authorLeo C <erbl259-lmu@yahoo.de>
Mon, 1 Jun 2015 21:29:55 +0000 (23:29 +0200)
committerLeo C <erbl259-lmu@yahoo.de>
Mon, 1 Jun 2015 21:29:55 +0000 (23:29 +0200)
avr/cmd_loadcpm3.c
avr/cmd_mem.c
avr/command_tbl.c
avr/debug.c
avr/z180-serv.c
include/z80-if.h
z180/conbuf-a.180
z180/config.inc
z180/ddtz.180
z180/init.180

index fd685b2e48c3ebb45b4c0ef11011a81b4a016fc2..3f1bbe10e9a0868f3a4440251fc36231588c7009 100644 (file)
@@ -55,6 +55,7 @@ int load(FIL *File, uint16_t addr, uint8_t len)
        return 0;
 }
 
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
 
 command_ret_t do_loadcpm3(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
index 53b18426fbcc1400718ab88f1b2581ab43cf3ed0..101b91210d84e1f0b2ae13a263ec7b1f86a78fa2 100644 (file)
@@ -152,8 +152,8 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[])
                        if (incrflag)
                                addr += nbytes ? -1 : 1;
                        nbytes = 1;
-               }
-               else {
+
+               else {
                        char *endp;
                        data = strtoul(console_buffer, &endp, 16);
                        nbytes = endp - console_buffer;
index eb0d84f6af1510017757d52a433d7fadd9c29016..a9cc2bd64ae81b559a86f6411a2ce5acc23e2de0 100644 (file)
@@ -25,6 +25,8 @@ extern command_ret_t do_go(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_restart(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_console(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_dump_mem(cmd_tbl_t *, int, int, char * const []);
+extern command_ret_t do_mem_mm_avr(cmd_tbl_t *, int, int, char * const []);
+extern command_ret_t do_mem_nm_avr(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_eep_cp(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_busreq_pulse(cmd_tbl_t *, int, int, char * const []);
 extern command_ret_t do_date(cmd_tbl_t *, int, int, char * const []);
@@ -75,6 +77,16 @@ CMD_TBL_ITEM(
        "EEPROM copy",
        "source target count"
 ),
+CMD_TBL_ITEM(
+       !mm,    2,      1,      do_mem_mm_avr,
+       "avr memory modify (auto-incrementing address)",
+       "address"
+),
+CMD_TBL_ITEM(
+       !nm,    2,      1,      do_mem_nm_avr,
+       "avr memory modify (constant address)",
+       "address"
+),
 #endif
 CMD_TBL_ITEM(
        mstep,  2,      1,      do_busreq_pulse,
index d4ae1f4aa7c09c68835f0a80d5597bc00c933449..f3632c288018c14ca31476ae4263f5393f5e8d75 100644 (file)
@@ -11,6 +11,7 @@
 #include <avr/eeprom.h>
 
 #include "command.h"
+#include "cli_readline.h"
 #include "print-utils.h"
 #include "debug.h"
 
@@ -39,7 +40,7 @@ void dump_heap(void)
  */
 command_ret_t do_dump_mem(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       void (*readhow)(uint8_t *buf, uint32_t addr, uint8_t count);
+       void (*readwhat)(uint8_t *buf, uint32_t addr, uint8_t count);
 
        (void) cmdtp; (void) flag;
 
@@ -51,13 +52,13 @@ command_ret_t do_dump_mem(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
 
        switch (argv[0][3]) {
        case 'r':
-               readhow = ram_read_buf;
+               readwhat = ram_read_buf;
                break;
        case 'e':
-               readhow = eeprom_read_buf;
+               readwhat = eeprom_read_buf;
                break;
        case 'f':
-               readhow = flash_read_buf;
+               readwhat = flash_read_buf;
                break;
        default:
                return CMD_RET_USAGE;
@@ -71,7 +72,7 @@ command_ret_t do_dump_mem(cmd_tbl_t *cmdtp, int flag, int argc, char * const arg
                length = (uint16_t) strtoul(argv[2], NULL, 16);
 
        /* Print the lines. */
-       dump_mem(addr, addr, length, readhow, NULL);
+       dump_mem(addr, addr, length, readwhat, NULL);
 
        return CMD_RET_SUCCESS;
 }
@@ -127,6 +128,83 @@ command_ret_t do_eep_cp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[
 }
 
 
+/* Modify memory.
+ *
+ * Syntax:
+ *     !mm {addr}
+ *     !nm {addr}
+ */
+
+ static uint8_t        *mm_last_addr;
+
+static command_ret_t
+mod_mem_avr(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[])
+{
+       uint8_t *addr;
+       uint8_t data;
+       int nbytes;
+
+       (void) cmdtp;
+
+       if (argc != 2)
+               return CMD_RET_USAGE;
+
+       /* We use the last specified parameters, unless new ones are
+        * entered.
+        */
+       addr = mm_last_addr;
+
+       if ((flag & CMD_FLAG_REPEAT) == 0) {
+               /* New command specified.
+                */
+
+               /* Address is specified since argc > 1
+               */
+               addr = (uint8_t *) (size_t) strtoul(argv[1], NULL, 16);
+       }
+
+       /* Print the address, followed by value.  Then accept input for
+        * the next value.  A non-converted value exits.
+        */
+       do {
+               data = *addr;
+               printf_P(PSTR("%04x: %02x"), addr, data);
+
+               nbytes = cli_readline(PSTR(" ? "));
+               if (nbytes == 0 || (nbytes == 1 && console_buffer[0] == '-')) {
+                       /* <CR> pressed as only input, don't modify current
+                        * location and move to next. "-" pressed will go back.
+                        */
+                       if (incrflag)
+                               addr += nbytes ? -1 : 1;
+                       nbytes = 1;
+
+               } else {
+                       char *endp;
+                       data = strtoul(console_buffer, &endp, 16);
+                       nbytes = endp - console_buffer;
+                       if (nbytes) {
+                               *addr = data;
+                               if (incrflag)
+                                       addr++;
+                       }
+               }
+       } while (nbytes);
+
+       mm_last_addr = addr;
+       return CMD_RET_SUCCESS;
+}
+
+
+command_ret_t do_mem_mm_avr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       return mod_mem_avr (cmdtp, 1, flag, argc, argv);
+}
+command_ret_t do_mem_nm_avr(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       return mod_mem_avr (cmdtp, 0, flag, argc, argv);
+}
+
 /*------------------------------------------------------------------------------*/
 
 #if 1
index af1d8e06bc7b7d5c462f3212e3eec227ac401e35..7193495d513e4b9f42a743d108e4291b34a21e46 100644 (file)
@@ -491,6 +491,9 @@ int msg_handling(int state)
                pending = (Stat & S_MSG_PENDING) != 0;
                Stat &= ~S_MSG_PENDING;
        }
+/*
+ * TODO: if pending but no message chr --> special condition. ie init,...
+ */
 
        if (pending) {
                switch (state) {
index 58790bd44bb719cd28a09545af275e8e7d51a7b3..676d37d9b23e9121d8e4b623cb02f0b4d8c3486c 100644 (file)
@@ -43,7 +43,7 @@ void z80_read_block (uint8_t *dest, uint32_t src, size_t length);
 
 typedef enum fifo_t {
                fifo_msgin, fifo_msgout,
-               fifo_conout, fifo_conin,
+               fifo_conin, fifo_conout,
                NUM_FIFOS
        } fifo_t;
 
index e86b8b25ea26c374a0ed3bfbca515c2399dc4303..0a351954225ef17d1c36d392799cd80a94150e97 100644 (file)
@@ -19,8 +19,8 @@
        dseg\r
 \r
 \r
-       mkbuf   co.fifo_id, co.fifo, co.fifo_len\r
        mkbuf   ci.fifo_id, ci.fifo, ci.fifo_len\r
+       mkbuf   co.fifo_id, co.fifo, co.fifo_len\r
 \r
 \r
 ;--------------------------------------------------------------\r
index 7b6d7ac11e4e7f308823a704b8a0c930a44e5981..2a8a842d0c4067f00f38425fab6c66601b3b9490 100644 (file)
@@ -151,7 +151,7 @@ AVRINT6             equ     5Fh
 ; Definition of (logical) top 2 memory pages\r
 \r
 sysram_start   equ     0FE00h\r
-stacksize      equ     80\r
+bs$stack$size  equ     80\r
 \r
 isvsw_loc      equ     0FEE0h\r
 \r
@@ -198,3 +198,10 @@ inidate    macro
        dseg\r
        ds      ??ps.len\r
        endm\r
+\r
+;-----------------------------------------------------\r
+\r
+b0call macro   address\r
+       call    _b0call\r
+       dw      address\r
+       endm\r
index aa4e97792052596e1b0df32328b4b7b77dac341b..4411549c2fc4577c0f9d48e2b78338b99dd69f83 100644 (file)
@@ -958,11 +958,11 @@ do_op_mod:
        jr l0b58h\r
 \r
 ; divide x/y\r
-;     x: hl\r
-;     y: de\r
+;     hl: x\r
+;     de: y\r
 ;   return:\r
-;     x/y: hl\r
-;     rem: de\r
+;     hl: q  (x/y)\r
+;     de: r  (x%y)\r
 \r
 DIV_HL_DE:\r
        push    bc\r
@@ -971,6 +971,11 @@ DIV_HL_DE:
        ld      c,l\r
        ld      hl,0            ;r = 0\r
        ld      a,16            ;count\r
+\r
+;  de: x   (x shifted out, q shifted in)\r
+;  bc: y\r
+;  hl: r   (initially 0)\r
+\r
 l0b89h:\r
        ex      de,hl           ;x\r
        add     hl,hl           ;x <<= 1\r
@@ -986,7 +991,7 @@ l0b89h:
 div_no_restore:\r
        dec     a\r
        jr      nz,l0b89h\r
-       ex      de,hl\r
+       ex      de,hl           ;hl: q   de: r\r
        pop     bc\r
        ret\r
 \r
@@ -6240,9 +6245,9 @@ vartabe:
 \r
 ;------------------------------------------\r
 \r
-       .phase  sysram_start+stacksize\r
+       .phase  sysram_start+bs$stack$size\r
 $stack:\r
-$stcka equ     $ - stacksize\r
+$stcka equ     $ - bs$stack$size\r
 \r
 curphse        defl    $\r
        .dephase\r
index 11f45ec5525bb1feb1d3b3367d55f187af2ec3fe..b0b4b21f681a8898fe84ae737304a326fda91f4a 100644 (file)
@@ -361,9 +361,9 @@ buffers:
        db      1\r
        dw      mrx.fifo\r
        db      2\r
-       dw      co.fifo\r
-       db      3\r
        dw      ci.fifo\r
+       db      3\r
+       dw      co.fifo\r
 buftablen equ  ($ - buffers)/3\r
 \r
 inimsg:\r