summaryrefslogtreecommitdiff
path: root/avr/cmd_boot.c
diff options
context:
space:
mode:
authorLeo C2014-09-08 19:54:08 +0200
committerLeo C2014-09-08 19:54:08 +0200
commit6035a17b2becc788c0daaf440deb6cc37d364029 (patch)
tree79735e7b353f4848bcfbd4ee2cb4f902dae474ec /avr/cmd_boot.c
parent9e689a832629fd09ad60161ddacfe7b05bb00dc5 (diff)
downloadz180-stamp-6035a17b2becc788c0daaf440deb6cc37d364029.zip
Programmable Z180 clock, clock commandhexrel-2
Diffstat (limited to 'avr/cmd_boot.c')
-rw-r--r--avr/cmd_boot.c49
1 files changed, 40 insertions, 9 deletions
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;
+}
+