code    SEGMENT Public byte 'CODE'
        ASSUME  Cs:code, Ds:code


buffer  DB      6 DUP (?)


_DebugChar      PROC    Near
;
; AL < Character To Be Shown
;
        push    ax
        push    dx
        mov     ah, 1
        mov     dx, 0
        int     14h
        pop     dx
        pop     ax
        ret
_DebugChar      ENDP

_DebugString    PROC    Near
;
; BX < Offset of String To Be Shown (Null Terminate)
;
        push    ax
        push    bx
        push    ds
        mov     ax, cs
        mov     ds, ax
@@:
        mov     al, [bx]
        inc     bx
        or      al, al
        jz      @f
        call    _DebugChar
        jmp     @b
@@:
        pop     ds
        pop     bx
        pop     ax
        ret
_DebugString    ENDP

NumHex  PROC    Near
;
; AL(0..3) < Hex Value
; AL > ASCII Code
;
        and     al, 0Fh
        cmp     al, 0Ah
        jb      @f
        add     al, 'A'-'0'-10
@@:
        add     al, '0'
        ret
NumHex  ENDP

NumByte PROC    Near
;
; AL < Byte Value
; AX > Two ASCII Codes for Byte Value
;
        push    dx
        mov     dl, al
        call    NumHex
        mov     dh, al
        mov     al, dl
        shr     al, 1
        shr     al, 1
        shr     al, 1
        shr     al, 1
        call    NumHex
        mov     dl, al
        mov     ax, dx
        pop     dx
        ret
NumByte ENDP

_DebugNumber    PROC    Near
;
; AX < Word Value To Be Shown
;
        push    ax
        push    bx
        push    dx
        push    bp
        push    ds
        mov     bx, cs
        mov     ds, bx

        lea     bx, buffer
        mov     Byte Ptr [bx], 32
        mov     dx, ax
        mov     al, dh
        call    NumByte
        mov     [bx+1], ax
        mov     al, dl
        call    NumByte
        mov     [bx+3], ax
        lea     bx, buffer
        call    _DebugString

        pop     ds
        pop     bp
        pop     dx
        pop     bx
        pop     ax
        ret
_DebugNumber    ENDP


        PUBLIC  _DebugChar, _DebugString, _DebugNumber

code    ENDS

        END