Олег, даже не знаю с чего начать,.. вопрос прямо с издёвкой чтоли задан, либо есть не понимания этих редких команд.

Смотри, вот маленький ликбез:
1) Режим прерывания не менют по многу раз. Всего один раз перешел на "im 2", так и живешь пока программа не закончится (для возврата в бейсик или сброса)
2) В своём обработчике прерываний делаешь всё что тебе нужно, что будет запускаться каждые 1/50 сек. Можешь частично или полность повторить, что есть по адресу 0x38 (дизассемблер ПЗУ с коментами легко найти в инете). Можно сделать и push/call 0x38 или компактнее rst 0x38, но это плохая практика, т.к. обработчик из ПЗУ разрешит прерывания (и потенциально твой оставшийся код может быть повторно прерван, когда ты этого не ждешь)
3) Инструкции di и ei нужны только для кратковременного запрета прерваний для как можно более коротких участков кода
4) Инструкция halt нужна для того, чтоб перестать делать что-то полезное и тупо ждать прихода следующего прерывания. Если перед эти выполнить di, то ждать будешь бесконечно.