Насколько я могу судить, это невозможно с MARS. Системные вызовы игрушки, которые она обеспечивает, не позволяют вам даже перемещать позицию курсора или включать / отключать эхо терминала.
(в нем есть режим «растровая графика», поэтому, я думаю, вы могли бы рисовать глифы *
на этом дисплее при чтении ввода с клавиатуры. Но у него нет функций для рисования текста в растровом изображении.)
В POSIX на текстовом терминале это можно сделать, отключив эхо-сигнал TTY и переведя терминал в режим raw (с помощью системного вызова ioctl
).
Тогда системные вызовы read()
вернутся, как только будет готов любой ввод вместо полной строки, так что ваша программа напечатает *
после прочтения символа. (И вам придется вручную поддерживать редактирование линий возврата на одну позицию).
Я не вижу поддержки MARS для любого этого в списке системных вызовов.
http://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html
Вы должны добавить новые системные вызовы: http://courses.missouristate.edu/KenVollmar/mars/Help/MarsHelpTools.html описывает, как вы можете написать класс Java для обработки нового системного вызова и подключить его к MARS.
SPIM имеет MMIO-доступ к «терминальному» устройству , где вы можете читать ввод с клавиатуры отдельно от того, как он отображается на экране, но MARS ничего подобного не документирует. Я думаю, что клавиатурный / экранный ввод / вывод MARS доступен только через системные вызовы, а полный набор, описанный в документации, этого не позволяет.
Похоже, что печать символа '\b'
(ASCII backspace) не работает, чтобы переместить курсор назад на что-то, набранное пользователем. Вы просто получаете белую коробку с черным контуром.
Возможно, если вы запускаете MARS в режиме без графического интерфейса из командной строки внутри XTerm (или Gnome-терминала или Konsole) на рабочем столе Linux или в окне терминала MacOS X,
вы можете получить вывод MARS на терминал, который обрабатывает escape-последовательности и коды перемещения курсора.
Последняя надежда (которую я не пробовал) - возврат каретки (\r
) перемещает символ в начало строки, не переходя на следующую строку. В этом случае вы могли бы напечатать то, что набрал пользователь, перепечатав всю строку с достаточным количеством *
символов.
Но даже если это сработает, оно, вероятно, будет мигать на экране в том виде, в котором оно напечатано, по крайней мере, на мгновение, прежде чем ваша программа перезапишет его.