D(reg) по два раза делать необязательно, хотя она дает задержку между сигналами на BDIR, BC1.

Есть еще один неочевидный момент, регистры тона двухбайтные, и обновляются за два этапа, т.е. за два обращения к LPT порту. Как извесно в винде интервалы через которые данные выпуливают в порт нестабильны, и если задержка между этими двумя передачами будет существенная, то будут искажения в генераторах тона. как с этим боротся я даже непредставляю.