diff --git a/emulator.cpp b/emulator.cpp index b07a44d..44646f0 100644 --- a/emulator.cpp +++ b/emulator.cpp @@ -42,6 +42,12 @@ short hla_time_reagent = 30; short hla_time_washing_1 = 3; short hla_time_washing_2 = 20; + +char hla_robot1_en = 1; +char hla_robot2_en = 0; +char _scheduler_en = 1; + + static const int ROWS = 10; static const int COLS = 23 * 5 + 1; static char buffer[ROWS][COLS]; @@ -210,11 +216,11 @@ int main() { // b.zone = (short) abs(random() % 20); // } - barrels[5] = makeBarrel(1, 21, 3); - barrels[6] = makeBarrel(1, 5, -6); - barrels[7] = makeBarrel(1, 6, -7); - - barrels[8] = makeBarrel(1, 10, -8); +// barrels[5] = makeBarrel(1, 21, 3); +// barrels[6] = makeBarrel(1, 5, -6); +// barrels[7] = makeBarrel(1, 6, -7); +// +// barrels[8] = makeBarrel(1, 10, -8); current_tic = 0; const char* message = nullptr; diff --git a/emulator.h b/emulator.h index 57dbfd5..8eaee39 100644 --- a/emulator.h +++ b/emulator.h @@ -69,6 +69,10 @@ extern short hla_time_washing_2; extern short robot1_lock_zone; extern short robot2_lock_zone; +extern char hla_robot1_en; +extern char hla_robot2_en; + +extern char _scheduler_en; #ifdef __cplusplus } diff --git a/scheduler.c b/scheduler.c index 1b30aa6..5c87344 100644 --- a/scheduler.c +++ b/scheduler.c @@ -602,19 +602,17 @@ void schedule_robot_1() { } } -// вернет false если удалось вставить барабан, иначе true -char create_barrel_in_load() { - if (!zone_is_busy(1)) { - for (int i = 0; i < BARRELS_COUNT; i++) { - if (!barrels[i].flags.is_exist) { - barrels[i] = makeBarrel(1, 1, 0); - return 0; - } +char scheduler_remove_barrel_from_zone(short zone) { + for (short i = 0; i < 10; i++) { + if (barrels[i].flags.is_exist && barrels[i].flags.robot == 0 && barrels[i].zone == zone) { + barrels[i].flags.is_exist = 0; + return 1; } } - return 1; + return 0; } + /* === ЦИКЛОГРАММА ПЕРЕТАСКИВАНИЯ БАРАБАНА === // NOTE первой командой на любую транзакцию должна стоять команда опустить траверсу (в 22 зоне мы никогда не закончим, за нее не беспокоится) @@ -657,32 +655,43 @@ char create_barrel_in_load() { * установить время ожидания барабана (для промывки 4а) */ -void scheduler_main() { - // тут должно быть удаление барабана из зоны 1, если он там есть -// if (schedulerLoadButton1) { -// schedulerLoadButton1 = create_barrel_in_load(0); -// } - - // тут возможна только вставка барабанов - if (button_load) { - button_load = create_barrel_in_load(); - } - - if (_scheduler_software_timer) { - _scheduler_software_timer = 0; - for (int i = 0; i < 10; i++) { - if (barrels[i].software_timer > -9999) { - barrels[i].software_timer--; +#ifdef EMULATOR +void scheduler_main() +#endif +{ + if (_scheduler_en) { + // тут возможна только вставка барабанов + if (button_load) { + if (!zone_is_busy(1)) { + for (int i = 0; i < BARRELS_COUNT; i++) { + if (!barrels[i].flags.is_exist) { + barrels[i] = makeBarrel(1, 1, 0); + button_load = 0; + } + } } } - } - if (robot1_code.PC < 0) { - schedule_robot_1(); - } - // пока без второго робота -// if (robot2_cmd.cmd == 0) { -// robot2_cmd.cmd = 2; // пиздуем в зону -// robot2_cmd.args[0] = rand() % 23; -// } + if (button_unload_end) { + button_unload_end = (char)(scheduler_remove_barrel_from_zone(0) != 0); + } + + if (button_unload_remove) { + button_unload_remove = (char)(scheduler_remove_barrel_from_zone(22) != 0); + } + + + if (_scheduler_software_timer) { + _scheduler_software_timer = 0; + for (int i = 0; i < 10; i++) { + if (barrels[i].software_timer > -9999) { + barrels[i].software_timer--; + } + } + } + + if (robot1_code.PC < 0) { + schedule_robot_1(); + } + } } diff --git a/utils.h b/utils.h index 3de4800..6c3ee0b 100644 --- a/utils.h +++ b/utils.h @@ -165,8 +165,8 @@ extern struct robot_code robot2_code; #define barrels ((struct barrel*)&barrels_array) #define robot1 (*((struct robot_regs*)&robot1_reg_mx)) #define robot2 (*((struct robot_regs*)&robot2_reg_mx)) -#define robot1_code (*((struct robot_code*)&_robot1_code_struct)) -#define robot2_code (*((struct robot_code*)&_robot2_code_struct)) +#define robot1_code (*((struct robot_code*)_robot1_code_struct)) +#define robot2_code (*((struct robot_code*)_robot2_code_struct)) #endif // почему-то компилер говорит что размер структуру сраный