From 6035a17b2becc788c0daaf440deb6cc37d364029 Mon Sep 17 00:00:00 2001 From: Leo C Date: Mon, 8 Sep 2014 19:54:08 +0200 Subject: Programmable Z180 clock, clock command --- avr/cmd_boot.c | 49 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 9 deletions(-) (limited to 'avr/cmd_boot.c') diff --git a/avr/cmd_boot.c b/avr/cmd_boot.c index 3e2dcdb..58c4f56 100644 --- a/avr/cmd_boot.c +++ b/avr/cmd_boot.c @@ -44,13 +44,13 @@ command_ret_t do_loadf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[] { (void) cmdtp; (void) flag; (void) argc; (void) argv; - if (z80_bus_state() & ZST_RUNNING) { + if (z80_bus_state() & ZST_RUNNING) { printf_P(PSTR("## Can't load while CPU is running!\n")); - return CMD_RET_FAILURE; + return CMD_RET_FAILURE; } z80_load_mem(); - + return CMD_RET_SUCCESS; } @@ -61,7 +61,7 @@ command_ret_t do_busreq_pulse(cmd_tbl_t *cmdtp, int flag, int argc, char * const (void) cmdtp; (void) flag; - if (!(z80_bus_state() & ZST_RUNNING)) { + if (!(z80_bus_state() & ZST_RUNNING)) { printf_P(PSTR("## CPU is not running!\n")); return CMD_RET_FAILURE; } @@ -82,7 +82,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) uint32_t addr; (void) cmdtp; (void) flag; - + if (argc < 2) return CMD_RET_USAGE; addr = strtoul(argv[1], NULL, 16); @@ -91,9 +91,9 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) " (Out of logical address space (0x00000-0x0ffff))\n"), addr); return CMD_RET_FAILURE; - } + } - if (z80_bus_state() & ZST_RUNNING) { + if (z80_bus_state() & ZST_RUNNING) { printf_P(PSTR("## CPU allready running!\n")); return CMD_RET_FAILURE; } @@ -103,7 +103,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) if (addr != 0) { uint8_t tmp[3]; uint_fast8_t i; - + z80_bus_cmd(Request); for (i = 0; i < 3; i++) tmp[i] = z80_read(i); @@ -118,7 +118,7 @@ command_ret_t do_go(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) z80_write(i, tmp[i]); } else z80_bus_cmd(Run); - + z80_bus_cmd(Release); return CMD_RET_SUCCESS; @@ -143,3 +143,34 @@ command_ret_t do_restart(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv return CMD_RET_SUCCESS; } + +command_ret_t do_clock(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) +{ + uint32_t freq; + + (void) cmdtp; (void) flag; + + if (argc == 2) { + freq = strtoul(argv[1], NULL, 10); + if (freq == 0) { + printf_P(PSTR("CPU clock cannot be 0\n")); + return CMD_RET_USAGE; + } + + if (freq > F_CPU / 2) { + printf_P(PSTR("Max CPU clock freq. is: %luHz\n"), F_CPU/2); + return CMD_RET_USAGE; + } + + if (z80_clock_set(freq) < 0) { + printf_P(PSTR("Setting CPU clock freq. to %luHz failed.\n"), + freq); + } + } + + printf_P(PSTR("CPU clock: %luHz\n"), z80_clock_get()); + + + return CMD_RET_SUCCESS; +} + -- cgit v1.2.3