Итак, моя цель - написать подпрограмму, которая, когда вызываемая зависает, до тех пор, пока пользователь не введет строку, завершенную <return>
, которая затем вернется (возможно, написав ее на адрес, указанный пользователем).Как лучше всего получить символ с клавиатуры на DCPU16
Моя проблема заключается в том, как лучше всего получить отдельные символы с клавиатуры. Как я вижу, есть 3 способа:
Слушайте прерывания с клавиатуры и получите символ в ответ на эти сообщения. Это означало бы, что логика, выполняемая
getline
, будет в обработчике прерываний, которые, похоже, вызывают некоторые проблемы. например, как вы возвращаетесь сgetline
в ответ на нажатие клавиши<return>
? У вас нет обратного адреса, когда он находится в обработчике прерываний. Кроме того, мне кажется, что шаблон слишком сложной конкретной логики в обработчике прерываний ... неправильный ... хотя я очень неопытен в низкоуровневом кодировании.Просто держите клавиатуру за нажатие клавиши.
Внедрение старого поведения 1.1 с помощью обработчика прерываний путем загрузки всех символов, нажатых в круговой буфер (возможно, длины 1).
Некоторые более перспективные варианты этих вариантов были бы хороши.
Я очень ценю ваш ответ, но, боюсь, я не совсем понимаю все это. Я записал некоторые из вопросов, которые возникали у меня во время чтения, но было слишком долго, чтобы быть здесь. Я разместил его здесь: http://pastebin.com/Nwq5qRSU Если вам так хочется, вы можете подробно рассказать о некоторых из них. –
@andvin, если этот ответ работает, вы должны действительно принять ответ и изучить, почему он работает. Для меня совершенно ясно, что он делает, возможно, вам стоит начать более базовый уровень сборки dcpu-16 0x10c Forum и 0x010c wiki, чтобы получить учебные пособия. – booyaa
@booyaa Я понимаю основы сборки и инструкции. Я также могу написать рабочую функцию getline. У меня проблемы с тем, как лучше всего это сделать. Судя по нетривиальному способу выполнения упражнений с храповыми уродами, я полагаю, что некоторые соображения касались его проектирования. Я бы очень признателен за некоторые объяснения этих соображений. Моя проблема в том, что я понятия не имею, как наилучшим образом использовать прерывания. Что должен делать обработчик прерываний и почему? Такие вещи, как AFAIK, не объясняются в типичном учебнике DCPU. –