Advertisement
Guest User

ИК13

a guest
Aug 16th, 2014
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.97 KB | None | 0 0
  1.     ПЗУ_микрокоманд = [], ПЗУ_команд = [], ПЗУ_синхропрограмм = [];
  2.     перем J = [
  3.         0, 1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 3, 4,
  4.         5, 3, 4, 5, 3, 4, 5, 3, 4, 5, 6, 7, 8, 0,
  5.         1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5
  6.     ];
  7.     M = [], R = [], ST = [];
  8.     для (перем сч = 0; сч < 42; сч++)
  9.         M[сч] = 0, R[сч] = 0, ST[сч] = 0;
  10.     S = 0, S1 = 0;
  11.     L = 0, T = 0, П = 0;
  12.     микротакт = 0, микрокоманда = 0;
  13.     вход = 0, выход = 0;
  14.     АМК = 0, АСП = 0, АК = 0, МОД = 0;
  15.     индик_зпт = [];
  16.     клав_x = 0, клав_y = 0, запятая = 0;
  17.     обн_индик = нет;
  18.     для (сч = 0; сч < 14; сч++)
  19.         индик_зпт[сч] = нет;
  20.     Такт = функция () {
  21.         перем сигнал_I = микротакт >> 2;
  22.         перем сигнал_D = микротакт \ 12;
  23.         перем сигнал_E = (микротакт >> 2) % 3;
  24.         если (микротакт == 0) {
  25.             АК = R[36] + 16 * R[39];
  26.             если ((ПЗУ_команд[АК] & 0xfc0000) == 0) T = 0;
  27.         }
  28.         перем k = микротакт \ 36;
  29.         если (k < 3) АСП = ПЗУ_команд[АК] & 0xff;
  30.         аесли (k == 3) АСП = ПЗУ_команд[АК] >> 8 & 0xff;
  31.         аесли (k == 4) {
  32.             АСП = 0xff & ПЗУ_команд[АК] >> 16;
  33.             если (АСП > 0x1f) {
  34.                 если (микротакт == 144) {
  35.                     R[37] = АСП & 0xf;
  36.                     R[40] = АСП >> 4;
  37.                 }
  38.                 АСП = 0x5f;
  39.             }
  40.         }
  41.         МОД = 0xff & ПЗУ_команд[АК] >> 24;
  42.         АМК = ПЗУ_синхропрограмм[АСП * 9 + J[микротакт >> 2]];
  43.         АМК = АМК & 0x3f;
  44.         если (АМК > 59) {
  45.             АМК = (АМК - 60) * 2;
  46.             если (L == 0) АМК++;
  47.             АМК += 60;
  48.         }
  49.         микрокоманда = ПЗУ_микрокоманд[АМК];
  50.         перем альфа = 0, бета = 0, гамма = 0;
  51.         выбрать (микрокоманда >> 24 & 3) {
  52.             вар 2:
  53.             вар 3:
  54.                 если (микротакт \ 12 != клав_x - 1)
  55.                     если (клав_y > 0)
  56.                         S1 |= клав_y;
  57.                 стоп;
  58.         }
  59.         если ((микрокоманда & 1) > 0) альфа |= R[сигнал_I];
  60.         если ((микрокоманда & 2) > 0) альфа |= M[сигнал_I];
  61.         если ((микрокоманда & 4) > 0) альфа |= ST[сигнал_I];
  62.         если ((микрокоманда & 8) > 0) альфа |= ~R[сигнал_I] & 0xf;
  63.         если ((микрокоманда & 16) > 0) если (L == 0) альфа |= 0xa;
  64.         если ((микрокоманда & 32) > 0) альфа |= S;
  65.         если ((микрокоманда & 64) > 0) альфа |= 4;
  66.         если ((микрокоманда >> 7 & 16) > 0) бета |= 1;
  67.         если ((микрокоманда >> 7 & 8) > 0) бета |= 6;
  68.         если ((микрокоманда >> 7 & 4) > 0) бета |= S1;
  69.         если ((микрокоманда >> 7 & 2) > 0) бета |= ~S & 0xf;
  70.         если ((микрокоманда >> 7 & 1) > 0) бета |= S;
  71.         если ((ПЗУ_команд[АК] & 0xfc0000) > 0) {
  72.             если (клав_y == 0) T = 0;
  73.         }
  74.         иначе {
  75.             обн_индик = да;
  76.             если (микротакт \ 12 == клав_x - 1)
  77.                 если (клав_y > 0) {
  78.                     S1 = клав_y;
  79.                     T = 1;
  80.                 }
  81.             если (сигнал_D >= 0 && сигнал_D < 12)
  82.                 если (L > 0) запятая = сигнал_D;
  83.             индик_зпт[сигнал_D] = L > 0;
  84.         }
  85.         если ((микрокоманда >> 12 & 4) > 0) гамма = ~T & 1;
  86.         если ((микрокоманда >> 12 & 2) > 0) гамма |= ~L & 1;
  87.         если ((микрокоманда >> 12 & 1) > 0) гамма |= L & 1;
  88.         перем сумма = альфа + бета + гамма;
  89.         перем сигма = сумма & 0xf;
  90.         П = сумма >> 4;
  91.         если (МОД == 0 || (микротакт >> 2) >= 36) {
  92.             выбрать (микрокоманда >> 15 & 7) {
  93.                 вар 1: R[сигнал_I] = R[(сигнал_I + 3) % 42]; стоп;
  94.                 вар 2: R[сигнал_I] = сигма; стоп;
  95.                 вар 3: R[сигнал_I] = S; стоп;
  96.                 вар 4: R[сигнал_I] = R[сигнал_I] | S | сигма; стоп;
  97.                 вар 5: R[сигнал_I] = S | сигма; стоп;
  98.                 вар 6: R[сигнал_I] = R[сигнал_I] | S; стоп;
  99.                 вар 7: R[сигнал_I] = R[сигнал_I] | сигма; стоп;
  100.             }
  101.             если ((микрокоманда >> 18 & 1) > 0) R[(сигнал_I + 41) % 42] = сигма;
  102.             если ((микрокоманда >> 19 & 1) > 0) R[(сигнал_I + 40) % 42] = сигма;
  103.         }
  104.         если ((микрокоманда >> 21 & 1) > 0) L = 1 & П;
  105.         если ((микрокоманда >> 20 & 1) > 0) M[сигнал_I] = S;
  106.         выбрать (микрокоманда >> 22 & 3) {
  107.             вар 1: S = S1; стоп;
  108.             вар 2: S = сигма; стоп;
  109.             вар 3: S = S1 | сигма; стоп;
  110.         }
  111.         выбрать (микрокоманда >> 24 & 3) {
  112.             вар 1: S1 = сигма; стоп;
  113.             вар 2: S1 = S1; стоп;
  114.             вар 3: S1 = S1 | сигма; стоп;
  115.         }
  116.             перем x, y, z;
  117.         выбрать (микрокоманда >> 26 & 3) {
  118.             вар 1:   ST[(сигнал_I + 2) % 42] = ST[(сигнал_I + 1) % 42];
  119.                 ST[(сигнал_I + 1) % 42] = ST[сигнал_I];
  120.                 ST[сигнал_I] = сигма;
  121.                 стоп;
  122.             вар 2:   x = ST[сигнал_I];
  123.                 ST[сигнал_I] = ST[(сигнал_I + 1) % 42];
  124.                 ST[(сигнал_I + 1) % 42] = ST[(сигнал_I + 2) % 42];
  125.                 ST[(сигнал_I + 2) % 42] = x;
  126.                 стоп;
  127.             вар 3:   x = ST[сигнал_I];
  128.                 y = ST[(сигнал_I + 1) % 42];
  129.                 z = ST[(сигнал_I + 2) % 42];
  130.                 ST[(сигнал_I) % 42] = сигма | y;
  131.                 ST[(сигнал_I + 1) % 42] = x | z;
  132.                 ST[(сигнал_I + 2) % 42] = y | x;
  133.                 стоп;
  134.         }
  135.         выход = M[сигнал_I] & 0xf;
  136.         M[сигнал_I] = вход;
  137.         микротакт += 4;
  138.         если (микротакт > 167) микротакт = 0;
  139.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement