Курсовая - это в смысле было курсе на третьем задание сделать кросс-компилятор и линковщик для АСМа на машине с воображаемой архитектурой.
Привычно забил. Помог нескольким людям к этим курсачом, а когда пришла пора сделал свой за сутки с нуля.
У меня были Z80, x86 и AVR (это такая распространенная типа-RISC поделка от
Atmel.com) - на них писал довольно много.
Еще чуть-чуть какой-то Futjitsu и ARM7 - они в разработку не пошли, ограничился эмулятором.
Какая замечательная вещь была Atmel Tiny - крошечней некуда. 10 лапок, из них две вынужденно идут на питание и землю.
Памяти нет совсем. Т.е. есть небольшая flash (кажется, мы использовали богатую Tiny - 512 байт). И целых 32 байтовых регистра - раздолье!
Совершенствование прошивки закончилось, когда я при всех ухищрениях не смог впихнуть в нее новые команды - flash весь вышел.
А Atmel Mega - вполне серьезная штука, 4 Кб на борту. Для нее даже gcc был. Кстати, оказался более удобным компилятором чем платные аналоги.
Эээх. В результате микрооптимизации критический код стал выполнятся в 60 раз быстрее. Осцилограф не хотел регистрировать контрольный всплеск,
пока не догадался переключить ему развертку. Я был так горд собой!
Z80 - школьные годы, ZX Spectrum. Злой дядька продавал некопирующиеся диски с игрушками. Или давал напрокат за большие деньги.
Пришлось разбираться, как работает дисковый контроллер и писать копировщик, умеющий прочитать буквально всё.
На одном дисководе процесс шел чуть ли не два часа с постоянной сменой дискет - но оно того стоило!
К слову, у спектрума очень неудобный доступ к дисковой подсистеме - но это отдельная песня. Нелегко объяснить быстро.
x86 пошел скорее по инерции - но и сейчас иногда приходится смотреть на дизассембер, навыки помогают.
Памятью пользоваться нельзя, а другими регистрами можно? Ну зачем нам этот SI (или BP/SP, если хочется)?
Или через carry flag - но это заметно дольше.
Честно, отвык уже от такого…