void thread_movie_tick() { if (get_new_program_flag()) { reset_new_program_flag(); reset_program(); if (auto_mode) { scene_program_down(); auto_mode = 0; return; } } if (auto_mode) { if (auto_delay > 0) { auto_delay--; return; } if (program_next()) { set_led_bright_from_frame(frame_buf); auto_delay = (uint32_t)load_delay_from_frame(frame_buf) * scene_speed_get_mult(); } else { auto_program_index++; if (auto_program_index >= count_bin_files) auto_program_index = 0; auto_reset_program(); } } else { if (delay > 0) { delay--; return; } if (program_next()) { set_led_bright_from_frame(frame_buf); delay = (uint32_t)load_delay_from_frame(frame_buf) * scene_speed_get_mult(); } else { reset_program(); } } }
int main(int argc, char* argv[]) { if (argc != 2) { printf("Bad argument! Just give me a filename of a compiled assembly program.\n"); return -EINVAL; } enable_udiv = 1; FILE* program; if (!(program = fopen(argv[1], "r"))) { printf("Bad argument! File not found.\n"); return -EINVAL; } build_symbol_table(argv[1]); pc = 0x3000; running = 1; read_program(program); int ch; initialize(); while(ch != KEY_F(1)) { ch = getch(); switch (ch) { case KEY_F(2): reset_program(program); break; case KEY_F(3): dbgwin_state = 1; break; case KEY_F(4): break; case KEY_F(5): step_forward(); break; case KEY_F(6): run_program(); break; case KEY_F(7): memwin_state = (memwin_state == 2 ? 0 : 2); mem_cursor = mem_index; break; case KEY_F(8): dbgwin_state = 2; break; case KEY_UP: if (memwin_state == 2) mem_cursor--; break; case KEY_DOWN: if (memwin_state == 2) mem_cursor++; break; case KEY_NPAGE: if (memwin_state == 2) mem_cursor += (LINES-DEBUGWIN_HEIGHT); break; case KEY_PPAGE: if (memwin_state == 2) mem_cursor -= (LINES-DEBUGWIN_HEIGHT); break; case 0xA: if (memwin_state ==2) brk[(unsigned short)mem_cursor] ^= 1; break; } refreshall(); } quit: curs_set(1); endwin(); return 0; }
void reset_cpu(cpu* cpu_instance) { reset_stack(cpu_instance->stack); reset_registers(cpu_instance); reset_program(cpu_instance->program); }
void thread_movie_init() { reset_program(); auto_reset_program(); }