Вот мой вариант, вроде даже работал. Правда полностью так и не проверил, руки не дошли.
Код:
PutPix:
        call    GetPixAddr
        lxi     B, shltbl
        add     C
        mov     C, A
        mov     A, B
        aci     0
        mov     B, A

        di
        MAPMEM  0FFh
        ldax    B
        ora     m
        mov     m, A
        MAPMEM  0FCh
        ei

        ret
shltbl: 128,64,32,16,8,4,2,1

; вычисляет адрес видеопамяти
; на входе:
;       A       - координата Y [0..191]
;       C       - координата X [0..255]
; на выходе:
;       HL      - адрес знакоместа
;       A       - смещение в байте по X [0..7]
; вычисляем по формуле:
; HI(addr) = (y/8)*256
; LO(addr) = (x & F8)+(y%8)
;(y%8)*32+(x/8)
GetPixAddr:
        mov     L, A
        rar
        rar
        rar
        ani     11111b
        mov     H, A    ; H = (Y >> 3) * 256

        mov     A, L
        ani     111b
        mov     L, A    ; L = Y % 8
        mov     A, C
        ani     11111000b
        add     L
        mov     L, A
        mov     A, C
        ani     111b
        ret
Делал "в лоб", так что вряд ли это самый оптимальный вариант.