.CHARSET 1251 ; Файл kpa02 ; Автомат подачи звонков КПА-02, КПА-03 ; v1.1 - 29.09.11 ; v1.2 - 02.02.12 ; v1.3 - 10.02.12 ; v1.4 - 14.02.12 ; v1.5 - 05.03.12 ; требуемая версия ПО МК-152 (МК-152М) - от 1.23 ; требуемая версия компилятора mk.exe - от 1.23 ; требуемая версия компилятора mkl2mkp - от 0.24 ; Лицензия GPL ; НПП "СЕМИКО", г. Новосибирск, 2011-2012 ; mail@semico.ru ; Команды экранных форм: TAB .EQU 96 LDX .EQU 104 LDY .EQU 105 TYPE .EQU 101 ATYPE .EQU 78 LDADR .EQU 77 SQU .EQU 89 FRAME .EQU 91 DRAWR .EQU 84 DRAWB .EQU 86 TXTP .EQU 83 TXTB .EQU 85 TXTK .EQU 87 PREXP .EQU 92 PRFORM .EQU 93 PRHEX .EQU 94 MCALL .EQU 102 RETUM .EQU 103 JNEZ .EQU 1 JM .EQU 56 END .EQU 255 ; Регистры памяти VSEGOF .EQU 20 ; количество форм в программе (без служебных) FTIMER .EQU 21 ; флаг таймера TCHAS .EQU 22 ; последнее обработанное время DKALEN .EQU 23 ; последний обработанный день DIKALEN .EQU 24 ; день для изменения MIKALEN .EQU 25 ; месяц для изменения GIKALEN .EQU 26 ; год для изменения DNIKALEN .EQU 27 ; день недели для изменения HICHAS .EQU 28 ; час для изменения MICHAS .EQU 29 ; минута для изменения VAR .EQU 30 ; текущий вариант расписания STRRN .EQU 31 ; номер верхней строки из списка в форме FWAIT .EQU 32 ; флаг длинной операции 0-нет, 1-6 - кадр NUROK .EQU 33 ; номер урока для настройки UIN .EQU 34 ; время начала для настройки ЧЧ.ММ ZUIN .EQU 35 ; звонок начала урока UIK .EQU 36 ; конец урока для настройки ЧЧ.ММ ZUIK .EQU 37 ; звонок конца урока ;<-- NED .EQU 40 ; R41-47 - расписание на неделю (0-нет; 1,2,3 - варианты) NED1 .EQU 41 NED2 .EQU 42 NED3 .EQU 43 NED4 .EQU 44 NED5 .EQU 45 NED6 .EQU 46 NED7 .EQU 47 ;--> ZIL .EQU 50 ; продолжительность звонка для настройки, сек ZIP .EQU 51 ; продолжительность паузы для настройки, сек ZIK .EQU 52 ; кратность звонка для настройки ZIN .EQU 53 ; номер звонка для настройки STR1UK .EQU 55 ; указатель для строки STR1 при вводе STR1REG .EQU 56 ; номер регистра для косвенного ввода времени (ЧЧММ.) в F11 STR1RES .EQU 57 ; резервное значение времени (ЧЧММ.) для выхода без сохранения FIZM .EQU 58 ; флаг наличия изменений FFIZM .EQU 59 ; для какой формы было запрошено сохранение изменений NDOPZV .EQU 60 ; номер доп. звонка для настройки через UIN и ZUIN DOPI .EQU 61 ; время доп. звонка ZDOPI .EQU 62 ; тип доп. звонка NZV .EQU 63 ; v1.5 - звонок начала или конца урока для выбора типа в F18 ;<-- NEDI .EQU 70 ; R71-77 - копия расписания на неделю для сохранения-восстановления NED1I .EQU 71 NED2I .EQU 72 NED3I .EQU 73 NED4I .EQU 74 NED5I .EQU 75 NED6I .EQU 76 NED7I .EQU 77 ;--> NNED .EQU 78 ; v1.5 - номер дня недели для редактирования NUR .EQU 79 ; номер урока до разбора NTEKUR .EQU 80 ; номер 1-20 текущего урока/перемены заполняется в п/п TEKUR FTEK .EQU 81 ; 0 - нет данных, 1 - есть данные FTEKUR .EQU 82 ; 0 - урок, 1 - перемена FTEKDOP .EQU 83 ; 0 - нет, 1- это доп. звонок FZVRIS .EQU 84 ; 0 - нет, 1 - вывести пиктограмму FZVONOK .EQU 85 ; признак подачи звонка 0-нет, 1-5 тип, (-1) - уже отработан. FZVONOK1 .EQU 86 ; Тип звонка 1-5 для вывода. FZVON .EQU 87 ; счётчик для прерывания звонка (TIMER) FZV .EQU 88 ; флаг необходимости проверки используется в п/п TEKUR FGPS .EQU 90 ; v1.2 КПА-03 флаг наличия УСОМК-5 (модуля GPS) UTC .EQU 91 ; v1.2 КПА-03 UTC Time hh.mmss от модуля GPS SU .EQU 92 ; v1.2 КПА-03 Satellites Used 0-12 от модуля GPS KORCHAS .EQU 93 ; v1.2 КПА-02 и -03 коррекция хода часов секунд/сутки (см F3) KORCHASN .EQU 94 ; v1.2 КПА-02 и -03 коррекция для настройки KORS .EQU 95 ; v1.2 накопление долей секунд коррекции KORH .EQU 96 ; v1.2 час последней проведённой коррекции (для исключения повторов) FPORT .EQU 97 ; v1.2 счётчик тайм-аута порта FSYN .EQU 98 ; v1.2 флаг актуальной информации UTC ; <-- U1N .EQU 100 ; урок 1 начало U1K .EQU 101 ; урок 1 конец U2N .EQU 102 U2K .EQU 103 U3N .EQU 104 U3K .EQU 105 U4N .EQU 106 U4K .EQU 107 U5N .EQU 108 U5K .EQU 109 U6N .EQU 110 U6K .EQU 111 U7N .EQU 112 U7K .EQU 113 U8N .EQU 114 U8K .EQU 115 U9N .EQU 116 U9K .EQU 117 U10N .EQU 118 U10K .EQU 119 U11N .EQU 120 U11K .EQU 121 U12N .EQU 122 U12K .EQU 123 U13N .EQU 124 U13K .EQU 125 U14N .EQU 126 U14K .EQU 127 U15N .EQU 128 U15K .EQU 129 U16N .EQU 130 U16K .EQU 131 U17N .EQU 132 U17K .EQU 133 U18N .EQU 134 U18K .EQU 135 U19N .EQU 136 U19K .EQU 137 U20N .EQU 138 U20K .EQU 139 DOP1 .EQU 140 DOP2 .EQU 141 DOP3 .EQU 142 DOP4 .EQU 143 DOP5 .EQU 144 DOP6 .EQU 145 DOP7 .EQU 146 ;--> V1 .EQU 200 ; блок данных для варианта 1 V2 .EQU 300 ; блок данных для варианта 2 V3 .EQU 400 ; блок данных для варианта 3 ;<-- Z1L .EQU 500 ; продолжительность звонка 1, сек Z1P .EQU 501 ; продолжительность паузы 1, сек Z1K .EQU 502 ; кратность звонка 1 Z2L .EQU 503 ; продолжительность звонка 2, сек Z2P .EQU 504 ; продолжительность паузы 2, сек Z2K .EQU 505 ; кратность звонка 2 Z3L .EQU 506 ; продолжительность звонка 3, сек Z3P .EQU 507 ; продолжительность паузы 3, сек Z3K .EQU 508 ; кратность звонка 3 Z4L .EQU 509 ; продолжительность звонка 4, сек Z4P .EQU 510 ; продолжительность паузы 4, сек Z4K .EQU 511 ; кратность звонка 4 Z5L .EQU 512 ; продолжительность звонка 5, сек Z5P .EQU 513 ; продолжительность паузы 5, сек Z5K .EQU 514 ; кратность звонка 5 ;--> ZVON .EQU 550 ; Последовательность звонков и пауз для прерывания ; (не менее 20 регистров) ; Копия U1N-U20K для подачи звонков ;<-- U1NZV .EQU 600 ; R600 - R639 DOP1ZV .EQU 640 ; R640 - R646 ;--> ; Двоичные данные STR1 .EQU 1000 ; текстовая строка - буфер STRH .EQU 1060 ; час STRM .EQU 1080 ; минута STRS .EQU 1090 ; секунда STRDATA .EQU 1100 ; дата ДД.ММ.ГГГГ STRDEN .EQU 1120 ; день недели STRUR .EQU 1140 ; урок/перемена STRTUR .EQU 1160 ; время начала и окончания ;<-- STRR0 .EQU 1200 ; строка 1 STRR1 .EQU 1240 ; строка 2 STRR2 .EQU 1280 ; строка 3 STRR3 .EQU 1320 ; строка 4 STRR4 .EQU 1360 ; строка 5 STRR5 .EQU 1400 ; строка 6 STRR6 .EQU 1440 ; строка 7 ;--> STRNUR .EQU 1500 ; начало урока при вводе для F10 STRKUR .EQU 1520 ; конец урока при вводе для F10 ; ====================================================== Начало программы .ORG 0 A0: P GSB INITPROG ; инициализация структур A1: 64 A2: PP M 9208 ; Отрисовать меню P GSB PROV ; Проверка результата выполнения формы P X=0 A1 ; RX!=0 перерисовать форму заново A3: PP RM 9029 MA ; В RA - код клавиши K NOT P X!=0 A4 P GSB KLAVA ; Независимая обработка клавиатуры P X=0 A1 ; !=0 - клавиша уже обработана RMA P GOTO A2 A4: P GSB CHAS P X>=0 A5 ; <0 - переход к A5 P X!=0 A3 ; ==0 - переход к A3 ; время изменилось PP RM 9202 1 - P X=0 A5 ; Для формы 1 - перерисовка экрана P GSB KALEN ; проверить/обновить дату CX P GSB TEKUR ; проверка звонка и заполнение строк и флагов в зависимости от тек. времени P RM FTIMER P X!=0 A1 P GSB OTIMER ; сработал таймер P GOTO A1 A5: ; программа не в форме 1, перерисовка не нужна, но требуется проверка звонков CX P GSB TEKUR ; проверка звонка и заполнение строк и флагов в зависимости от тек. времени P RM FTIMER P X!=0 A3 P GSB OTIMER ; сработал таймер P GOTO A3 ;============================================= п/п Проверка результата выполнения формы ; при выходе 0 - не перерисовывать, 1 - перерисовать заново PROV: PP RM 9209 ; Результат выполнения программы формы P X=0 PROV1 ; RX=0 - не перерисовывать форму RTN ; OK PROV1: MB 1 - P X=0 PROV2 ; 1 - Требуется обработка при выходе из формы P GOTO OBRF PROV2: RMB 7 - P X>=0 PROV3 P X!=0 OBRV ; результат 7 - окончание ввода числа OBRV 8 ; >7 - неизвестная ошибка 8 MB PROV3: ; Определить ошибку интерфейса 2-6, вывести f252-0 и уйти в бесконечный цикл ; (При работе отлаженной программы эта ситуация возникнуть не может) RMB .NUM TPROV + K PRGM .NUM TPROVE2 + PP M 9042 ; Здесь начало строки описания ошибки .NUM STR1 MC PROV11: PP RM 9044 KMC P X!=0 PROVE RMC 1 + MC P GOTO PROV11 PROVE: PP RM 9202 MB ; текущая форма с ошибкой PP RM 9203 MC ; активный элемент 252 ; форма 252 PP M 9202 0 ; элемент 0 PP M 9203 64 PP M 9208 ; вывести форму ошибки интерфейса ; Разрешить С/П PROVEE: GOTO PROVEE ; и зациклить программу .BASE TPROVE2: .TEXT "Нет формы\0" TPROVE3: .TEXT "Нет элемента в форме\0" TPROVE4: .TEXT "Нет команды\0" TPROVE5: .TEXT "Нет шрифта\0" TPROVE6: .TEXT "Нет символа в шрифте\0" TPROVE7: .TEXT "Ввод\0" TPROVE8: .TEXT "Неизвестная ошибка\0" TPROV: .DB 0, 0 ; для результатов 0 и 1 .DBB TPROVE2, TPROVE3, TPROVE4, TPROVE5, .DBB TPROVE6, TPROVE7, TPROVE8 ; начальные адреса сообщений ;==================================================== Обработка данных формы OBRF: ; RA, .NUM TMOBRF PP M 9042 ; таблица обработчиков команд PP RM 9208 PP M 9213 ; адрес по индексу P X>=0 OBRFE ; нет обработчика этой команды PP M 9042 PP RM 9208 ; код обрабатываемой команды 32 - ; команду "выход" обработать отдельно P X!=0 OBRF1 PP RM 9202 PP M 9211 ; считать адрес таблицы форм P X!=0 OBRFE ; нет обработки в этой форме PP M 9042 PP RM 9203 PP M 9211 ; считать адрес подпрограммы для нужного элемента MA P X!=0 OBRFE ; нет обработки этого события K GOTO A ; перейти к подпрограмме RA OBRF1: ; обработка команды "выход" не содержит различий по номеру элемента ; используется только номер формы PP RM 9202 PP M 9211 ; считать адрес таблицы форм P X!=0 OBRFE ; нет обработки выхода в этой форме MA K GOTO A ; перейти к подпрограмме RA OBRFE: CX RTN ; при RX=0 TMOBRF: ; таблица таблиц обработчиков команд .DB 33 .DA TOBRVVOD ; обработка команды "ввод" .DB 32 .DA TOBRVYHOD ; обработка команды "выход" .DB 36 .DA TOBRVYBU ; обработка команды "вверх" .DB 37 .DA TOBRVYBD ; обработка команды "вниз" .DB 34 .DA TOBRVYBR ; обработка команды "вправо" .DB 35 .DA TOBRVYBL ; обработка команды "влево" .DB END TOBRVVOD: .DA 0,TOBRF1,TOBRF2,0,TOBRF4, .DA TOBRF5,TOBRF6,TOBRF7,TOBRF8,TOBRF9 .DA TOBRF10, TOBRF11, TOBRF12, TOBRF13, TOBRF14 .DA 0, 0, TOBRF17, TOBRF18, TOBRF19 .DA 0 ;F0 - с v1.2 не используется TOBRF1: .DA OF1E0,OF1E1,0 ;F1 TOBRF2: .DA 0,0,0,OF2E3 ; F2 TOBRF4: .DA OF4E0,OF4E1,OF4E2,OF4E3 ; F4 TOBRF5: .DA OF5E0,OF5E1,0 ; F5 TOBRF6: .DA OF6E0,OF6E1,OF6E2,OF6E3,OF6E4,OF6E5,OF6E6 ; F6 TOBRF7: .DA OF7E0,OF7E1,OF7E2,OF7E3,OF7E4 ; F7 TOBRF8: .DA 0,0,0,OF8E3 ; F8 TOBRF9: .DA OF9E0,OF9E1,OF9E2,OF9E3,OF9E4,OF9E5 ; F9 TOBRF10: .DA OF10E0,OF10E1,OF10E2,OF10E3 ; F10 TOBRF11: .DA OF11E0 ; F11 TOBRF12: .DA OF12E0,OF12E1 ; F12 TOBRF13: .DA OF13E0,OF13E1,OF13E2,OF13E3,OF13E4,OF13E5 ; F13 TOBRF14: .DA OF14E0,OF14E1 ; F14 TOBRF17: .DA OF17E0,OF17E1,OF17E2,OF17E3 ; F17 (v1.5) TOBRF18: .DA OF18E0,OF18E1,OF18E2,OF18E3,OF18E4,OF18E5 ; F18 (v1.5) TOBRF19: .DA OF19E0,OF19E1,OF19E2,OF19E3,OF19E4,OF19E5,OF19E6 ; F19 (v1.5) ;----------------------------------------------------- Команда ВВОД ;----------------------------------------------------- F1-E0 OF1E0: ; R0,R4 ; форма 1 элемент 0 - дата ; перенести дату для редактирования PP RM 9056 P M DIKALEN PP RM 9057 P M MIKALEN PP RM 9058 P M GIKALEN PP RM 9059 P M DNIKALEN OF1E0A: ; записать день недели .NUM TKALEN P RM DNIKALEN 3 * + PP M 9042 ; индексный регистр памяти программ .NUMD STRDEN ; с декрементом M4 3 M0 OF1E0B: PP RM 9044 KM4 PFL0 OF1E0B ; обнулить флаг изменений CX P M FIZM 2 P M FFIZM ; F2 ; перейти к F2E0 2 PP M 9202 0 PP M 9203 1 RTN ;----------------------------------------------------- F1-E1 OF1E1: ; R0,R4 ; форма 1 элемент 1 - время ; перенести время для редактирования PP RM 9055 MA K INT P M HICHAS RMA K FRAC 100 * K INT P M MICHAS ; перенести коррекцию для редактирования (v1.2) P RM KORCHAS P M KORCHASN ; обнулить флаг изменений CX P M FIZM 3 P M FFIZM ; F3 ; перейти к F3E0 3 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------------ F2-E3 OF2E3: ; v1.5 - выбор дня недели через отдельную форму 19 PP M 9202 ; F19 P RM DNIKALEN 1 - PP M 9203 ; текущий день недели -1 1 RTN ;------------------------------------------ F4-E0 OF4E0: ; Расписание - на неделю ; R0,R4,R5 ; сохранить копию в NEDI .NUM NED M4 .NUM NEDI M5 7 M0 OF4E0A: KRM4 KM5 PFL0 OF4E0A CX P M FIZM ; очистить флаг изменений ; переход к форме 6 ; F6 - на неделю PP M FFIZM ; перейти к F6E0 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------ F4-E1,E2,E3 OF4E1: ; R0,R4,R5 ; выбор варианта 1 .NUMD V1 M4 ; R4 = (блок данных)-1 1 OF4E1A: P M VAR ; считывание данных выбранного варианта R200...R400 в рабочую область R100 100 M0 99 M5 OF4E1B: KRM4 KM5 PFL0 OF4E1B CX P M FIZM ; очистить флаг изменений ; переход к форме 5 ; F5 - вариант PP M FFIZM ; номер формы для возможной записи изменений PP M 9202 0 PP M 9203 1 RTN OF4E2: ; выбор варианта 2 .NUMD V2 M4 2 P GOTO OF4E1A OF4E3: ; выбор варианта 3 .NUMD V3 M4 3 P GOTO OF4E1A ;------------------------------------------ F5-E0 OF5E0: ; вариант - выбран пункт "уроки" CX PP M STRRN ; при входе верхняя строка = 0 P GSB UROK ; заполнение строк STRR0...STRR5 начиная с номера урока STRRN ; переход к F9 9 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------ F5-E1 OF5E1: ; вариант - выбран "доп.звонки" CX PP M STRRN ; при входе верхняя строка = 0 P GSB DOPZV ; заполнение строк STRR0...STRR5 ; переход к F13 13 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------ F6-E0...E6 OF6E0: ; RA ; выбор варианта для дня недели 1-7 1 OF6E0A: P M NNED ; день недели для редактирования v1.5 .NUML NEDI ; NUML если NEDI<100 + MA KRMA K INT 4 - P X>=0 OF6E0B CX KMA OF6E0B: KRMA P X<0 OF6E0C CX KMA OF6E0C: ; перейти в F17 элемент KRMA 17 PP M 9202 KRMA PP M 9203 1 RTN OF6E1: 2 P GOTO OF6E0A OF6E2: 3 P GOTO OF6E0A OF6E3: 4 P GOTO OF6E0A OF6E4: 5 P GOTO OF6E0A OF6E5: 6 P GOTO OF6E0A OF6E6: 7 P GOTO OF6E0A ;------------------------------------------ F7-E0...E4 OF7E0: ; RA ; выбор настроек звонка 1-5 PP RM Z1L PP RM Z1P PP RM Z1K 1 OF7E0A: P M ZIN FR P M ZIK FR P M ZIP FR P M ZIL ; флаг изменений CX P M FIZM ; флаг изменений 8 P M FFIZM ; для формы 8 ; перейти к F8 8 PP M 9202 0 PP M 9203 1 RTN OF7E1: PP RM Z2L PP RM Z2P PP RM Z2K 2 P GOTO OF7E0A OF7E2: PP RM Z3L PP RM Z3P PP RM Z3K 3 P GOTO OF7E0A OF7E3: PP RM Z4L PP RM Z4P PP RM Z4K 4 P GOTO OF7E0A OF7E4: PP RM Z5L PP RM Z5P PP RM Z5K 5 P GOTO OF7E0A ;------------------------------------------ F8-E3 OF8E3: ; R0,R4,RA,RB ; проверка звонка P RM ZIL 100 * MA ; продолжительность звонка P X!=0 OF8E3E ; если нулевая - выйти P RM ZIP 100 * MB ; продолжительность паузы P RM ZIK M0 ; число повторов P X!=0 OF8E3E ; если нулевое - выйти .NUMD ZVON ; начало последовательности - 1 M4 OF8E3A: RMA KM4 ; записать продолжительность звонка RMB KM4 ; записать продолжительность паузы PFL0 OF8E3A CX ; конец последовательности KM4 P M FZVON ; RX=0 = номер в последовательности для прерывания 1 PP M 9149 ; вызвать прерывание 1 OF8E3E: 1 RTN ;------------------------------------------ F9-E0...E5 ; RA OF9E0: 1 OF9E0A: P RM STRRN + P M NUROK 1 - 2 * .NUM U1N + MA KRMA ; начало урока для настройки K INT P M UIN KRMA K FRAC 10 * P M ZUIN RMA 1 + MA KRMA ; конец урока для настройки K INT P M UIK KRMA K FRAC 10 * P M ZUIK ; перенести из UIN и UIK в строки STRNUR и STRKUR P GSB UIN2STR P GSB UIK2STR 10 PP M 9202 0 PP M 9203 1 RTN OF9E1: 2 P GOTO OF9E0A OF9E2: 3 P GOTO OF9E0A OF9E3: 4 P GOTO OF9E0A OF9E4: 5 P GOTO OF9E0A OF9E5: 6 P GOTO OF9E0A ;------------------------------------------ F10-E0 ; ввод времени начала урока OF10E0: .NUMT UIN ; регистр переменной UIN OF10E0A: P M STR1REG MA KRMA P M STR1RES ; сохранить для возможного восстановления .NUMD STR1 M4 48 KM4 58 KM4 CX KM4 P M STR1UK ; указатель STR1 =0 11 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------ F10-E1 ; ввод номера звонка начала урока OF10E1: CX P M NZV ; v1.5 - признак звонка начала урока =0 18 PP M 9202 ; F18 P RM ZUIN PP M 9203 ; ZUIN номер звонка начала 1 RTN ;------------------------------------------ F10-E2 ; ввод времени окончания урока OF10E2: .NUMT UIK ; регистр переменной UIK P GOTO OF10E0A ;------------------------------------------ F10-E3 ; ввод номера звонка окончания урока OF10E3: 1 P M NZV ; v1.5 - признак звонка окончания урока =1 18 PP M 9202 ; F18 P RM ZUIK PP M 9203 ; ZUIK номер звонка 1 RTN ;------------------------------------------ F11-E0 ; ввод времени ; RA, RB OF11E0: P RM FIZM 1 + P M FIZM ; инкрементировать признак изменений P RM STR1REG MB 3 P RM STR1UK P X!=0 OF11E0B ; если ничего не введено - сразу на запись - ;M0 ; если ввод после первых цифр - домножить на: if STR1UK 0-нет 1=100 2=100 3=10 4-нет P X!=0 OF11E0A ; STR1UK==3 P X>=0 OF11E0B ; STR1UK==1 или 2 KRMB 100 * KMB P GOTO OF11E0B OF11E0A: ;STR1UK=3 KRMB 10 * KMB OF11E0B: .NUM TOF11E0 PP M 9042 P RM STR1REG ; номер регистра для записи PP M 9213 MA P X>=0 OF11E0E1 K GOTO A OF11E0UIN: ; ввод UIN P GSB OV10E0 P GSB UIN2STR CX OF11E0E: PP M 9203 10 PP M 9202 OF11E0E1: 1 RTN OF11E0UIK: ; ввод UIK P GSB OV10E2 P GSB UIK2STR 2 P GOTO OF11E0E OF11E0DOPI: ; ввод DOPI P GSB OV14E0 P GSB DOPI2STR CX PP M 9203 14 PP M 9202 1 RTN TOF11E0: .DB UIN .DA OF11E0UIN .DB UIK .DA OF11E0UIK .DB DOPI .DA OF11E0DOPI .DB END ;------------------------------------------ F12-E0 ; Сохранение - Да ; RA OF12E0: CX P M FIZM ; сброс флага изменений .NUM TOF12E0 PP M 9042 P RM FFIZM PP M 9213 MA P X>=0 OF12E0E K GOTO A OF12E0E: 1 RTN TOF12E0: .DB 2 .DA OF12E0F2 .DB 3 .DA OF12E0F3 .DB 5 .DA OF12E0F5 .DB 6 .DA OF12E0F6 .DB 8 .DA OF12E0F8 .DB END ;------------ OF12E0F2: ; перенос изменённой даты в часы ЭКВМ P RM DIKALEN PP M 9056 P RM MIKALEN PP M 9057 P RM GIKALEN PP M 9058 P RM DNIKALEN PP M 9059 ; изменить строку даты P GSB KALEN ; переразобрать расписание и обновить строку в F1 1 P GSB TEKUR ; перейти к F1 1 PP M 9202 CX PP M 9203 1 RTN ;------------ OF12E0F3: ; перенос изменённого времени в часы ЭКВМ P RM MICHAS 100 / P RM HICHAS + PP M 9055 ; перенести в строки P GSB CHAS ; переразобрать расписание и обновить строку в F1 1 P GSB TEKUR ; v1.2 - коррекция 1 PP M 9047 ; разрешение записи P RM KORCHASN P M KORCHAS ; сохранить в ЭСППЗУ ; перейти к F1 1 PP M 9202 1 PP M 9203 1 RTN ;------------ OF12E0F5: ; обработка записи варианта расписания ; Ожидание 1 P M FWAIT 2 PP M 9149 ; вызвать прерывание 2 - WAIT ; выбор варианта .NUM TOF12E0F5 PP M 9042 P RM VAR PP M 9213 P X>=0 OF12E0E ; не найден номер варианта - выход 1 - M4 ; R4 = (блок данных)-1 ; запись данных из рабочей области R100 в область варианта R200...R400 100 M0 99 M5 OF12E0F5A: 1 PP M 9047 ; разрешение записи в ЭСППЗУ KRM5 KM4 PFL0 OF12E0F5A P RM VAR PP M 9203 ; номер элемента = VAR 4 PP M 9202 ; перейти в форму 4 CX P M FWAIT 1 RTN TOF12E0F5: .DB 1 .DA V1 .DB 2 .DA V2 .DB 3 .DA V3 .DB END ;--------- OF12E0F6: ; сохранение расписания на неделю .NUM NED M4 .NUM NEDI M5 7 M0 OF12E0F6A: 1 PP M 9047 KRM5 KM4 PFL0 OF12E0F6A 4 PP M 9202 CX PP M 9203 1 RTN ;--------- OF12E0F8: ; сохранение параметров звонка P RM ZIN 1 - 3 * .NUMD Z1L + M4 1 PP M 9047 P RM ZIL KM4 1 PP M 9047 P RM ZIP KM4 1 PP M 9047 P RM ZIK KM4 7 PP M 9202 P RM ZIN 1 - PP M 9203 1 RTN ;------------------------------------------ F12-E1 ; Сохранение - Нет OF12E1: CX P M FIZM .NUM TOF12E1 PP M 9042 P RM FFIZM PP M 9213 MA P X>=0 OF12E1E K GOTO A OF12E1E: CX P M FIZM 1 RTN TOF12E1: .DB 2 .DA OBRVYH2E ; выход из F2 .DB 3 .DA OBRVYH3E ; выход из F3 .DB 5 .DA OBRVYH5E ; выход из F5 .DB 6 .DA OBRVYH6E ; выход из F6 .DB 8 .DA OBRVYH8E ; выход из F8 .DB END ;------------------------------------------ F13-E0...E5 ; доп. звонки - выбор звонка 1-6 ; RA OF13E0: 1 OF13E0A: P RM STRRN ; добавить номер верхней строки (v1.5) + P M NDOPZV .NUMD DOP1 ; адрес с декрементом + MA KRMA ; звонок для настройки K INT P M DOPI KRMA K FRAC 10 * P M ZDOPI ; перенести из DOPI в строку STRNUR P GSB DOPI2STR ; перейти к форме 14 14 PP M 9202 0 PP M 9203 1 RTN OF13E1: 2 P GOTO OF13E0A OF13E2: 3 P GOTO OF13E0A OF13E3: 4 P GOTO OF13E0A OF13E4: 5 P GOTO OF13E0A OF13E5: 6 P GOTO OF13E0A ;------------------------------------------ F14-E0 ; ввод времени доп. звонка OF14E0: .NUMT DOPI ; регистр переменной DOPI OF14E0A: P M STR1REG MA KRMA P M STR1RES ; сохранить для возможного восстановления .NUMD STR1 M4 48 KM4 58 KM4 CX KM4 P M STR1UK ; указатель STR1 =0 11 PP M 9202 0 PP M 9203 1 RTN ;------------------------------------------ F14-E1 ; ввод типа доп. звонка OF14E1: 2 P M NZV ; v1.5 - номер типа доп. звонка =2 18 PP M 9202 ; F18 P RM ZDOPI PP M 9203 ; элемент - номер звонка 1 RTN ;------------------------------------------ F17-E0...E3 (v1.5) OF17E0: ; RA,RB ; выбор варианта для дня недели 0 OF17E0A: MB P RM NNED .NUML NEDI ; NUML если NEDI<100 + MA RMB KMA P RM FIZM 1 + P M FIZM ; перейти в F6 элемент NNED-1 6 PP M 9202 P RM NNED 1 - PP M 9203 1 RTN OF17E1: 1 P GOTO OF17E0A OF17E2: 2 P GOTO OF17E0A OF17E3: 3 P GOTO OF17E0A ;------------------------------------------ F18-E0...E5 (v1.5) OF18E0: ; RA ; выбор типа звонка 0 OF18E0A: MA P RM FIZM 1 + P M FIZM ; изменение P RM NZV P X=0 OF18E0B RMA P M ZUIN ; начало урока 10 PP M 9202 ; к F10E1 1 PP M 9203 RTN OF18E0B: 1 - P X=0 OF18E0C RMA P M ZUIK 10 PP M 9202 ; к F10E3 3 PP M 9203 RTN OF18E0C: RMA P M ZDOPI 14 PP M 9202 ; к F14E1 1 PP M 9203 RTN OF18E1: 1 P GOTO OF18E0A OF18E2: 2 P GOTO OF18E0A OF18E3: 3 P GOTO OF18E0A OF18E4: 4 P GOTO OF18E0A OF18E5: 5 P GOTO OF18E0A ;------------------------------------------ F19-E0...E6 (v1.5) OF19E0: ; R0,R4,RA ; выбор дня недели 1 OF19E0A: P M DNIKALEN P RM FIZM ; признак изменений 1 + P M FIZM ; записать день недели в строку .NUM TKALEN P RM DNIKALEN 3 * + PP M 9042 ; индексный регистр памяти программ .NUMD STRDEN ; с декрементом M4 3 M0 OF19E0B: PP RM 9044 KM4 PFL0 OF19E0B 2 PP M 9202 3 PP M 9203 1 RTN OF19E1: 2 P GOTO OF19E0A OF19E2: 3 P GOTO OF19E0A OF19E3: 4 P GOTO OF19E0A OF19E4: 5 P GOTO OF19E0A OF19E5: 6 P GOTO OF19E0A OF19E6: 7 P GOTO OF19E0A ;--------------------------------------------------------- Команда ВЫХОД TOBRVYHOD: ; содержит адреса п/п обработчиков для форм, независимо от номера элемента .DA 0,0,OBRVYH2E,OBRVYH3E,OBRVYH4E, .DA OBRVYH5E,OBRVYH6E,0,OBRVYH8E,0 .DA OBRVYH10E,OBRVYH11E,OBRVYH12E,0,OBRVYH14E .DA 0, 0, OBRVYH17E, OBRVYH18E, 0 ;----------------------------------------------------- F2 - выход ; Изменение даты OBRVYH2E: P RM FIZM P X=0 OBRVYH2E1 ; нет изменений 1 P GSB TEKUR ; обновить строку в F1 0 PP M 9203 1 PP M 9202 ; перейти в F1E0 1 RTN OBRVYH2E1: ; есть изменения 12 PP M 9202 ; перейти в форму 12 0 PP M 9203 ; по умолчанию - "Да" 1 RTN ;----------------------------------------------------- F3 - выход ; Изменение времени OBRVYH3E: P RM FIZM P X=0 OBRVYH3E1 ; нет изменений 1 P GSB TEKUR ; обновить строку в F1 1 PP M 9203 1 PP M 9202 ; перейти в F1E1 1 RTN OBRVYH3E1: ; есть изменения 12 PP M 9202 ; перейти в форму 12 0 PP M 9203 ; по умолчанию - "Да" 1 RTN ;----------------------------------------------------- F4 - выход ; Выход из расписания в F1 с v1.2 OBRVYH4E: P GSB KALENV ; перенести расписание в звонки 1 P GSB TEKUR ; обновить строку в F1 (v1.3) 1 PP M 9202 ; перейти в форму 1 2 PP M 9203 ; элемент 2 1 RTN ;----------------------------------------------------- F5 - выход OBRVYH5E: P RM FIZM P X=0 OBRVYH5E1 ; нет изменений P RM VAR PP M 9203 ; номер элемента = VAR 4 PP M 9202 ; перейти в форму 4 1 RTN OBRVYH5E1: ; есть изменения 12 PP M 9202 ; перейти в форму 12 0 PP M 9203 ; по умолчанию - "Да" 1 RTN ;----------------------------------------------------- F6 - выход OBRVYH6E: P RM FIZM P X=0 OBRVYH6E1 ; нет изменений CX PP M 9203 ; номер элемента 0 4 PP M 9202 ; перейти в форму 4 1 RTN OBRVYH6E1: ; есть изменения 12 PP M 9202 ; перейти в форму 12 0 PP M 9203 ; по умолчанию - "Да" 1 RTN ;----------------------------------------------------- F8 - выход OBRVYH8E: P RM FIZM P X=0 OBRVYH5E1 ; перейти в форму 12 ; нет изменений P RM ZIN 1 - PP M 9203 ; номер элемента = ZIN-1 7 PP M 9202 ; перейти в форму 7 1 RTN ;----------------------------------------------------- F10 - выход OBRVYH10E: ; автоматическое сохранение в U1N... P RM FIZM P X!=0 OBRVYH10E1 P RM NUROK 1 - 2 * .NUMD U1N + M4 1 PP M 9047 P RM UIN P RM ZUIN 10 / + KM4 ; начало урока + звонок 1 PP M 9047 P RM UIK P RM ZUIK 10 / + KM4 ; конец урока + звонок P GSB UROK ; перестроить расписание OBRVYH10E1: P RM NUROK 1 - P RM STRRN - PP M 9203 ; номер строки в форме 9 9 PP M 9202 ; перейти в форму 9 1 RTN ;----------------------------------------------------- F11 - выход ; выход из ввода времени с восстановлением данных OBRVYH11E: .NUM TOBRVYH11E PP M 9042 P RM STR1REG PP M 9213 P X>=0 OBRVYH11E1 MA K GOTO A OBRVYH11E1: 1 RTN TOBRVYH11E: .DB UIN .DA OBRVYH11UIN .DB UIK .DA OBRVYH11UIK .DB DOPI .DA OBRVYH11DOPI .DB END OBRVYH11UIN: ; восстановить UIN P RM STR1RES P M UIN ; перейти в F10 на E0 CX OBRVYH11UIN0: PP M 9203 10 PP M 9202 1 RTN OBRVYH11UIK: ; восстановить UIK P RM STR1RES P M UIK ; перейти в F10 на E2 2 P GOTO OBRVYH11UIN0 OBRVYH11DOPI: ; восстановить DOPI P RM STR1RES P M DOPI ; перейти в F13 на E0 CX PP M 9203 13 PP M 9202 1 RTN ;----------------------------------------------------- F12 - выход ; выход из формы запроса сохранения = продолжить редактирование OBRVYH12E: P RM FFIZM ; номер формы PP M 9202 CX PP M 9203 1 RTN ;----------------------------------------------------- F14 - выход ; запись доп. звонка OBRVYH14E: ; автоматическое сохранение в DOP1...DOP6 P RM FIZM P X!=0 OBRVYH14E1 P RM NDOPZV .NUMD DOP1 + MA 1 PP M 9047 P RM DOPI P RM ZDOPI 10 / + KMA ; доп. звонок = время,тип звонка P GSB DOPZV ; перестроить список OBRVYH14E1: P RM NDOPZV 1 - P RM STRRN ; (v1.5) - PP M 9203 ; номер строки в форме 13 13 PP M 9202 ; перейти в форму 13 1 RTN ;----------------------------------------------------- F17 - выход (v1.5) OBRVYH17E: P RM NNED ; текущий день недели 1 - PP M 9203 ; номер элемента = ZIN-1 6 PP M 9202 ; перейти в форму 6 1 RTN ;----------------------------------------------------- F18 - выход (v1.5) OBRVYH18E: P RM NZV P X=0 OBRVYH18E1 10 PP M 9202 1 PP M 9203 ; F10E1 (тип звонка начала урока) 1 RTN OBRVYH18E1: 1 - P X=0 OBRVYH18E2 10 PP M 9202 3 PP M 9203 ; F10E3 (тип звонка конца урока) 1 RTN OBRVYH18E2: 14 PP M 9202 1 PP M 9203 ; F14E1 (топ доп звонка) 1 RTN ;--------------------------------------------------------- Команда ВЫБОР ВНИЗ TOBRVYBD: .DA 0,0,0,0,0 .DA 0,0,0,0,TOBRVYBD9 .DA 0,0,0,TOBRVYBD13,0 .DA 0,0,0,0,0 TOBRVYBD9: .DA OBRVYBD9E0, OBRVYBD9E0, OBRVYBD9E0 ; F9 .DA OBRVYBD9E0, OBRVYBD9E0, OBRVYBD9E5 TOBRVYBD13: .DA OBRVYBD13E0, OBRVYBD13E0, OBRVYBD13E0 ; F13 .DA OBRVYBD13E0, OBRVYBD13E0, OBRVYBD13E5 ;------------------------------------------------------ F9 - звонки, выбор вниз OBRVYBD9E0: ; E0-E4 увеличить номер текущего элемента PP RM 9203 1 + PP M 9203 1 RTN OBRVYBD9E5: P RM STRRN 14 - ; ограничение количества уроков - здесь P X<0 OBRVYBD9E5E ; выход 0 без изменения P RM STRRN 1 + P M STRRN P GSB UROK ; заполнение строк STRR0...STRR5 начиная с номера урока STRRN 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBD9E5E: CX RTN ;------------------------------------------------------ F13 - доп звонки, выбор вниз OBRVYBD13E0: ; E0-E4 увеличить номер текущего элемента PP RM 9203 1 + PP M 9203 1 RTN OBRVYBD13E5: P RM STRRN 14 - ; ограничение количества звонков - здесь P X<0 OBRVYBD13E5E ; выход 0 без изменения P RM STRRN 1 + P M STRRN P GSB DOPZV ; заполнение строк STRR0...STRR5 начиная с номера STRRN 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBD13E5E: CX RTN ;--------------------------------------------------------- Команда ВЫБОР ВПРАВО TOBRVYBR: .DA 0,0,0,0,0, .DA 0,0,0,0,TOBRVYBR9 .DA 0,0,0,TOBRVYBR13,0, .DA 0,0,0,0,0 TOBRVYBR9: .DA OBRVYBR9E0, OBRVYBR9E0, OBRVYBR9E0 ; F9 .DA OBRVYBR9E0, OBRVYBR9E0, OBRVYBR9E0 TOBRVYBR13: .DA OBRVYBR13E0, OBRVYBR13E0, OBRVYBR13E0 ; F13 .DA OBRVYBR13E0, OBRVYBR13E0, OBRVYBR13E0 ;------------------------------------------------------ F9 - звонки, выбор вправо OBRVYBR9E0: PP RM 9203 5 - P X!=0 OBRVYBD9E0A 5 PP M 9203 ; сначала - прыгнуть вниз P GOTO OBRVYBD9E0D OBRVYBD9E0A: P RM STRRN 9 - ; ограничение количества уроков - здесь P X<0 OBRVYBD9E0B ; выход 0 без изменения P RM STRRN 5 + P M STRRN P GOTO OBRVYBD9E0C OBRVYBD9E0B: P RM STRRN 14 - P X!=0 OBRVYBD9E0E 14 P M STRRN OBRVYBD9E0C: P GSB UROK ; заполнение строк STRR0...STRR5 начиная с номера STRRN OBRVYBD9E0D: 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBD9E0E: CX RTN ;------------------------------------------------------ F13 - доп. звонки, выбор вправо OBRVYBR13E0: PP RM 9203 5 - P X!=0 OBRVYBD13E0A 5 PP M 9203 ; сначала - прыгнуть вниз P GOTO OBRVYBD13E0D OBRVYBD13E0A: P RM STRRN 9 - ; ограничение количества звонков - здесь P X<0 OBRVYBD13E0B ; выход 0 без изменения P RM STRRN 5 + P M STRRN P GOTO OBRVYBD13E0C OBRVYBD13E0B: P RM STRRN 14 - P X!=0 OBRVYBD13E0E 14 P M STRRN OBRVYBD13E0C: P GSB DOPZV ; заполнение строк STRR0...STRR5 начиная с номера STRRN OBRVYBD13E0D: 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBD13E0E: CX RTN ;--------------------------------------------------------- Команда ВЫБОР ВВЕРХ TOBRVYBU: .DA 0,0,0,0,0, .DA 0,0,0,0,TOBRVYBU9 .DA 0,0,0,TOBRVYBU13,0, .DA 0,0,0,0,0, TOBRVYBU9: .DA OBRVYBU9E0, OBRVYBU9E1, OBRVYBU9E1 ; F9 .DA OBRVYBU9E1, OBRVYBU9E1, OBRVYBU9E1 TOBRVYBU13: .DA OBRVYBU13E0, OBRVYBU13E1, OBRVYBU13E1 ; F13 .DA OBRVYBU13E1, OBRVYBU13E1, OBRVYBU13E1 ;------------------------------------------------------ F9 - звонки, выбор вверх OBRVYBU9E0: P RM STRRN P X!=0 OBRVYBU9E0E ; выход 0 без изменения 1 - P M STRRN P GSB UROK ; заполнение строк STRR0...STRR5 начиная с номера урока STRRN 1 RTN ; изменить строки, сохранив номер элемента 0 OBRVYBU9E0E: CX RTN OBRVYBU9E1: ; E1-E5 уменьшить номер текущего элемента PP RM 9203 1 - PP M 9203 1 RTN ;------------------------------------------------------ F3 - доп. звонки, выбор вверх OBRVYBU13E0: P RM STRRN P X!=0 OBRVYBU13E0E ; выход 0 без изменения 1 - P M STRRN P GSB DOPZV ; заполнение строк STRR0...STRR5 начиная с номера STRRN 1 RTN ; изменить строки, сохранив номер элемента 0 OBRVYBU13E0E: CX RTN OBRVYBU13E1: ; E1-E5 уменьшить номер текущего элемента PP RM 9203 1 - PP M 9203 1 RTN ;--------------------------------------------------------- Команда ВЫБОР ВЛЕВО TOBRVYBL: .DA 0,0,0,0,0, .DA 0,0,0,0,TOBRVYBL9 .DA 0,0,0,TOBRVYBL13,0, .DA 0,0,0,0,0, TOBRVYBL9: .DA OBRVYBL9E0, OBRVYBL9E0, OBRVYBL9E0 ; F9 .DA OBRVYBL9E0, OBRVYBL9E0, OBRVYBL9E0 TOBRVYBL13: .DA OBRVYBL13E0, OBRVYBL13E0, OBRVYBL13E0 ; F13 .DA OBRVYBL13E0, OBRVYBL13E0, OBRVYBL13E0 ;------------------------------------------------------ F9 - звонки, выбор влево OBRVYBL9E0: PP RM 9203 P X!=0 OBRVYBL9E0A CX PP M 9203 ; сначала - прыгнуть вверх P GOTO OBRVYBL9E0D OBRVYBL9E0A: P RM STRRN 5 - P X>=0 OBRVYBL9E0B ; выход 0 без изменения P M STRRN P GOTO OBRVYBL9E0C OBRVYBL9E0B: CX P M STRRN CX PP M 9203 OBRVYBL9E0C: P GSB UROK ; заполнение строк STRR0...STRR5 начиная с номера урока STRRN OBRVYBL9E0D: 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBL9E0E: CX RTN ;------------------------------------------------------ F13 - звонки, выбор влево OBRVYBL13E0: PP RM 9203 P X!=0 OBRVYBL13E0A CX PP M 9203 ; сначала - прыгнуть вверх P GOTO OBRVYBL13E0D OBRVYBL13E0A: P RM STRRN 5 - P X>=0 OBRVYBL13E0B ; выход 0 без изменения P M STRRN P GOTO OBRVYBL13E0C OBRVYBL13E0B: CX P M STRRN CX PP M 9203 OBRVYBL13E0C: P GSB DOPZV ; заполнение строк STRR0...STRR5 начиная с номера STRRN OBRVYBL13E0D: 1 RTN ; изменить строки, сохранив номер элемента 5 OBRVYBL13E0E: CX RTN ;=================================================== Обработка ввода числа OBRV: ; RA, P RM FIZM ; увеличить флаг изменений 1 + P M FIZM .NUM TOBRV PP M 9042 PP RM 9207 ; регистр ввода числа (до 255) PP M 9213 ; найти в TOBRV MA P X!=0 OBRVE K GOTO A ; перейти к подпрограмме RA OBRVE: RTN ; RX=0 TOBRV: .DB DIKALEN .DA OV2E0 .DB MIKALEN .DA OV2E1 .DB GIKALEN .DA OV2E2 .DB HICHAS .DA OV3E0 .DB MICHAS .DA OV3E1 .DB KORCHASN ; v1.2 .DA OV3E2 .DB ZIK .DA OV8E0 .DB ZIL .DA OV8E1 .DB ZIP .DA OV8E2 .DB END ; .DB UIN ; .DA OV10E0 - п/п используется отдельно ; .DB UIK ; .DA OV10E2 - п/п используется отдельно ; .DB DOPI ; .DA OV14E0 - п/п используется отдельно ;------------------------------------------------ F2-E0 OV2E0: ; ввод числа в календаре P RM DIKALEN K INT P M DIKALEN P X!=0 OV2E0A P X>=0 OV2E0A 32 - P X>=0 OV2E0B 31 P M DIKALEN P GOTO OV2E0B OV2E0A: 1 P M DIKALEN OV2E0B: 1 RTN ;------------------------------------------------ F2-E1 OV2E1: ; ввод месяца в календаре P RM MIKALEN K INT P M MIKALEN P X!=0 OV2E1A P X>=0 OV2E1A 13 - P X>=0 OV2E1B 12 P M MIKALEN P GOTO OV2E1B OV2E1A: 1 P M MIKALEN OV2E1B: 1 RTN ;------------------------------------------------ F2-E2 OV2E2: ; ввод года в календаре P RM GIKALEN K INT P M GIKALEN P X>=0 OV2E2A 10000 - P X>=0 OV2E2B 9999 P M GIKALEN P GOTO OV2E2B OV2E2A: CX P M GIKALEN OV2E2B: 1 RTN ;------------------------------------------------ F3-E0 OV3E0: ; ввод часов в часах P RM HICHAS K INT P M HICHAS P X>=0 OV3E0A 24 - P X>=0 OV3E0B 23 P M HICHAS P GOTO OV3E0B OV3E0A: CX P M HICHAS OV3E0B: 1 RTN ;------------------------------------------------ F3-E1 OV3E1: ; ввод минут в часах P RM MICHAS K INT P M MICHAS P X>=0 OV3E1A 60 - P X>=0 OV3E1B 59 P M MICHAS P GOTO OV3E1B OV3E1A: CX P M MICHAS OV3E1B: 1 RTN ;------------------------------------------------ F3-E2 (v1.2) OV3E2: ; RA ; ввод значения коррекции от -60 до 60 сек/сутки P RM KORCHASN MA K ABS 60 - P X>=0 OV3E2A ; выход 60 RMA K SGN * P M KORCHASN OV3E2A: 1 RTN ;------------------------------------------------ F8-E0 OV8E0: ; ввод количества звонков для звонка N P RM ZIK K INT P M ZIK P X>=0 OV8E0A 7 - P X>=0 OV8E0B 6 P M ZIK P GOTO OV8E0B OV8E0A: CX P M ZIK OV8E0B: 1 RTN ;------------------------------------------------ F8-E1 OV8E1: ; ввод длительности звонка, сек P RM ZIL 10 * K INT 10 / P M ZIL P X>=0 OV8E1A 61 - P X>=0 OV8E1B 60 P M ZIL P GOTO OV8E1B OV8E1A: CX P M ZIL OV8E1B: 1 RTN ;------------------------------------------------ F8-E2 OV8E2: ; ввод длительности паузы, сек P RM ZIP 10 * K INT 10 / P M ZIP P X>=0 OV8E2A 61 - P X>=0 OV8E2B 60 P M ZIP P GOTO OV8E2B OV8E2A: CX P M ZIP OV8E2B: 1 RTN ;------------------------------------------------ F10-E0 OV10E0: ; RA,RB ; ввод начала урока "ЧЧММ," P RM UIN K ABS 100 / K INT MA 24 - P X>=0 OV10E0A 23 MA OV10E0A: P RM UIN K ABS K INT 100 / K FRAC 100 * MB 60 - P X>=0 OV10E0B 59 MB OV10E0B: RMA 100 * RMB + P M UIN 1 RTN ;------------------------------------------------ F10-E2 OV10E2: ; RA,RB ; ввод конца урока "ЧЧММ," P RM UIK K ABS 100 / K INT MA 24 - P X>=0 OV10E2A 23 MA OV10E2A: P RM UIK K ABS K INT 100 / K FRAC 100 * MB 60 - P X>=0 OV10E2B 59 MB OV10E2B: RMA 100 * RMB + P M UIK 1 RTN ;------------------------------------------------ F14-E0 OV14E0: ; RA,RB ; ввод доп. звонка "ЧЧММ," P RM DOPI K ABS 100 / K INT MA 24 - P X>=0 OV14E0A 23 MA OV14E0A: P RM DOPI K ABS K INT 100 / K FRAC 100 * MB 60 - P X>=0 OV14E0B 59 MB OV14E0B: RMA 100 * RMB + P M DOPI 1 RTN ;==================================================== KLAVA ; Обработка нажатия на клавишу в зависимости от текущей формы ; RA - код клавиши ; RB KLAVA: .NUM TKLAVA PP M 9042 PP RM 9202 ; номер формы PP M 9213 P X>=0 KLAVAE MB K GOTO B ; перейти к подпрограмме обработки KLAVAE: CX RTN ; при RX=0 TKLAVA: .DB 11 .DA OKLF11 .DB END ;-------------------------------- F11 ; Ввод времени в STR1, указатель строки в STR1UK ; Указатель на регистр в STR1REG ; RA - код клавиши OKLF11: RMA 10 - P X>=0 OKLF11CH ; код клавиши - число, ; эта проверка упростит таблицу разбора .NUM TOKLF11 PP M 9042 RMA PP M 9213 P X>=0 OKLF11E0 ; выход 0 MB K GOTO B ; перейти к подпрограмме обработки клавиши OKLF11E0: CX OKLF11E: RTN OKLF11E1: 1 RTN TOKLF11: .DB 10 ; [,] .DA OKLF11RAZ .DB 11 ; [/-/] .DA OKLF11RAZ .DB 14 ; [B^] .DA OKLF11RAZ .DB 16 ; [-] .DA OKLF11RAZ .DB 18 ; [:] .DA OKLF11RAZ .DB 13 .DA OKLF11CX ; [Cx] .DB END OKLF11CH: ; ввод цифры P RM STR1REG MB .NUMD STR1 M4 P RM STR1UK P X=0 OKLF11CH1 ; ввод первой цифры часов RMA 48 + ;'0-9' KM4 58 ; ':' KM4 CX ;'\0' KM4 RMA ; код клавиши = цифра KMB 1 P M STR1UK P GOTO OKLF11E1 OKLF11CH1: 1 - P X=0 OKLF11CH2 ; ввод второй цифры часов KRM4 ; пропустить первую RMA 48 + KM4 58 KM4 CX KM4 KRMB 10 * RMA + KMB 2 P M STR1UK P GOTO OKLF11E1 OKLF11CH2: 1 - P X=0 OKLF11CH3 ; ввод цифры десятков минут KRM4 ; пропустить первую часов KRM4 ; пропустить вторую часов KRM4 ; пропустить двоеточие RMA 48 + KM4 CX KM4 KRMB 10 * RMA + KMB 3 P M STR1UK P GOTO OKLF11E1 OKLF11CH3: 1 - P X=0 OKLF11E1 ; пятая цифра - выйти без перерисовки ; ввод цифры минут KRM4 ; пропустить первую часов KRM4 ; пропустить вторую часов KRM4 ; пропустить двоеточие KRM4 ; пропустить десятки минут RMA 48 + KM4 CX KM4 KRMB 10 * RMA + KMB 4 P M STR1UK P GOTO OKLF11E1 ;---------------- OKLF11RAZ: ; ввод разделителя часы-минуты P RM STR1REG MB .NUMD STR1 M4 P RM STR1UK 2 - P X<0 OKLF11E1 ; ввод до цифр или после первой 2 P M STR1UK KRM4 KM4 ; переписать символ .NUMD STR1 M4 48 KM4 ; записать '0' KRM4 ; пропустить 58 KM4 CX KM4 ; число KMB менять не нужно P GOTO OKLF11E1 ;------------------------ OKLF11CX: ; сброс P RM STR1REG MB CX KMB P M STR1UK .NUMD STR1 M4 48 KM4 58 KM4 CX KM4 P GOTO OKLF11E1 ;==================================================== UIN2STR ; перенос из UIN (ЧЧММ. ) в STRNUR UIN2STR: .NUMD STRNUR ; указатель с декрементом M4 ; указатель на STR1 с учётом прединкремента P RM UIN 100 / K INT P GSB C2_R4 32 KM4 58 KM4 32 KM4 P RM UIN 100 / K FRAC 100 * P GOTO C2_0R4 ;==================================================== UIK2STR ; перенос из UIK (ЧЧММ. ) в строку STRKUR UIK2STR: .NUMD STRKUR ; указатель с декрементом M4 ; указатель на STR1 с учётом прединкремента P RM UIK 100 / K INT P GSB C2_R4 32 KM4 58 KM4 32 KM4 P RM UIK 100 / K FRAC 100 * P GOTO C2_0R4 ;==================================================== DOPI2STR ; перенос из DOPI (ЧЧММ. ) в STRNUR DOPI2STR: .NUMD STRNUR ; указатель с декрементом M4 ; указатель на STR1 с учётом прединкремента P RM DOPI 100 / K INT P GSB C2_R4 32 KM4 58 KM4 32 KM4 P RM DOPI 100 / K FRAC 100 * P GOTO C2_0R4 ;==================================================== Часы - заполнение текстовых строк CHAS: ; R0,RA,RB PP RM 9055 MA ; RA - время "ЧЧ,ММСС" P RM TCHAS - P X!=0 CHASE ; время не изменилось - выход RX=0 ; проверка состояния порта P RM FPORT 1 + P M FPORT 10 - P X>=0 CHAS00 ; прошлёл тайм-аут с момента последнего запроса 2 P M FPORT ; установить FPORT=2 CX P M FGPS ; нет GPS P M FSYN P GSB INITGGA ; повторить инициализацию CHAS00: ; коррекция хода часов v1.2 RMA K FRAC ; 0,ММСС 0,2727 - ; каждый час в 27 мин 27 сек P X=0 CHAS0 RMA K INT MB ; час коррекции P RM KORH - P X!=0 CHAS0 ; в этот час коррекция уже была RMB P M KORH P RM FGPS P X!=0 CHAS01 ; есть модуль GPS P RM FSYN P X!=0 CHAS01 ; данные UTC актуальны P RM UTC K FRAC ; время UTC 0,mmss RMA K INT ; время ЭКВМ hh,0000 + MA PP M 9055 P GOTO CHAS0 CHAS01: ; коррекция по введённому значению P RM KORS P RM KORCHAS 24 / ; каждый час 1/24 от суточной коррекции + MB K FRAC ; K{x} P M KORS RMB K INT ; K[x] P X!=0 CHAS0 ; коррекция 0 секунд - не требуется 10000 / ; 60/24 < 3 секунд - перехода через минуту не будет RMA + MA PP M 9055 ; собственно коррекция хода часов CHAS0: ; алгоритм вывода изменён v1.3 RMA P M TCHAS ; записать новое K INT MB ; RB - часы .NUMD STRH M4 RMB P GSB C2_R4 ; строка часов (без 0) .NUMD STRM M4 RMA K FRAC 100 * MB K INT P GSB C2_0R4 ; строка минут (с 0) .NUMD STRS M4 RMB K FRAC 100 * K INT P GSB C2_0R4 ; строка секунд (с 0) ; проверки форм и выход RX=-1 удален с v1.2 CHASE1: 1 ; время изменено RTN CHASE0: CX CHASE: RTN ;=================================================== Заполнение варианта расписания для текущего дня недели KALENV: ; R0, R4, R5, RB ; заполнить расписание на текущий день недели ; v1.2 - области U1NZV + DOP1ZV CX P M NTEKUR ; обнулить текущий урок при возможной смене расписания .NUMD U1NZV ; С v1.2 используется отдельная область U1NZV M4 PP RM 9059 ; день недели 1-7 .NUM NED ; расписание вариантов на неделю + MB KRMB MB ; RB - номер варианта 0-нет или 1-3 P X=0 KALENV1 100 M0 KALENV0: ; обнулить содержимое области с U1NZV ; С v1.2 U1NZV 1 PP M 9047 CX KM4 PFL0 KALENV0 P GOTO KALENVE KALENV1: 1 - P X=0 KALENV2 .NUMD V1 P GOTO KALENV4 KALENV2: 1 - P X=0 KALENV3 .NUMD V2 P GOTO KALENV4 KALENV3: .NUMD V3 KALENV4: M5 100 M0 KALENV5:CX ; переписать данные варианта с U1NZV и далее 1 PP M 9047 KRM5 KM4 PFL0 KALENV5 KALENVE: RTN ;=================================================== Календарь - заполнение текстовых строк KALEN: ; R0,R4,R5,RA,RB,RC, RD,RE PP RM 9056 MA ; RA - число 100 * PP RM 9057 MB + 10000 * PP RM 9058 MC + PP RM 9059 10 / MD + P RM DKALEN - P X!=0 KALENE ; если эта дата уже обработана - выйти RMA 100 * RMB + 10000 * RMC + RMD + P M DKALEN ; записать дату как обработанную P GSB KALENV ; переписать расписание на текущий день недели .NUMD STRDATA ; с декрементом M4 ; число PP RM 9056 P GSB C2_0R4 46 ;'.' KM4 ; месяц PP RM 9057 P GSB C2_0R4 46 ;'.' KM4 ; год PP RM 9058 100 / MA K INT P GSB C2_0R4 RMA K FRAC 100 * P GSB C2_0R4 CX ;'\0' KM4 ; день недели .NUM TKALEN PP RM 9059 3 * + PP M 9042 ; индексный регистр памяти программ .NUMD STRDEN ; с декрементом M4 3 M0 KALEN7: PP RM 9044 KM4 PFL0 KALEN7 1 KALENE: RTN TKALEN: .TEXT "??\0ПН\0ВТ\0СР\0ЧТ\0ПТ\0СБ\0ВС\0" ;=================================================== Текущий урок - заполнение текстовой строки STRUR TEKUR: ; при входе RX=0 - проверить время на 0 секунд, 1 - не проверять, но и не вырабатывать сигнал ; R0,R4,RA,RB,RC,RD,RE P M FZV P RM TCHAS ; TCHAS = текущее время из R9055 100 * MB P RM FZV P X=0 TEKUR0 ; Не 0 - запустить подпрограмму без входных проверок RMB K FRAC P X=0 TEKUR00 ; проверять только в 00 секунд P RM FZVONOK P X>=0 TEKURE ; звонок <0 - текущее время уже отработано P GOTO TEKUR0 TEKUR00: ; не 00 секунд CX P M FZVONOK ; сбросить звонок P GOTO TEKURE TEKUR0: RMB K INT MA ; RA=ЧЧММ.0 - время ; очистить строку STRTUR .NUMD STRTUR M4 CX KM4 MB ; очистить номер урока и флаги P M FTEK P M FTEKUR P M FTEKDOP 20 M0 ; всего 20 доп звонков (До v1.5 - 6) .NUMD DOP1ZV ; адрес начала доп. звонков -1 ( с v1.2 DOP1ZV) M4 TEKUR01: KRM4 MD K INT RMA ; текущее время - P X!=0 TEKUR02 ; если равно - записать звонок PFL0 TEKUR01 P GOTO TEKUR03 ; перейти к проверке уроков/перемен TEKUR02: ; найден доп. звонок - время и тип в RD P RM FZVONOK P X>=0 TEKUR03 ; если звонок <0 - не перезаписывать RMD ; время 1 K FRAC 10 * P X!=0 TEKUR03 ; тип доп. звонка "нет" - не записывать P M FZVONOK P M FZVONOK1 ; копия для вывода 1 P M FTEKDOP ; установить флаг доп. звонка P M FTEK ; установить флаг текущей информации P RM FZV P X=0 TEKURE ; при входе RX=1 - сам звонок не устанавливать P GSB ZVONOK ; установить звонок P GOTO TEKURE ; выход TEKUR03: ; Для расписания с пересекающимися уроками ; предварительно проверить _все_ звонки на точное совпадение (v1.3) CX MB ; очистить номер урока и флаги P M NUR P M FTEK P M FTEKUR 40 M0 ; всего 20 уроков .NUM U1NZV ; начало всех уроков (с v1.2 U1NZV) M4 TEKUR031: RM4 RMB + MC ; адрес для проверки KRMC MD ; время для проверки 1 RMC 1 + MC KRMC ME ; время для записи 2 RM0 1 - P X=0 TEKUR032 ; последняя проверка (время 2 отсутствует) 2400 ME ; конец перемены 20 = 24:00 TEKUR032: RMD K INT RMA - P X!=0 TEKUR1B ; если равно - записать звонок RMB 1 + MB PFL0 TEKUR031 TEKUR04: ; проверка урока/перемены CX MB ; очистить номер урока 40 M0 ; всего 20 уроков .NUM U1NZV ; начало всех уроков (с v1.2 U1NZV) M4 TEKUR1: RM4 RMB + MC ; адрес для проверки KRMC MD ; время для проверки 1 RMC 1 + MC KRMC ME ; время для проверки 2 RM0 1 - P X=0 TEKUR1C ; последняя проверка (время 2 отсутствует) 2400 ME ; конец перемены 20 = 24:00 TEKUR1C: RMA ; текущее время RMD K INT - ; P X!=0 TEKUR1B ; если равно - записать звонок (v1.3 - уже проверено) P X>=0 TEKUR1A ; перейти если текущее время меньше ; текущее время больше, чем время 1 RMA RME K INT - P X>=0 TEKUR2 ; перейти, если меньше, чем время 2 TEKUR1A: RMB 1 + MB PFL0 TEKUR1 ; таких звонков нет, возможно перед первым уроком P GOTO TEKURE TEKUR1B: ; установить признак звонка и продолжить P RM FZVONOK P X>=0 TEKUR2 ; если звонок <0 - не перезаписывать RMD ; время 1 K FRAC 10 * P M FZVONOK P M FZVONOK1 ; копия для вывода P RM FZV P X=0 TEKUR2 ; при входе RX=1 - не устанавливать RMB P M NUR ; сохранить RB P GSB ZVONOK P RM NUR MB ; восстановить RB TEKUR2: RMB 39 - P X<0 TEKURE ; если >=0 "перемену 20" не выводить RMD K INT P X!=0 TEKURE ; для "00:00" комментариев не выводить CX P M FTEKDOP ; очистить флаг доп. звонка 1 P M FTEK ; установить флаг наличия информации RMB 2 / K INT 1 + P M NTEKUR RMB 2 / K FRAC K SGN P M FTEKUR ; 0-урок, 1-перемена ; заполнить строку STRTUR начало-конец урока .NUMD STRTUR M4 RMD ; начало урока в формате ЧЧММ.Т Т-тип звонка K FRAC P X!=0 TEKUR4 ; если тип=0, то закрыть строку и выйти RMD ; время 1 100 / K INT ; часы начала P GSB C2_R4 32 ; ' ' KM4 58 ; ':' KM4 32 ; ' ' KM4 RMD 100 / K FRAC 100 * K INT ; минуты начала P GSB C2_0R4 32 KM4 45 ; '-' KM4 32 KM4 RME ; окончание урока/перемены в формате ЧЧММ.Т Т-тип звонка K FRAC P X!=0 TEKUR4 ; если тип=0, то закрыть строку и выйти RME 100 / K INT ; час окончания P GSB C2_R4 32 ; ' ' KM4 58 ; ':' KM4 32 ; ' ' KM4 RME 100 / K FRAC 100 * K INT ; минуты окончания P GSB C2_0R4 TEKUR4: CX ; '\0' KM4 TEKURE: 1 RTN ;====================================================== ZVONOK - подача звонка, инициализация цепочки прерываний. ZVONOK: ; R0,R4,RA,RB P RM FZVONOK P X>=0 ZVONOKE ; уже отработан P X!=0 ZVONOKE1 ; нулевое значение 1 - 3 * .NUMD Z1L + M4 ; адрес начала параметров звонка FZVONOK -1 KRM4 100 * MA ; продолжительность звонка FZVONOK P X!=0 ZVONOKE1 ; если нулевая - выйти KRM4 100 * MB ; продолжительность паузы FZVONOK KRM4 M0 ; число повторов FZVONOK P X!=0 ZVONOKE1 ; если нулевое - выйти .NUMD ZVON ; начало последовательности - 1 M4 ZVONOK1: RMA KM4 ; записать продолжительность звонка RMB KM4 ; записать продолжительность паузы PFL0 ZVONOK1 CX ; конец последовательности KM4 P M FZVON ; RX=0 = номер в последовательности для прерывания 1 PP M 9149 ; вызвать прерывание 1 P M FZVRIS ; RX=1 - вывести пиктограмму звонка (в форму 1) ZVONOKE1: 1 +/- P M FZVONOK ; -1 = звонок отработан ZVONOKE: RTN ;====================================================== UROK - заполнение строк расписанием уроков UROK: ; R4,R5,RA ; вывести мультипликацию часов 1 P M FWAIT 2 PP M 9149 ; вызвать прерывание 2 - WAIT P RM STRRN 2 * .NUM U1N + MA ; адрес переменной с началом верхнего урока P RM STRRN 1 + MB ; номер урока 6 M0 UROK1: P GSB UROKS ; в STR1 - подготовленная к переносу строка .NUM TUROK ; таблица начал строк формы для значения счётчика цикла R0 PP M 9042 RM0 PP M 9213 P X!=0 UROKE 1 - M4 .NUMD STR1 M5 24 M1 UROK2: KRM5 ; считать из STR1 KM4 ; записать в STRR0-STRR5 PFL1 UROK2 RMA 1 + MA ; один инкремент в UROKS RMB 1 + MB PFL0 UROK1 UROKE: ; отменить мультипликацию часов CX P M FWAIT RTN TUROK: .DB 6 .DA STRR0 .DB 5 .DA STRR1 .DB 4 .DA STRR2 .DB 3 .DA STRR3 .DB 2 .DA STRR4 .DB 1 .DA STRR5 .DB END ;======================================================= Заполнение строки STR1 данными об уроке UROKS: ; В RA - адрес переменной с началом урока ; В RB - номер урока ; R4,RC .NUMD STR1 ; указатель с декрементом M4 ; указатель на STR1 с учётом прединкремента RMB P GSB C2_R4 31 ; KM4 31 KM4 KRMA ; начало урока в формате ЧЧММ.Т Т-тип звонка K FRAC P X!=0 UROKS1; если тип=0, то перейти на "нет" KRMA 100 / K INT ; часы начала P GSB C2_R4 32 ; ' ' KM4 58 ; ':' KM4 32 ; ' ' KM4 KRMA 100 / K FRAC 100 * K INT ; минуты начала P GSB C2_0R4 32 KM4 45 ; '-' KM4 32 KM4 RMA 1 + MA KRMA ; окончание урока в формате ЧЧММ.Т Т-тип звонка 100 / K INT ; час окончания P GSB C2_R4 32 ; ' ' KM4 58 ; ':' KM4 32 ; ' ' KM4 KRMA 100 / K FRAC 100 * K INT ; минуты окончания P GSB C2_0R4 CX ; '\0' KM4 RTN UROKS1: RMA 1 + MA ; инкремент RA .NUM TUROKS PP M 9042 UROKS2: PP RM 9044 KM4 P X=0 UROKS2 RTN TUROKS: .TEXT "нет урока\0" ;==================================================== Число <100 в КП4 (с пробелом) C2_R4: ; В RX (RC) - целое число ; R4 - указатель (c учётом прединкремента), куда записать два символа MC 10 - P X<0 C2_R41 31 KM4 RMC 48 + KM4 RTN C2_R41: RMC 10 / MC K INT 48 + ; '0' KM4 RMC K FRAC 10 * 48 + ; '0' KM4 RTN ;==================================================== Число <100 в КП4 (с нулём) C2_0R4: ; В RX (RC) - целое число ; R4 - указатель (c учётом прединкремента), куда записать два символа MC 10 - P X<0 C2_0R41 48 ; '0' KM4 RMC K INT 48 + KM4 RTN C2_0R41: RMC 10 / MC K INT 48 + ; '0' KM4 RMC K FRAC 10 * 48 + ; '0' KM4 RTN ;====================================================== DOPZV - заполнение строк доп. звонками DOPZV: ; R4,R5,RA ; вывести мультипликацию часов 1 P M FWAIT 2 PP M 9149 ; вызвать прерывание 2 - WAIT .NUM DOP1 P RM STRRN ; номер доп. звонка 1 для верхней строки = 0 (v1.5) + MA ; адрес переменной с 1-м доп. звонком P RM STRRN 1 + MB ; номер звонка 6 M0 DOPZV1: P GSB DOPZVS ; в STR1 - подготовленная к переносу строка .NUM TUROK ; таблица начал строк формы для значения счётчика цикла R0 (аналогично п/п UROK) PP M 9042 RM0 PP M 9213 P X!=0 DOPZVE 1 - M4 .NUMD STR1 M5 24 M1 DOPZV2: KRM5 ; считать из STR1 KM4 ; записать в STRR0-STRR5 PFL1 DOPZV2 RMA 1 + MA RMB 1 + MB PFL0 DOPZV1 DOPZVE: ; отменить мультипликацию часов CX P M FWAIT RTN ;======================================================= Заполнение строки STR1 данными о доп. звонке DOPZVS: ; В RA - адрес переменной с доп. звонком ; В RB - номер ; R4,RC .NUMD STR1 ; указатель с декрементом M4 ; указатель на STR1 с учётом прединкремента RMB P GSB C2_R4 31 ; KM4 31 KM4 KRMA ; доп. звонок в формате ЧЧММ.Т Т-тип звонка K FRAC P X!=0 DOPZVS1; если тип=0, то перейти на "нет" KRMA 100 / K INT ; часы начала P GSB C2_R4 32 ; ' ' KM4 58 ; ':' KM4 32 ; ' ' KM4 KRMA 100 / K FRAC 100 * K INT ; минуты начала P GSB C2_0R4 CX ; '\0' KM4 RTN DOPZVS1: .NUM TDOPZVS PP M 9042 DOPZVS2: PP RM 9044 KM4 P X=0 DOPZVS2 RTN TDOPZVS: .TEXT "нет звонка\0" ; ================================================= Считывание данных с модуля GPS (v1.2) INITGGA: ; инициализировать приём данных 0 PP M 9085 ; буфер приёма, смещение 0 PP M 9086 ; обнулить первый байт 1 PP M 9076 ; Начать приём данных RTN READGGA: ; Приём окончен, количество принятых байт в R9075, ; пакет для обработки в буфере приёма (R9086-R9089) CX PP M 9085 ; Индексный регистр буфера приёма, запись 0 - выбрать первый байт PP RM 9087 ; Считать первый байт P X!=0 READGGAN ; Если равен 0 - нет модуля 36 - ; '$' P X=0 READGGA1 ; если нет - нет синхронизации P GSB GPGGA ; Найти в буфере строку "GPGGA," (для модуля GPS) P X!=0 READGGA1 ; Если строка не найдена - нет синхронизации P GSB LCHIS ; Считать числовое поле K INT 10000 / P M UTC ; Время UTC в формате hh,mmss 5 P GSB LPOLE ; пропустить 5 полей P GSB LCHIS ; Считать поле Satellites Used P M SU 1 P M FGPS ; Модуль есть P M FSYN RTN READGGA1: CX P M FSYN RTN READGGAN: CX P M FGPS ; сбросить флаг наличия GPS RTN ; ================================================== Поиск пакета GPGGA GPGGA: ; Поиск строки "GPGGA," PP RM 9085 ; индекс буфера приёма 250 - P X!=0 EGPGGA ; Выход RX=0 PP RM 9087 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA PP RM 9087 ; считать очередной байт из пакета 80 - ; 'P' ('L'=76) P X=0 GPGGA PP RM 9087 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA PP RM 9087 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA PP RM 9087 ; считать очередной байт из пакета 65 - ; 'A' P X=0 GPGGA PP RM 9087 ; считать очередной байт из пакета 44 - ; ',' P X=0 GPGGA 1 ; RX=1 EGPGGA: RTN ;=================================== LCHIS: ; Считать числовое поле пакета NMEA в RA ; Используются RA, RB, RC CX MA ; число MB ; признак точки LCHIS1: PP RM 9087 ; считать очередной байт из пакета MC 44 - ; ','=44 P X!=0 ELCHIS 2 - ; '.'=46 P X=0 LCHIS2 ; точка RMB P X=0 LCHIS1 ; Если одна точка уже была - игнорировать 10 MB ; Коэффициент деления P GOTO LCHIS1 LCHIS2: RMB P X!=0 LCHIS3 ; если точка уже была RB!=0 RMC 48 - ; Предполагаемые значения от '0' до '9' RMB / RMA + MA RMB 10 * MB P GOTO LCHIS1 LCHIS3: RMA 10 * RMC 48 - ; Предполагаемые значения от '0' до '9' + MA P GOTO LCHIS1 ELCHIS: RMA RTN ;========== LPOLE: ; пропустить RX полей в пакете ; RA MA LPOLE1: PP RM 9087 ; считать очередной байт из пакета 44 - ; ','=44 P X=0 LPOLE1 RMA 1 - MA P X=0 LPOLE1 RTN ;======================================================= ;======================================================= Инициализация структур программы INITPROG: CX 2 PP M 9048 ; 1- автоматический запуск, 2 - с блокировкой С/П, 0 - отладка 2 PP M 9010 ; инициализация графического экрана 1 PP M 9200 ; 1 - разрешение интерфейса 16 PP M 9202 ; стартовое меню - 16 (вместо 0 - v1.2) 0 PP M 9203 ; активный элемент - 0 .NUM TFORM PP M 9201 ; главная таблица форм TFORM 20 ; (на единицу больше номера последней формы) P M VSEGOF ; количество форм в программе (не считая служебных) 64 PP M 9208 ; нарисовать форму при старте 25 P M TCHAS ; невозможное время P GSB CHAS ; заполнить строки CX P M DKALEN ; невозможная дата P GSB KALEN ; заполнить строки даты 1 PP M 9148 ; сброс всех прерываний PP M 9130 ; разрешение прерываний .NUM TIMER ENT 1 PP M 9131 ; Прерывание 1, приоритет 1, вектор TIMER ; 1 PP M 9150 ; Разрешить аппаратное прерывание таймера 0 CX PP M 9171 ; отключение мультиплексора АЦП (если он есть) 1 PP M 9090 ; режим параллельного порта - статический 1 PP M 9093 ; тип операции CX P M FZVRIS ; сбросить пиктограмму звонка P M FTEK ; признак наличия сообщения P M FWAIT ; признак ожидания P M KORS ; накопление долей секунд коррекции (v1.2) 25 P M KORH ; заполнить час последней коррекции невозможным значением (v1.2) P GSB KALENV ; заполнить область расписания для текущего дня недели 1 P GSB TEKUR ; заполнить строки и флаги F1 независимо от времени ; v1.2 для КПА-03 .NUM FONT5 PP M 9009 ; адрес загружаемого шрифта 5 CX ; P M FGPS ; УСОМК-5 (модуль GPS) 0-нет 1-есть P M FSYN ; Нет синхронизации P M SU ; Число спутников - 0 P M FPORT ; (v1.3) ; Порт Стык С2 PP M 9072 ; Установить режим 8 бит 7 PP M 9071 ; Установить скорость 4800 8 PP M 9073 ; Задержка между байтами в ответе 8*1,25=10 мс. 1 PP M 9070 ; Разрешение порта, запись 1 - разрешение использования порта ЭКВМ ; подождать ещё 3 секунды (с возможностью выхода) - для чтения информации F16 CX PP M 9029 ; очистка буфера клавиатуры 300 PP M 9051 ; таймер 1 INIT1: PP RM 9029 K NOT P X=0 INIT2 PP RM 9051 P X=0 INIT1 INIT2: .NUM PORT ENT 2 PP M 9132 ; Прерывание 2, приоритет 2, вектор PORT ; 2 PP M 9155 ; Разрешить аппаратное прерывание порта ;P GSB INITGGA ; Запустить ожидание ; установить прерывание таймера 1 .NUM WAIT ENT 3 PP M 9133 ; Прерывание 3, приоритет 3, вектор WAIT ;3 PP M 9151 ; Разрешить аппаратное прерывание таймера 1 ; перейти к F1E0 1 PP M 9202 0 PP M 9203 1 RTN ;======================================================= Прерывание 1 - таймер 0 - звонок TIMER: P RM FZVON ; номер шага .NUM ZVON + MA KRMA MB ; содержимое P X!=0 TIMER1 ; если 0 - конец последовательности PP M 9050 ; не ноль - перезапустить этот таймер P RM FZVON 2 / K FRAC P X=0 TIMER2 ; нечётное значение - пауза ; звонок 1000 RMB PP M 9052 ; звук 1 PP M 9092 ; срабатывание реле выходов 1 и 2 устройства УСОМК P GOTO TIMERE TIMER1: ; окончание последовательности 1 P M FTIMER ; установить флаг срабатывания таймера TIMER2: ; пауза 7 PP M 9092 ; отключение реле выходов 1 и 2 устройства УСОМК TIMERE: P RM FZVON 1 + P M FZVON ; инкремент номера шага PP RTN ;===================================================== OTIMER OTIMER: ; обработка окончания цепочки прерываний таймера CX P M FTIMER ; сбросить флаг срабатывания таймера P M FZVRIS ; убрать пиктограмму P M FZVON ; очистить счётчик 1 P GSB TEKUR ; заполнение строк независимо от времени RTN ;======================================================= Прерывание 2 - таймер 1 - вывод рисунка WAIT: PP RM FWAIT P X!=0 WAITE ; если 0 - выйти без перезапуска таймера ; вывести кадр 24 ENT 56 PP M 9000 CX PP M 9001 PP RM FWAIT 1 - 34 * .NUM RISWAIT + PP M 9015 K GRPH 30 PP M 9051 ; перезапустить таймер 1 P RM FWAIT 1 + P M FWAIT 7 - P X=0 WAITE 1 P M FWAIT WAITE: PP RTN ; ====================== Прерывание последовательного порта PORT: P GSB READGGA ; перенести данные P RM FGPS P X!=0 PORTE P GSB INITGGA CX P M FPORT ; очистить таймер тайм-аута 1 P M FSYN ; данные актуальны PORTE: PP RTN ; ====================================================== Главная таблица форм TFORM: ;.DB 0 ; Форма 0 "Стартовое меню" - нет с v1.2 ;.DA F0 .DB 1 ; Форма 1 "Подача звонков" - основная .DA F1 .DB 2 ; Форма 2 "Изменение даты" .DA F2 .DB 3 ; Форма 3 "Изменение времени" .DA F3 .DB 4 ; Форма 4 "Расписание" .DA F4 .DB 5 ; Форма 5 "Вариант" .DA F5 .DB 6 ; Форма 6 "На неделю" .DA F6 .DB 7 ; Форма 7 "Настройка звонков" .DA F7 .DB 8 ; Форма 8 "Звонок N" .DA F8 .DB 9 ; Форма 9 "Уроки" .DA F9 .DB 10 ; Форма 10 "Начало и конец урока N" .DA F10 .DB 11 ; Форма 11 "Ввод времени" .DA F11 .DB 12 ; Форма 12 "Сохранить изменения?" .DA F12 .DB 13 ; Форма 13 "Дополнительные звонки" .DA F13 .DB 14 ; Форма 14 "Доп. звонок N" .DA F14 ;.DB 15 ; Форма 15 "Расписание на сегодня" - нет с v1.2 ;.DA F15 .DB 16 ; Форма 16 "О программе" .DA F16 .DB 17 ; Форма 17 "Выбор номера расписания для дня недели" (v1.5) .DA F17 .DB 18 ; Форма 18 "Выбор типа звонка" (v1.5) .DA F18 .DB 19 ; Форма 19 "Выбор дня недели" (v1.5) .DA F19 .DB 252 ; Форма 252 "Ошибка формы" .DA F252 .DB END ; F0 ====================================================== Стартовое меню, Форма 0 ; Удалена v1.2 ; F1 ====================================================== "Подача звонков", Форма 1 .BASE F1: .DB 2 ;максимальный номер элемента .DBB F1DE, F1PI, F1PO, F1PL, F1PR, F1RI, F1KM F1DE: ;таблица флагов действий .DB 13,13,5 ; 00 01(вых) 01(вв) 01(выб) = 21 = выбор + ввод + выход, 29 = с признаком ввода ; 5 - выбор + ввод, 13 - с признаком ввода F1PI: .DB 2,0,3,0,4,0 F1PO: .DB 1,0,1,1,1,2 F1PL: .DB 2,0,1 F1PR: .DB 1,2,0 F1RI: ; рисунок экранной формы .DB TYPE, 2 ; шрифт 2 .DB TAB, 20, 12 ; позиция .DB TXTB, 16 ; TXTB - строка в области двоичных данных .DA STRH ; час .DB TAB, 50, 12 ; позиция .DB TXTP, 16 .DA F1TDV ; : .DB TAB, 60, 12 ; позиция .DB TXTB, 16 .DA STRM ; минуты .DB TYPE, 1 ; шрифт 1 .DB TAB, 90, 19 ; позиция .DB TXTB, 16 .DA STRS ; секунды .DB JNEZ .DA FGPS .DBB F1RI00 .DB JM .DBB F1RI01 F1RI00: .DB TAB, 112, 0 .DB DRAWR, 0 .DA RISANT ; КПА-03 .DB TYPE, 254 ; шрифт 254 .DB TAB, 120, 0 .DB PREXP, 16 .DA SU F1RI01: .DB TYPE, 0h ; шрифт 0 .DB TAB, 20, 0 ; позиция .DB TXTB, 16 .DA STRDATA ; дата .DB TAB, 86, 0 ; позиция .DB TXTB, 16 .DA STRDEN ; день недели .DB TAB, 10, 36 ; позиция .DB TXTP, 16 .DA F4TZ ; расписание .DB TAB, 10, 48 ; позиция .DB JNEZ .DA FTEK ; перейти если есть информация .DBB F1RI0 .DB END F1RI0: .DB JNEZ .DA FTEKDOP ; перейти если доп звонок .DBB F1RI3 .DB JNEZ .DA FTEKUR .DBB F1RI1 .DB TXTP, 16 .DA F1STR1 ; урок .DB JM .DBB F1RI2 F1RI1: .DB TXTP, 16 .DA F1STR2 ; перемена F1RI2: .DB PREXP, 16 .DA NTEKUR ; номер урока/перемены .DB JM .DBB F1RI4 F1RI3: .DB TXTP, 16 .DA F1STR3 ; доп звонок F1RI4: .DB TAB, 10, 56 ; позиция .DB TXTB, 16 ; .DA STRTUR ; время .DB JNEZ .DA FZVRIS ; флаг пиктограммы звонка .DBB F1RI5 .DB END F1RI5: ; вывод пиктограммы .DB TAB, 100, 56 .DB DRAWR, 0 .DA ZVRIS3 .DB TAB, 110, 56 .DB PREXP, 16 ; тип звонка - копия для вывода .DA FZVONOK1 .DB END F1KM: .DBB F1KM0, F1KM1, F1KM2 F1KM0: .DB TAB, 0, 1 .DB JM .DBB F1KME F1KM1: .DB TAB, 0, 19 .DB JM .DBB F1KME F1KM2: .DB TAB, 0, 37 F1KME: .DB DRAWR, 0 .DA UK1 .DB END F1TDV: .TEXT ":\0" F1STR1: .TEXT "Урок \0" F1STR2: .TEXT "Перемена \0" F1STR3: .TEXT "Дополнительный звонок\0" UK1: .DB 4h,8h .DB 7Fh .DB 3Eh .DB 1Ch .DB 8h ; F2 ====================================================== "Изменение даты", Форма 2 .BASE F2: .DB 3 ;максимальный номер элемента .DBB F2DE, F2PI, F2PO, F2PL, F2PR, F2RI, F2KM F2DE: ;таблица флагов действий .DB 53,53,53,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 53 - с обр выхода, 61 - с обр ввода и выхода F2PI: .DB 254,0,254,0,254,0,2,3 F2PO: .DB 1,0,1,0,1,0,1,0 F2PL: .DB 3,0,1,2 F2PR: .DB 1,2,3,0 F2RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 30, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F2TZ ; наименование .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 0, 16 .DB TXTP, 16 .DA F2T0 .DB TAB, 64, 16 .DB PREXP, 16 .DA DIKALEN .DB TAB, 0, 26 .DB TXTP, 16 .DA F2T1 .DB TAB, 64, 26 .DB PREXP, 16 .DA MIKALEN .DB TAB, 0, 36 .DB TXTP, 16 .DA F2T2 .DB TAB, 64, 36 .DB PREXP, 16 .DA GIKALEN .DB TAB, 0, 46 .DB TXTP, 16 .DA F2T3 .DB TAB, 64, 46 .DB TXTB, 16 .DA STRDEN .DB END F2KM: .DBB F2KM0, F2KM1, F2KM2, F2KM3 F2KM0: .DB TAB, 63, 15 .DB LDADR .DA DIKALEN .DB JM .DBB F2KME F2KM1: .DB TAB, 63, 25 .DB LDADR .DA MIKALEN .DB JM .DBB F2KME F2KM2: .DB TAB, 63, 35 .DB LDADR .DA GIKALEN .DB JM .DBB F2KME F2KM3: .DB TAB, 63, 45 F2KME: .DB SQU, 3, 64, 10 .DB END F2TZ: .TEXT "Изменение даты\0" F2T0: .TEXT "День\0" F2T1: .TEXT "Месяц\0" F2T2: .TEXT "Год\0" F2T3: .TEXT "День недели\0" ; F3 ====================================================== "Изменение времени", Форма 3 .BASE F3: .DB 2 ;максимальный номер элемента (2 для v1.2) .DBB F3DE, F3PI, F3PO, F3PL, F3PR, F3RI, F3KM F3DE: ;таблица флагов действий .DB 53,53,53 ; 00 01 01 01 = 21 = выбор + ввод + выход, 53 - с обработкой выхода F3PI: .DB 254,0,254,0,254,0 F3PO: .DB 1,1,1,1,1,1 F3PL: .DB 2,0,1 F3PR: .DB 1,2,0 F3RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 24, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F3TZ ; наименование .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 0, 16 .DB TXTP, 16 .DA F3T0 .DB TAB, 64, 16 .DB PREXP, 16 .DA HICHAS .DB TAB, 0, 26 .DB TXTP, 16 .DA F3T1 .DB TAB, 64, 26 .DB PREXP, 16 .DA MICHAS .DB TAB, 0, 46 .DB TXTP, 16 .DA F3T2 .DB TAB, 0, 56 .DB TXTP, 16 .DA F3T3 .DB TAB, 64, 56 .DB PREXP, 16 .DA KORCHASN ; настройка коррекции .DB END F3KM: .DBB F3KM0, F3KM1, F3KM2 F3KM0: .DB TAB, 63, 15 .DB LDADR .DA HICHAS .DB JM .DBB F3KME F3KM1: .DB TAB, 63, 25 .DB LDADR .DA MICHAS .DB JM .DBB F3KME F3KM2: .DB TAB, 63, 55 .DB LDADR .DA KORCHASN F3KME: .DB SQU, 3, 64, 10 .DB END F3TZ: .TEXT "Изменение времени\0" F3T0: .TEXT "Часы\0" F3T1: .TEXT "Минуты\0" F3T2: .TEXT "Коррекция хода часов\0" F3T3: .TEXT "сек/сутки\0" ; F4 ====================================================== "Расписание", Форма 4 .BASE F4: .DB 4 ;максимальный номер элемента .DBB F4DE, F4PI, F4PO, F4PL, F4PR, F4RI, F4KM F4DE: ;таблица флагов действий .DB 61,61,61,61,53 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 53 - с обр выхода, 61 - ввода и выхода F4PI: .DB 6,0,5,0,5,0,5,0,7,0 F4PO: .DB 1,2,1,2,1,2,1,2,1,2 ; v1.2 - выход в F1 F4PL: .DB 4,0,1,2,3 F4PR: .DB 1,2,3,4,0 F4RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 38, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F4TZ ; наименование .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F4T0 .DB TAB, 2, 26 .DB TXTP, 16 .DA F4T1 .DB TAB, 2, 36 .DB TXTP, 16 .DA F4T2 .DB TAB, 2, 46 .DB TXTP, 16 .DA F4T3 .DB TAB, 2, 56 .DB TXTP, 16 .DA F4T4 .DB END F4KM: .DBB F4KM0, F4KM1, F4KM2, F4KM3, F4KM4 F4KM0: .DB TAB, 0, 15 .DB JM .DBB F4KME F4KM1: .DB TAB, 0, 25 .DB JM .DBB F4KME F4KM2: .DB TAB, 0, 35 .DB JM .DBB F4KME F4KM3: .DB TAB, 0, 45 .DB JM .DBB F4KME F4KM4: .DB TAB, 0, 55 F4KME: .DB SQU, 3, 127, 10 .DB END F4TZ: .TEXT "Расписание\0" F4T0: .TEXT "На неделю\0" F4T1: .TEXT "Вариант 1\0" F4T2: .TEXT "Вариант 2\0" F4T3: .TEXT "Вариант 3\0" F4T4: .TEXT "Настройка звонков\0" ; F5 ====================================================== "Вариант", Форма 5 .BASE F5: .DB 1 ;максимальный номер элемента .DBB F5DE, F5PI, F5PO, F5PL, F5PR, F5RI, F5KM F5DE: ;таблица флагов действий .DB 61,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой F5PI: .DB 4,0,4,0 F5PO: .DB 4,0,4,0 F5PL: .DB 1,0 F5PR: .DB 1,0 F5RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 16, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F5TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA VAR ; номер варианта .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F5T0 .DB TAB, 2, 26 .DB TXTP, 16 .DA F5T1 .DB END F5KM: .DBB F5KM0, F5KM1 F5KM0: .DB TAB, 0, 15 .DB JM .DBB F5KME F5KM1: .DB TAB, 0, 25 F5KME: .DB SQU, 3, 127, 10 .DB END F5TZ: .TEXT "Вариант расписания \0" F5T0: .TEXT "Уроки\0" F5T1: .TEXT "Дополнительные звонки\0" ; F6 ====================================================== "Расписание на неделю", Форма 6 .BASE F6: .DB 6 ;максимальный номер элемента .DBB F6DE, F6PI, F6PO, F6PL, F6PR, F6RI, F6KM F6DE: ;таблица флагов действий .DB 61,61,61,61, 61,61,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, ; 61 - с обработкой ввода и выхода F6PI: F6PO: .DB 4,0,4,0,4,0,4,0, 4,0,4,0,4,0 F6PL: .DB 6,0,1,2,3,4,5 F6PR: .DB 1,2,3,4,5,6,0 F6RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 2, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F6TZ ; наименование .DB TAB, 82, 0 ; позиция .DB TXTP, 16 ; .DA F6TZ1 ; наименование1 .DB TAB, 2, 8 ; позиция .DB TXTP, 16 .DA F6T0 .DB TAB, 96, 8 .DB PREXP, 16 .DA NED1I ; вариант для понедельника .DB TAB, 2, 16 .DB TXTP, 16 .DA F6T1 .DB TAB, 96, 16 .DB PREXP, 16 .DA NED2I ; вариант для вторника .DB TAB, 2, 24 .DB TXTP, 16 .DA F6T2 .DB TAB, 96, 24 .DB PREXP, 16 .DA NED3I ; вариант для среды .DB TAB, 2, 32 .DB TXTP, 16 .DA F6T3 .DB TAB, 96, 32 .DB PREXP, 16 .DA NED4I ; вариант для четверга .DB TAB, 2, 40 .DB TXTP, 16 .DA F6T4 .DB TAB, 96, 40 .DB PREXP, 16 .DA NED5I ; вариант для пятницы .DB TAB, 2, 48 .DB TXTP, 16 .DA F6T5 .DB TAB, 96, 48 .DB PREXP, 16 .DA NED6I ; вариант для субботы .DB TAB, 2, 56 .DB TXTP, 16 .DA F6T6 .DB TAB, 96, 56 .DB PREXP, 16 .DA NED7I ; вариант для воскресенья .DB END F6KM: .DBB F6KM0, F6KM1, F6KM2, F6KM3, F6KM4, F6KM5, F6KM6 F6KM0: .DB TAB, 0, 8 .DB JM .DBB F6KME F6KM1: .DB TAB, 0, 16 .DB JM .DBB F6KME F6KM2: .DB TAB, 0, 24 .DB JM .DBB F6KME F6KM3: .DB TAB, 0, 32 .DB JM .DBB F6KME F6KM4: .DB TAB, 0, 40 .DB JM .DBB F6KME F6KM5: .DB TAB, 0, 48 .DB JM .DBB F6KME F6KM6: .DB TAB, 0, 56 F6KME: .DB SQU, 3, 127, 8 .DB END F6TZ: .TEXT "День недели\0" F6TZ1: .TEXT "Вариант\0" F6T0: .TEXT "Понедельник\0" F6T1: .TEXT "Вторник\0" F6T2: .TEXT "Среда\0" F6T3: .TEXT "Четверг\0" F6T4: .TEXT "Пятница\0" F6T5: .TEXT "Суббота\0" F6T6: .TEXT "Воскресенье\0" ; F7 ====================================================== "Настройка звонков", Форма 7 .BASE F7: .DB 4 ;максимальный номер элемента .DBB F7DE, F7PI, F7PO, F7PL, F7PR, F7RI, F7KM F7DE: ;таблица флагов действий .DB 29,29,29,29,29 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода F7PI: F7PO: .DB 4,4,4,4,4,4,4,4,4,4 F7PL: .DB 4,0,1,2,3 F7PR: .DB 1,2,3,4,0 F7RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 20, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F7TZ ; наименование .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F7T0 .DB TAB, 64, 16 .DB PREXP, 16 .DA Z1K .DB JNEZ .DA Z1K .DBB F7RI1 .DB JM .DBB F7RI2 F7RI1: .DB MCALL .DBB F7S0 .DB PREXP, 16 .DA Z1L .DB MCALL .DBB F7S1 F7RI2: .DB TAB, 2, 26 .DB TXTP, 16 .DA F7T1 .DB TAB, 64, 26 .DB PREXP, 16 .DA Z2K .DB JNEZ .DA Z2K .DBB F7RI3 .DB JM .DBB F7RI4 F7RI3: .DB MCALL .DBB F7S0 .DB PREXP, 16 .DA Z2L .DB MCALL .DBB F7S1 F7RI4: .DB TAB, 2, 36 .DB TXTP, 16 .DA F7T2 .DB TAB, 64, 36 .DB PREXP, 16 .DA Z3K .DB JNEZ .DA Z3K .DBB F7RI5 .DB JM .DBB F7RI6 F7RI5: .DB MCALL .DBB F7S0 .DB PREXP, 16 .DA Z3L .DB MCALL .DBB F7S1 F7RI6: .DB TAB, 2, 46 .DB TXTP, 16 .DA F7T3 .DB TAB, 64, 46 .DB PREXP, 16 .DA Z4K .DB JNEZ .DA Z4K .DBB F7RI7 .DB JM .DBB F7RI8 F7RI7: .DB MCALL .DBB F7S0 .DB PREXP, 16 .DA Z4L .DB MCALL .DBB F7S1 F7RI8: .DB TAB, 2, 56 .DB TXTP, 16 .DA F7T4 .DB TAB, 64, 56 .DB PREXP, 16 .DA Z5K .DB JNEZ .DA Z5K .DBB F7RI9 .DB END F7RI9: .DB MCALL .DBB F7S0 .DB PREXP, 16 .DA Z5L .DB MCALL .DBB F7S1 .DB END F7S0: .DB TXTP, 16 .DA F7TZ1 .DB RETUM F7S1: .DB TXTP, 16 .DA F7TZ2 .DB RETUM F7KM: .DBB F7KM0, F7KM1, F7KM2, F7KM3, F7KM4 F7KM0: .DB TAB, 0, 15 .DB JM .DBB F7KME F7KM1: .DB TAB, 0, 25 .DB JM .DBB F7KME F7KM2: .DB TAB, 0, 35 .DB JM .DBB F7KME F7KM3: .DB TAB, 0, 45 .DB JM .DBB F7KME F7KM4: .DB TAB, 0, 55 F7KME: .DB SQU, 3, 50, 10 .DB END F7TZ: .TEXT "Настройка звонков\0" F7TZ1: .TEXT " (\0" F7TZ2: .TEXT " сек.)\0" F7T0: .TEXT "Звонок 1\0" F7T1: .TEXT "Звонок 2\0" F7T2: .TEXT "Звонок 3\0" F7T3: .TEXT "Звонок 4\0" F7T4: .TEXT "Звонок 5\0" ; F8 ====================================================== "Звонок", Форма 8 .BASE F8: .DB 3 ;максимальный номер элемента .DBB F8DE, F8PI, F8PO, F8PL, F8PR, F8RI, F8KM F8DE: ;таблица флагов действий .DB 53,53,53,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 1-выбор, 2-обр выбор, 4-ввод, 8-обр ввод, 16-выход, 32-обр выход ; 53 - с обр выхода, 61 - с обр ввода и выхода F8PI: .DB 254,0,254,0,254,0,7,0 F8PO: .DB 7,0,7,0,7,0,7,0 F8PL: .DB 3,0,1,2 F8PR: .DB 1,2,3,0 F8RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 40, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F8TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA ZIN ; номер звонка для настройки .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F8T0 .DB TAB, 80, 16 .DB PREXP, 16 .DA ZIK ; количество .DB TAB, 2, 26 .DB TXTP, 16 .DA F8T1 .DB TAB, 80, 26 .DB PREXP, 16 .DA ZIL ; длительность звонка, сек .DB TXTP, 16 .DA F8TS .DB TAB, 2, 36 .DB TXTP, 16 .DA F8T2 .DB TAB, 80, 36 .DB PREXP, 16 .DA ZIP ; длительность паузы, сек .DB TXTP, 16 .DA F8TS .DB TAB, 2, 46 .DB TXTP, 16 .DA F8T3 .DB END F8KM: .DBB F8KM0, F8KM1, F8KM2, F8KM3 F8KM0: .DB TAB, 78, 15 .DB LDADR .DA ZIK .DB JM .DBB F8KME F8KM1: .DB TAB, 78, 25 .DB LDADR .DA ZIL .DB JM .DBB F8KME F8KM2: .DB TAB, 78, 35 .DB LDADR .DA ZIP F8KME: .DB SQU, 3, 46, 10 .DB END F8KM3: .DB TAB, 0, 45 .DB SQU, 3, 127, 10 .DB END F8TZ: .TEXT "Звонок \0" F8T0: .TEXT "Количество\0" F8T1: .TEXT "Длительность\0" F8TS: .TEXT " сек.\0" F8T2: .TEXT "Пауза\0" F8T3: .TEXT "Проверка\0" ; F9 ====================================================== "Уроки", Форма 9 .BASE F9: .DB 5 ;максимальный номер элемента .DBB F9DE, F9PI, F9PO, F9PL, F9PR, F9RI, F9KM F9DE: ;таблица флагов действий .DB 31,31,31,31,31,31 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 31 - с обработкой ввода и выбора F9PI: .DB 10,0,10,0,10,0,10,0,10,0,10,0 F9PO: .DB 5,0,5,0,5,0,5,0,5,0,5,0 F9PL: .DB 5,0,1,2,3,4 F9PR: .DB 1,2,3,4,5,0 F9RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 20, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F9TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA VAR ; номер варианта .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 ; .DB TXTB, 16 ; .DA STRR0 ; .DB TAB, 2, 24 ; .DB TXTB, 16 ; .DA STRR1 ; .DB TAB, 2, 32 ; .DB TXTB, 16 ; .DA STRR2 ; .DB TAB, 2, 40 ; .DB TXTB, 16 ; .DA STRR3 ; .DB TAB, 2, 48 ; .DB TXTB, 16 ; .DA STRR4 ; .DB TAB, 2, 56 ; .DB TXTB, 16 ; .DA STRR5 ; .DB END F9KM: .DBB F9KM0, F9KM1, F9KM2, F9KM3, F9KM4, F9KM5 F9KM0: .DB TAB, 0, 16 .DB JM .DBB F9KME F9KM1: .DB TAB, 0, 24 .DB JM .DBB F9KME F9KM2: .DB TAB, 0, 32 .DB JM .DBB F9KME F9KM3: .DB TAB, 0, 40 .DB JM .DBB F9KME F9KM4: .DB TAB, 0, 48 .DB JM .DBB F9KME F9KM5: .DB TAB, 0, 56 F9KME: .DB SQU, 3, 127, 8 .DB END F9TZ: .TEXT "Уроки, вариант \0" ; F10 ====================================================== "Начало и конец урока N", Форма 10 .BASE F10: .DB 3 ;максимальный номер элемента .DBB F10DE, F10PI, F10PO, F10PL, F10PR, F10RI, F10KM F10DE: ;таблица флагов действий .DB 61,61,61,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 1-выбор, 2-обр выбор, 4-ввод, 8-обр ввод, 16-выход, 32-обр выход ; 53 - с обр выхода, 61 - с обр ввода и выхода F10PI: F10PO: .DB 9,0,9,0,9,0,9,0, F10PL: .DB 3,0,1,2 F10PR: .DB 1,2,3,0 F10RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 20, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F10TZ0 ; "Вариант" .DB PREXP, 16 ; PREXP - число .DA VAR ; номер варианта .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F10TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA NUROK ; номер урока .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F10T0 .DB TAB, 80, 16 .DB TXTB, 16 .DA STRNUR ; начало .DB TAB, 2, 25 .DB TXTP, 16 .DA F10T1 .DB TAB, 86, 25 .DB JNEZ .DA ZUIN .DBB F10RI1 .DB TXTP, 16 .DA F10T4 .DB JM .DBB F10RI2 F10RI1: .DB PREXP, 16 .DA ZUIN ; звонок начала F10RI2: .DB TAB, 2, 37 .DB TXTP, 16 .DA F10T2 .DB TAB, 80, 37 .DB TXTB, 16 .DA STRKUR ; конец .DB TAB, 2, 46 .DB TXTP, 16 .DA F10T1 .DB TAB, 86, 46 .DB JNEZ .DA ZUIK .DBB F10RI3 .DB TXTP, 16 .DA F10T4 .DB JM .DBB F10RI4 F10RI3: .DB PREXP, 16 .DA ZUIK ; звонок конца F10RI4: .DB END F10KM: .DBB F10KM0, F10KM1, F10KM2, F10KM3 F10KM0: .DB TAB, 78, 15 .DB JM .DBB F10KME F10KM1: .DB TAB, 78, 24 .DB JM .DBB F10KME F10KM2: .DB TAB, 78, 36 .DB JM .DBB F10KME F10KM3: .DB TAB, 78, 45 F10KME: .DB SQU, 3, 64, 10 .DB END F10TZ0: .TEXT "Вариант \0" F10TZ: .TEXT ", урок \0" F10T0: .TEXT "Начало\0" F10T1: .TEXT " звонок\0" F10T2: .TEXT "Конец\0" F10T4: .TEXT "нет\0" ; F11 ====================================================== "Ввод времени ЧЧ:ММ", Форма 11 ; Ввод-вывод через STR1, перехват клавиатуры .BASE F11: .DB 0 ;максимальный номер элемента .DBB F11DE, F11PI, F11PO, F11PL, F11PR, F11RI, F11KM F11DE: ;таблица флагов действий .DB 189 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 1-выбор, 2-обр выбор, 4-ввод, 8-обр ввод, 16-выход, 32-обр выход ; 64 - периодическое обновление, 128 - запрет очистки ; 189 - с обр ввода и выхода, с запретом очистки F11PI: .DB 10,0 F11PO: .DB 10,0 F11PL: .DB 0 F11PR: .DB 0 F11RI: ; рисунок экранной формы .DB TAB, 13, 39 .DB SQU, 4, 102, 22 ; вывод инверсного прямоугольника .DB TAB, 14, 40 .DB FRAME, 0, 100, 20 ; вывод рамки .DB TYPE, 1 ; шрифт 1 .DB TAB, 42, 44 .DB TXTB, 16 .DA STR1 .DB END F11KM: .DBB F11KM0 F11KM0: .DB END ; F12 ====================================================== "Сохранить изменения?", Форма 12 .BASE F12: .DB 1 ;максимальный номер элемента .DBB F12DE, F12PI, F12PO, F12PL, F12PR, F12RI, F12KM F12DE: ;таблица флагов действий .DB 189,189 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 1-выбор, 2-обр выбор, 4-ввод, 8-обр ввод, 16-выход, 32-обр выход ; 64 - периодическое обновление, 128 - запрет очистки ; 189 - с обр ввода и выхода, с запретом очистки F12PI: .DB 0,0,0,0 F12PO: .DB 0,0,0,0 F12PL: .DB 1,0 F12PR: .DB 1,0 F12RI: ; рисунок экранной формы .DB TAB, 3, 19 .DB SQU, 4, 122, 42 ; вывод инверсного прямоугольника .DB TAB, 4, 20 .DB FRAME, 0, 120, 40 ; вывод рамки .DB TYPE, 0 ; шрифт 0 .DB TAB, 12, 24 .DB TXTP, 16 .DA F12TZ .DB TAB, 30, 40 .DB TXTP, 16 .DA F12T0 .DB TAB, 70, 40 .DB TXTP, 16 .DA F12T1 .DB END F12KM: .DBB F12KM0, F12KM1 F12KM0: .DB TAB, 28, 39 .DB SQU, 3, 17, 10 .DB END F12KM1: .DB TAB, 68, 39 .DB SQU, 3, 21, 10 .DB END F12TZ: .TEXT "Сохранить изменения?\0" F12T0: .TEXT "ДА\0" F12T1: .TEXT "НЕТ\0" ; F13 ====================================================== "Дополнительные звонки", Форма 13 .BASE F13: .DB 5 ;максимальный номер элемента .DBB F13DE, F13PI, F13PO, F13PL, F13PR, F13RI, F13KM F13DE: ;таблица флагов действий .DB 31,31,31,31,31,31 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 31 - с обработкой ввода и выбора F13PI: .DB 14,0,14,0,14,0,14,0,14,0,14,0 F13PO: .DB 5,1,5,1,5,1,5,1,5,1,5,1 F13PL: .DB 5,0,1,2,3,4 F13PR: .DB 1,2,3,4,5,0 F13RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 10, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F13TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA VAR ; номер варианта .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 ; .DB TXTB, 16 ; .DA STRR0 ; .DB TAB, 2, 24 ; .DB TXTB, 16 ; .DA STRR1 ; .DB TAB, 2, 32 ; .DB TXTB, 16 ; .DA STRR2 ; .DB TAB, 2, 40 ; .DB TXTB, 16 ; .DA STRR3 ; .DB TAB, 2, 48 ; .DB TXTB, 16 ; .DA STRR4 ; .DB TAB, 2, 56 ; .DB TXTB, 16 ; .DA STRR5 ; .DB END F13KM: .DBB F13KM0, F13KM1, F13KM2, F13KM3, F13KM4, F13KM5 F13KM0: .DB TAB, 0, 16 .DB JM .DBB F13KME F13KM1: .DB TAB, 0, 24 .DB JM .DBB F13KME F13KM2: .DB TAB, 0, 32 .DB JM .DBB F13KME F13KM3: .DB TAB, 0, 40 .DB JM .DBB F13KME F13KM4: .DB TAB, 0, 48 .DB JM .DBB F13KME F13KM5: .DB TAB, 0, 56 F13KME: .DB SQU, 3, 127, 8 .DB END F13TZ: .TEXT "Доп. звонки, вариант \0" ; F14 ====================================================== "Доп. звонок N", Форма 14 .BASE F14: .DB 1 ;максимальный номер элемента .DBB F14DE, F14PI, F14PO, F14PL, F14PR, F14RI, F14KM F14DE: ;таблица флагов действий .DB 61,61 ; 00 01 01 01 = 21 = выбор + ввод + выход, 29 - с обработкой ввода ; 1-выбор, 2-обр выбор, 4-ввод, 8-обр ввод, 16-выход, 32-обр выход ; 53 - с обр выхода, 61 - с обр ввода и выхода F14PI: F14PO: .DB 13,0,13,0 F14PL: .DB 1,0 F14PR: .DB 1,0 F14RI: ; рисунок экранной формы .DB TYPE, 0 ; шрифт 0 .DB TAB, 5, 0 ; позиция .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F14TZ0 ; "Вариант" .DB PREXP, 16 ; PREXP - число .DA VAR ; номер варианта .DB TXTP, 16 ; TXTP - строка в области памяти программ .DA F14TZ ; наименование .DB PREXP, 16 ; PREXP - число .DA NDOPZV ; номер доп. звонка .DB TAB, 0, 10 .DB SQU, 0, 127, 1 .DB TAB, 2, 16 .DB TXTP, 16 .DA F14T0 .DB TAB, 80, 16 .DB TXTB, 16 .DA STRNUR ; время доп. звонка .DB TAB, 2, 25 .DB TXTP, 16 .DA F14T1 .DB TAB, 86, 25 .DB JNEZ .DA ZDOPI .DBB F14RI1 .DB TXTP, 16 .DA F14T4 .DB JM .DBB F14RI2 F14RI1: .DB PREXP, 16 .DA ZDOPI ; звонок начала F14RI2: .DB END F14KM: .DBB F14KM0, F14KM1 F14KM0: .DB TAB, 78, 15 .DB JM .DBB F14KME F14KM1: .DB TAB, 78, 24 F14KME: .DB SQU, 3, 64, 10 .DB END F14TZ0: .TEXT "Вариант \0" F14TZ: .TEXT ", доп. звонок \0" F14T0: .TEXT "Время подачи\0" F14T1: .TEXT " звонок\0" F14T4: .TEXT "нет\0" ; F15 ====================================================== "Расписание на сегодня", Форма 15 ; Удалена v1.2 ; F16 ================================================== Информация о программе, форма 16 .BASE F16: .DB 0 ;максимальный номер элемента .DBB F16DE, F16PI, F16PO, F16PL, F16PR, F16RI, F16KM F16DE: ;таблица флагов действий .DB 20 ; 00 01 01 00 = выбор + выход F16PI: .DB 0,0 F16PO: .DB 0,0 F16PL: .DB 0 F16PR: .DB 0 F16RI: ; рисунок экранной формы .DB TYPE, 0h ; шрифт 0 .DB TAB, 0, 0 ; позиция .DB TXTP, 16 .DA F16T0 .DB TAB, 0, 8 ; позиция .DB TXTP, 16 .DA F16T1 .DB TAB, 0, 16 ; позиция .DB TXTP, 16 .DA F16T2 .DB TAB, 0, 24 ; позиция .DB TXTP, 16 .DA F16T3 .DB TAB, 0, 32 ; позиция .DB TXTP, 16 .DA F16T4 .DB TAB, 0, 48 ; позиция .DB TXTP, 16 .DA F16T5 .DB END F16KM: .DBB F16KM0 F16KM0: .DB END F16T0: .TEXT "КПА-02, КПА-03\0" F16T1: .TEXT "Программа предназначена\0" F16T2: .TEXT "для управления подачей\0" F16T3: .TEXT "звонков при помощи ЭКВМ\0" F16T4: .TEXT "ЭЛЕКТРОНИКА МК\0" F16T5: .TEXT "Версия 1.5 от 05.03.2012\0" ; F17 ====================================================== "Выбор расписания для дня недели", Форма 17 (v1.5) .BASE F17: .DB 3 ;максимальный номер элемента .DBB F17DE, F17PI, F17PO, F17PL, F17PR, F17RI, F17KM F17DE: ;таблица флагов действий .DB 189,189,189,189 ; 00 01 01 01 = 21 = выбор + ввод + выход, ; 61 - с обработкой ввода и выхода ; +128 - запрет очистки экрана F17PI: F17PO: .DB 6,0,6,0,6,0,6,0 F17PL: .DB 3,0,1,2 F17PR: .DB 1,2,3,0 F17RI: ; рисунок экранной формы ; границы .DB TAB, 10, 30 ; позиция .DB SQU, 4, 108, 30 ; очистка .DB TAB, 10, 30 ; позиция .DB FRAME, 0, 108, 30 ; рамка .DB TYPE, 0 ; шрифт 0 .DB TAB, 32, 32 ; позиция .DB TXTP, 16 ; .DA F17TZ ; заголовок .DB TYPE, 1 ; шрифт 1 .DB TAB, 20, 43 ; позиция .DB TXTP, 16 ; .DA F17T0 ; "нет" .DB TAB, 60, 43 ; позиция .DB TXTP, 16 ; .DA F17T1 ; "1" .DB TAB, 80, 43 ; позиция .DB TXTP, 16 ; .DA F17T2 ; "2" .DB TAB, 100, 43 ; позиция .DB TXTP, 16 ; .DA F17T3 ; "3" .DB END F17KM: .DBB F17KM0, F17KM1, F17KM2, F17KM3 F17KM0: .DB TAB, 16, 42 .DB SQU, 3, 32, 15 .DB END F17KM1: .DB TAB, 58, 42 .DB JM .DBB F17KME F17KM2: .DB TAB, 78, 42 .DB JM .DBB F17KME F17KM3: .DB TAB, 98, 42 F17KME: .DB SQU, 3, 12, 15 .DB END F17TZ: .TEXT "Выбор варианта\0" F17T0: .TEXT "Нет\0" F17T1: .TEXT "1\0" F17T2: .TEXT "2\0" F17T3: .TEXT "3\0" ; F18 ====================================================== "Выбор типа звонка", Форма 18 (v1.5) .BASE F18: .DB 5 ;максимальный номер элемента .DBB F18DE, F18PI, F18PO, F18PL, F18PR, F18RI, F18KM F18DE: ;таблица флагов действий .DB 189,189,189,189,189,189 ; 00 01 01 01 = 21 = выбор + ввод + выход, ; 61 - с обработкой ввода и выхода ; +128 - запрет очистки экрана F18PI: F18PO: .DB 8,0,8,0,8,0,8,0,8,0,8,0 F18PL: .DB 5,0,1,2,3,4 F18PR: .DB 1,2,3,4,5,0 F18RI: ; рисунок экранной формы ; границы .DB TAB, 0, 30 ; позиция .DB SQU, 4, 127, 30 ; очистка .DB TAB, 0, 30 ; позиция .DB FRAME, 0, 127, 30 ; рамка .DB TYPE, 0 ; шрифт 0 .DB TAB, 20, 32 ; позиция .DB TXTP, 16 ; .DA F18TZ ; заголовок .DB TYPE, 1 ; шрифт 1 .DB TAB, 10, 43 ; позиция .DB TXTP, 16 ; .DA F18T0 ; "нет" .DB TAB, 42, 43 ; позиция .DB TXTP, 16 ; .DA F18T1 ; "1" .DB TAB, 58, 43 ; позиция .DB TXTP, 16 ; .DA F18T2 ; "2" .DB TAB, 74, 43 ; позиция .DB TXTP, 16 ; .DA F18T3 ; "3" .DB TAB, 90, 43 ; позиция .DB TXTP, 16 ; .DA F18T4 ; "3" .DB TAB, 106, 43 ; позиция .DB TXTP, 16 ; .DA F18T5 ; "3" .DB END F18KM: .DBB F18KM0, F18KM1, F18KM2, F18KM3, F18KM4, F18KM5 F18KM0: .DB TAB, 6, 42 .DB SQU, 3, 32, 15 .DB END F18KM1: .DB TAB, 40, 42 .DB JM .DBB F18KME F18KM2: .DB TAB, 56, 42 .DB JM .DBB F18KME F18KM3: .DB TAB, 72, 42 .DB JM .DBB F18KME F18KM4: .DB TAB, 88, 42 .DB JM .DBB F18KME F18KM5: .DB TAB, 104, 42 F18KME: .DB SQU, 3, 12, 15 .DB END F18TZ: .TEXT "Выбор типа звонка\0" F18T0: .TEXT "Нет\0" F18T1: .TEXT "1\0" F18T2: .TEXT "2\0" F18T3: .TEXT "3\0" F18T4: .TEXT "4\0" F18T5: .TEXT "5\0" ; F19 ====================================================== "Выбор дня недели", Форма 19 (v1.5) .BASE F19: .DB 6 ;максимальный номер элемента .DBB F19DE, F19PI, F19PO, F19PL, F19PR, F19RI, F19KM F19DE: ;таблица флагов действий .DB 157,157,157,157,157,157,157 ; 00 01 01 01 = 21 = выбор + ввод + выход, ; 29 - с обработкой ввода ; 61 - с обработкой ввода и выхода ; +128 - запрет очистки экрана F19PI: F19PO: .DB 2,3,2,3,2,3,2,3,2,3,2,3,2,3 F19PL: .DB 6,0,1,2,3,4,5 F19PR: .DB 1,2,3,4,5,6,0 F19RI: ; рисунок экранной формы ; границы .DB TAB, 0, 30 ; позиция .DB SQU, 4, 127, 30 ; очистка .DB TAB, 0, 30 ; позиция .DB FRAME, 0, 127, 30 ; рамка .DB TYPE, 0 ; шрифт 0 .DB TAB, 36, 32 ; позиция .DB TXTP, 16 ; .DA F19TZ ; заголовок .DB TAB, 10, 46 ; позиция .DB TXTP, 16 ; .DA F19T0 ; "ПН" .DB TAB, 26, 46 ; позиция .DB TXTP, 16 ; .DA F19T1 ; "ВТ" .DB TAB, 42, 46 ; позиция .DB TXTP, 16 ; .DA F19T2 ; "СР" .DB TAB, 58, 46 ; позиция .DB TXTP, 16 ; .DA F19T3 ; "ЧТ" .DB TAB, 74, 46 ; позиция .DB TXTP, 16 ; .DA F19T4 ; "ПТ" .DB TAB, 90, 46 ; позиция .DB TXTP, 16 ; .DA F19T5 ; "СБ" .DB TAB, 106, 46 ; позиция .DB TXTP, 16 ; .DA F19T6 ; "ВС" .DB END F19KM: .DBB F19KM0, F19KM1, F19KM2, F19KM3, F19KM4, F19KM5, F19KM6 F19KM0: .DB TAB, 8, 45 .DB JM .DBB F19KME F19KM1: .DB TAB, 24, 45 .DB JM .DBB F19KME F19KM2: .DB TAB, 40, 45 .DB JM .DBB F19KME F19KM3: .DB TAB, 56, 45 .DB JM .DBB F19KME F19KM4: .DB TAB, 72, 45 .DB JM .DBB F19KME F19KM5: .DB TAB, 88, 45 .DB JM .DBB F19KME F19KM6: .DB TAB, 104, 45 F19KME: .DB SQU, 3, 15, 10 .DB END F19TZ: .TEXT "День недели\0" F19T0: .TEXT "ПН\0" F19T1: .TEXT "ВТ\0" F19T2: .TEXT "СР\0" F19T3: .TEXT "ЧТ\0" F19T4: .TEXT "ПТ\0" F19T5: .TEXT "СБ\0" F19T6: .TEXT "ВС\0" ;============================================= Ошибка интерфейса - форма 252 ; Сообщение об ошибке STR1 в форме RB элемент RC ; В отлаженной программе эта форма не вызывается .BASE F252: .DB 0 ;максимальный номер элемента .DBB F252DE, F252PI, F252PO, F252PL, F252PR, F252RI, F252KM F252DE: ;таблица флагов действий .DB 20 ; 00 01 01 00 = выбор + выход F252PI: .DB 0,2, F252PO: .DB 0,2, F252PL: .DB 0 F252PR: .DB 0 F252RI: ; рисунок экранной формы .DB TYPE, 0h ; шрифт 0 .DB TAB, 12, 0 ; позиция .DB TXTP, 16 .DA F252T0 .DB TAB, 0, 16 ; позиция .DB TXTP, 16 .DA F252T1 .DB TAB, 0, 24 ; позиция .DB TXTP, 16 .DA F252T2 .DB TAB, 60, 16 ; позиция .DB PRFORM, 16 .DB 0, 11 ; RB формат 3.0 - форма .DB 3, 0 .DB TAB, 60, 24 ; позиция .DB PRFORM, 16 .DB 0, 12 ; RС формат 3.0 - элемент .DB 3, 0 .DB TAB, 0, 48 ; позиция .DB TXTB, 16 .DA STR1 ; текст из STR1 .DB END F252KM: .DBB F252KM0 F252KM0: .DB END F252T0: .TEXT "ОШИБКА ИНТЕРФЕЙСА\0" F252T1: .TEXT "Форма\0" F252T2: .TEXT "Элемент\0" ;======================================= Кадры рисунка часов RISWAIT: .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 1, 80h .DB 5, 0A0h .DB 1Dh, 0B8h .DB 35h, 0A4h .DB 75h, 0A2h .DB 0F5h, 0A1h .DB 0F5h, 0A1h .DB 75h, 0A2h .DB 35h, 0A4h .DB 1Dh, 0B8h .DB 5, 0A0h .DB 1, 80h .DB 1, 80h .DB 0FFh, 0FFh .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 1, 80h .DB 5, 0A0h .DB 1Dh, 0B8h .DB 35h, 0A4h .DB 75h, 0A2h .DB 0E5h, 0B1h .DB 0C5h, 0B9h .DB 75h, 0A2h .DB 35h, 0A4h .DB 1Dh, 0B8h .DB 5, 0A0h .DB 1, 80h .DB 1, 80h .DB 0FFh, 0FFh .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 1, 80h .DB 5, 0A0h .DB 1Dh, 0B8h .DB 25h, 0A4h .DB 65h, 0B2h .DB 0C5h, 0BBh .DB 0E5h, 0B9h .DB 65h, 0B2h .DB 25h, 0A4h .DB 1Dh, 0B8h .DB 5, 0A0h .DB 1, 80h .DB 1, 80h .DB 0FFh, 0FFh .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 1, 80h .DB 5, 0A0h .DB 1Dh, 0B8h .DB 25h, 0B4h .DB 45h, 0BAh .DB 0C5h, 0B9h .DB 0C5h, 0B9h .DB 45h, 0BAh .DB 25h, 0B4h .DB 1Dh, 0B8h .DB 5, 0A0h .DB 1, 80h .DB 1, 80h .DB 0FFh, 0FFh .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 1, 80h .DB 5, 0A0h .DB 1Dh, 0B8h .DB 25h, 0B4h .DB 45h, 0BAh .DB 85h, 0BDh .DB 85h, 0BDh .DB 45h, 0BAh .DB 25h, 0B4h .DB 1Dh, 0B8h .DB 5, 0A0h .DB 1, 80h .DB 1, 80h .DB 0FFh, 0FFh .DB 10h, 10h .DB 0FFh, 0FFh .DB 1, 80h .DB 0F9h, 09Fh .DB 91h, 8Fh .DB 91h, 8Fh .DB 0A1h, 87h .DB 41h, 83h .DB 81h, 81h .DB 81h, 81h .DB 41h, 82h .DB 21h, 84h .DB 11h, 88h .DB 11h, 88h .DB 0F9h, 09Fh .DB 1, 80h .DB 0FFh, 0FFh ZVRIS3: .DB 8, 8 .DB 0 .DB 20h .DB 7Ch .DB 3Eh .DB 3Ch .DB 20h .DB 0 .DB 0 ; v1.2 для КПА-03 (+ GPL) RISANT: .DB 8, 8 .DB 1 .DB 2 .DB 4 .DB 7Fh .DB 4 .DB 2 .DB 1 .DB 0 ; Шрифт 5 - только цифры .BASE FONT5: .DB 5 ; высота шрифта .DB 32,2 .DB 0 .DBB CHAR32 ; 48-57 цифры .DB 48,3 .DB 0 .DBB CHAR48 .DB 49,3 .DB 0 .DBB CHAR49 .DB 50,3 .DB 0 .DBB CHAR50 .DB 51,3 .DB 0 .DBB CHAR51 .DB 52,3 .DB 0 .DBB CHAR52 .DB 53,3 .DB 0 .DBB CHAR53 .DB 54,3 .DB 0 .DBB CHAR54 .DB 55,3 .DB 0 .DBB CHAR55 .DB 56,3 .DB 0 .DBB CHAR56 .DB 57,3 .DB 0 .DBB CHAR57 .DB 255 CHAR32: .DB 0,0 CHAR48: .DB 1Fh,11h,1Fh CHAR49: .DB 12h,1Fh,10h CHAR50: .DB 19h,15h,13h CHAR51: .DB 11h,15h,1Fh CHAR52: .DB 7,4,1Fh CHAR53: .DB 17h,15h,1Dh CHAR54: .DB 1Eh,15h,1Dh CHAR55: .DB 1,1Dh,3 CHAR56: .DB 1Bh,15h,1Bh CHAR57: .DB 17h,15h,0Fh .END