User Tag List

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 21 по 30 из 59

Тема: Разработка нового ПО для Специалиста

  1. #21

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем, победил я парсер команд... Даже двумя способами. Первый, используя пробел в качестве разделителя создаем массив со списком всех команд, которые есть в языке программирования. На и затем последовательно сравниваем первое слово введенной команды с каждым значением из списка. Если буквы не совпали - счетчик списка команд уменьшить на один, и, если команды еще есть, перейти к первому следующему разделителю и сравнить снова. Иначе команды нет. Плюс такого способа очевиден -100% гарантия нахождения нужного значения в массиве, если оно там есть. С другой стороны, имеем балласт в виде этого самого массива и не самый быстрый способ поиска нужного токена. Второй - просто присвиваем каждой букве значение от 1 до 23 (в латинице же 22 буквы?) и просто вычисляем сумму букв в первом слове (если это не число). Так как 6*23 даст 138, то для всех команд более чем хватит. Сразу получаем токен. Плюсы очевидны - нет массива со списком команд, поиск быстрее, да и считать все буквы нет необходимости - главное получить уникальный токен для конкретной команды. И еще есть возможность использовать команды длинной до 11 символов.... Есть где разгуляться. А вот потом я чуток присел. Для BASIC нужен текстовый буфер, место для переменных - благо искать по имени я уже научился, стек GOSUB, место под счетчики циклов, ух... Короче BASIC пока полежит в сторонке - редактор ассемблера будет написать проще, как мне кажется. Текстовый буфер, область трансляции, область для меток... На вскидку все. От этого и буду плясать. А там посмотрим, как пойдет. Сейчас проблема ввод команды сделать - курсор, новый символ, перемещение по строке, удаление символа ну и все в этом духе. При этом в мыслях сделать редактор а-ля Spectrum-BASIC, то есть внизу экран ввода команды, а сверху набранный листинг. Но вообще в перспективе все-таки хочется нормальный редактор с привычным меню - ассемблирование, запуск, просмотр облака меток ну и все в таком духе. Планов масса - хватило бы терпения )

    Эти 2 пользователя(ей) поблагодарили Zidane за это полезное сообщение:

    CityAceE(31.08.2025), Outcast(31.08.2025)

  2. #22

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ковыряю дальше.. Оказалось, парсер фигня, да и спеременными придумал как разобраться. Настоящим приключением стало написание редактора строк. Даже не редктора текста, а именно редактора строк ) По образцу ZX Spectrum. Ну да не суть. В процессе разработки пришел к следующему: $01 - удалить символ перед курсором, $03- вставить пробел после курсора, $0D - ввод команды, $08 - курсор влево, $18 - курсор вправо. И все худо-бедно даже заработало, без лишних пробелов в водимой команде после редактирования.
    Вылез другой вопрос: при вводе символов подпрограмма $c812 возвращает только коды латиницы в нижнем регистре. И никак с этим ладу дать не могу. Вне зависимости от состояния РУС/ЛАТ и клавиши НР всегда возвращается фиксированный набор кодов... И вот тут встал вопрос - а как? Самый простой вариент - переписать подпрограмму вывода символов с полного нуля, работая с таблицей символов размером в 256 байт. Тогда туда войдет все. А конкретный код определять по состоянию флагов chars и register, состояние которых, собственно, определяет, как обрабатывается символ с кодом большим чем $39. То есть все коды до $39 включительно обрабатываются "как есть", а остальные вычисляются. Возможно в Монитор так и делается, я не вникал. Минусы очевидны - программа набранная в таком знакогенераторе только с его же помощью и будет нормально отображаться, что не есть гут... Может укого какие предложения есть, как опросить клавиатуру на предмет нужного кода в зависимости от состояния РУС/ЛАТ и регистра букв? Хотя сам я скорее всего сделаю так, как написал, но спросить тоже надо, может я чего криво думаю.

    Этот пользователь поблагодарил Zidane за это полезное сообщение:

    CityAceE(28.10.2025)

  3. #23

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,651
    Поблагодарили
    574 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Может укого какие предложения есть, как опросить клавиатуру на предмет нужного кода в зависимости от состояния РУС/ЛАТ и регистра букв?
    Я как раз делал фикс прошивки. Она учитывает и регистр, и раскладку.
    С уважением, Станислав.

  4. #24

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, еще как раз мысли по поводу переменных. Выделить под них место, ну это понятно. Имя переменной - до 6 символов. А вот тут вопрос, включать ли в имя переменной возможность ввода кириллицы. Так то логически вроде незачем - одна буква в другой раскладке и ищи ошбку )) Далее, разделение переменных на строковые и числовые. Надо. Но вот в качестве выделения строковых переменных в начале ставить символ$, а не в конце имени. Тогда парсер по вервому символу увидит, что за значение перед ним. Далее, самый трудный для меня вопрос - управление переменными. Ну в общем-то понятно, что переменные, в процыессе работы программы, меняют длину значения. То есть выделять фиксированное место под каждую переменную смысла нет - если новая длина будет больше, чем начальное значение, а уже за этой переменной дописана новая, да еще и не одна... Мысль такая: редактируемую переменную скопировать в буфер. Далее, собрать оставшиеся значения (сдвинуть к началу массива) на длину скопированного значения. Затем, после выполнения операций с переменной дописать метку и новое значение в конец массива данных. В качестве разделителя использовать какой-нибудь неиспользуемый код. Особых мысле по этому поводу не было, но например код FF, но можно и 0... В общем нужно подумать. При таком способе хранения данных отпадает необходимость хранить длину переменной - и так можно посчитать, массив будет динамически менять свой размер в процессе работы программы, без конфликта адресов в случае превышения длины исходного значения, да и пустых мест в массиве практически не будет, кроме разделителей. Но это сугубо имхо. Пока еще не писал, но мысль развивается именно в этом направлении.

  5. #25

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Собственно вопрос. При работе в эмуляторе (специалист) в справке к клавише Shift на PC привязана клавиша НР. Только вот опросить её не получается - подпрограмма $c812 никак не реагирует на нажатие НР (Shift). Как опросить эту кнопку? Ну и вообще конкретную кнопку на клавиатуре?

  6. #26

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    403
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Zidane, прямой опрос портов ВВ55 клавиатуры?

  7. #27

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    Zidane, прямой опрос портов ВВ55 клавиатуры?
    В общем-то вопрос и был: как? Где почитать? А то платформа как черный ящик практически

  8. #28

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,651
    Поблагодарили
    574 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Ну и вообще конкретную кнопку на клавиатуре?
    Использовать стандартную процедуру загрузчика 0xC337. Она возвращает в регистре A (остальные регистры не портятся) готовый код символа, уже с учётом раскладки (РУС/ЛАТ) и регистра (НР).

    Цитата Сообщение от Zidane Посмотреть сообщение
    В общем-то вопрос и был: как? Где почитать? А то платформа как черный ящик практически
    На мой взгляд, это избыточно. Ну а так, вот, например, для начала.
    С уважением, Станислав.

  9. #29

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Использовать стандартную процедуру загрузчика 0xC337. Она возвращает в регистре A (остальные регистры не портятся) готовый код символа, уже с учётом раскладки (РУС/ЛАТ) и регистра (НР).
    Я уже где-то писал, что в эмуляторе Специалиста эта фишка не работает. Просто услышал в ответ - "сам дурак", ну и забросил. По крайней мере ни в одной версии эмуляторов Emu80 которую я скачивал, это не работает. Нажатие на Shift звук издает, а вот кода никакого не возвращает. То бишь последовательность вызовов $C337 ($C812) и затем $C815 не делает ничего. Просто ждет очередного нажатия на клавишу. Поэтому и пришлось разбираться с железом.

    А вот за ссыль спасибо.
    Последний раз редактировалось Zidane; 03.11.2025 в 14:47.

  10. #30

    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    5,215
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    706
    Спасибо Благодарностей получено 
    1,651
    Поблагодарили
    574 сообщений
    Mentioned
    50 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zidane Посмотреть сообщение
    Я уже где-то писал, что в эмуляторе Специалиста эта фишка не работает.
    В эмуляторе всё работает на 99%, как на реальном Специалисте. И уж точно подпрограмма 0xC337 точно работает именно так, как она работает на реале.
    Клавиша Shift не передаёт никакого кода. У неё в принципе нет никакого кода по текущей парадигме Загрузчика Специалиста, который и обслуживает, клавиатуру.

    Для чего вообще отдельно отслеживать Shift? Вызываем 0xC337. Если была нажата клавиша <1>, то подпрограмма вернёт код "1". Если мы нажимаем <SHIFT> + <1>, то подпрограмма вернёт код "!".
    На алфавитные клавиши дополнительно влияет и раскладка РУС/ЛАТ.

    То есть нет необходимости как-то отдельно отслеживать РУС/ЛАТ и SHIFT.
    С уважением, Станислав.

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 73
    Последнее: 18.07.2025, 08:42
  2. Разработка платы FPGA Специалиста
    от CityAceE в разделе Специалист
    Ответов: 22
    Последнее: 03.07.2025, 07:06
  3. Ответов: 153
    Последнее: 16.12.2021, 19:07
  4. Разработка НОВОГО клона
    от MegaMyth в разделе Несортированное железо
    Ответов: 311
    Последнее: 01.08.2008, 21:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •