Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ПЗУ_микрокоманд = [], ПЗУ_команд = [], ПЗУ_синхропрограмм = [];
- перем J = [
- 0, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4,
- 5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 6, 7, 8, 0,
- 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5
- ];
- M = [], R = [], ST = [];
- для (перем сч = 0; сч < 42; сч++)
- M[сч] = 0, R[сч] = 0, ST[сч] = 0;
- S = 0, S1 = 0;
- L = 0, T = 0, П = 0;
- микротакт = 0, микрокоманда = 0;
- вход = 0, выход = 0;
- АМК = 0, АСП = 0, АК = 0, МОД = 0;
- индик_зпт = [];
- клав_x = 0, клав_y = 0, запятая = 0;
- обн_индик = нет;
- для (сч = 0; сч < 14; сч++)
- индик_зпт[сч] = нет;
- Такт = функция () {
- перем сигнал_I = микротакт >> 2;
- перем сигнал_D = микротакт \ 12;
- перем сигнал_E = (микротакт >> 2) % 3;
- если (микротакт == 0) {
- АК = R[36] + 16 * R[39];
- если ((ПЗУ_команд[АК] & 0xfc0000) == 0) T = 0;
- }
- перем k = микротакт \ 36;
- если (k < 3) АСП = ПЗУ_команд[АК] & 0xff;
- аесли (k == 3) АСП = ПЗУ_команд[АК] >> 8 & 0xff;
- аесли (k == 4) {
- АСП = 0xff & ПЗУ_команд[АК] >> 16;
- если (АСП > 0x1f) {
- если (микротакт == 144) {
- R[37] = АСП & 0xf;
- R[40] = АСП >> 4;
- }
- АСП = 0x5f;
- }
- }
- МОД = 0xff & ПЗУ_команд[АК] >> 24;
- АМК = ПЗУ_синхропрограмм[АСП * 9 + J[микротакт >> 2]];
- АМК = АМК & 0x3f;
- если (АМК > 59) {
- АМК = (АМК - 60) * 2;
- если (L == 0) АМК++;
- АМК += 60;
- }
- микрокоманда = ПЗУ_микрокоманд[АМК];
- перем альфа = 0, бета = 0, гамма = 0;
- выбрать (микрокоманда >> 24 & 3) {
- вар 2:
- вар 3:
- если (микротакт \ 12 != клав_x - 1)
- если (клав_y > 0)
- S1 |= клав_y;
- стоп;
- }
- если ((микрокоманда & 1) > 0) альфа |= R[сигнал_I];
- если ((микрокоманда & 2) > 0) альфа |= M[сигнал_I];
- если ((микрокоманда & 4) > 0) альфа |= ST[сигнал_I];
- если ((микрокоманда & 8) > 0) альфа |= ~R[сигнал_I] & 0xf;
- если ((микрокоманда & 16) > 0) если (L == 0) альфа |= 0xa;
- если ((микрокоманда & 32) > 0) альфа |= S;
- если ((микрокоманда & 64) > 0) альфа |= 4;
- если ((микрокоманда >> 7 & 16) > 0) бета |= 1;
- если ((микрокоманда >> 7 & 8) > 0) бета |= 6;
- если ((микрокоманда >> 7 & 4) > 0) бета |= S1;
- если ((микрокоманда >> 7 & 2) > 0) бета |= ~S & 0xf;
- если ((микрокоманда >> 7 & 1) > 0) бета |= S;
- если ((ПЗУ_команд[АК] & 0xfc0000) > 0) {
- если (клав_y == 0) T = 0;
- }
- иначе {
- обн_индик = да;
- если (микротакт \ 12 == клав_x - 1)
- если (клав_y > 0) {
- S1 = клав_y;
- T = 1;
- }
- если (сигнал_D >= 0 && сигнал_D < 12)
- если (L > 0) запятая = сигнал_D;
- индик_зпт[сигнал_D] = L > 0;
- }
- если ((микрокоманда >> 12 & 4) > 0) гамма = ~T & 1;
- если ((микрокоманда >> 12 & 2) > 0) гамма |= ~L & 1;
- если ((микрокоманда >> 12 & 1) > 0) гамма |= L & 1;
- перем сумма = альфа + бета + гамма;
- перем сигма = сумма & 0xf;
- П = сумма >> 4;
- если (МОД == 0 || (микротакт >> 2) >= 36) {
- выбрать (микрокоманда >> 15 & 7) {
- вар 1: R[сигнал_I] = R[(сигнал_I + 3) % 42]; стоп;
- вар 2: R[сигнал_I] = сигма; стоп;
- вар 3: R[сигнал_I] = S; стоп;
- вар 4: R[сигнал_I] = R[сигнал_I] | S | сигма; стоп;
- вар 5: R[сигнал_I] = S | сигма; стоп;
- вар 6: R[сигнал_I] = R[сигнал_I] | S; стоп;
- вар 7: R[сигнал_I] = R[сигнал_I] | сигма; стоп;
- }
- если ((микрокоманда >> 18 & 1) > 0) R[(сигнал_I + 41) % 42] = сигма;
- если ((микрокоманда >> 19 & 1) > 0) R[(сигнал_I + 40) % 42] = сигма;
- }
- если ((микрокоманда >> 21 & 1) > 0) L = 1 & П;
- если ((микрокоманда >> 20 & 1) > 0) M[сигнал_I] = S;
- выбрать (микрокоманда >> 22 & 3) {
- вар 1: S = S1; стоп;
- вар 2: S = сигма; стоп;
- вар 3: S = S1 | сигма; стоп;
- }
- выбрать (микрокоманда >> 24 & 3) {
- вар 1: S1 = сигма; стоп;
- вар 2: S1 = S1; стоп;
- вар 3: S1 = S1 | сигма; стоп;
- }
- перем x, y, z;
- выбрать (микрокоманда >> 26 & 3) {
- вар 1: ST[(сигнал_I + 2) % 42] = ST[(сигнал_I + 1) % 42];
- ST[(сигнал_I + 1) % 42] = ST[сигнал_I];
- ST[сигнал_I] = сигма;
- стоп;
- вар 2: x = ST[сигнал_I];
- ST[сигнал_I] = ST[(сигнал_I + 1) % 42];
- ST[(сигнал_I + 1) % 42] = ST[(сигнал_I + 2) % 42];
- ST[(сигнал_I + 2) % 42] = x;
- стоп;
- вар 3: x = ST[сигнал_I];
- y = ST[(сигнал_I + 1) % 42];
- z = ST[(сигнал_I + 2) % 42];
- ST[(сигнал_I) % 42] = сигма | y;
- ST[(сигнал_I + 1) % 42] = x | z;
- ST[(сигнал_I + 2) % 42] = y | x;
- стоп;
- }
- выход = M[сигнал_I] & 0xf;
- M[сигнал_I] = вход;
- микротакт += 4;
- если (микротакт > 167) микротакт = 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement