Переписал с применением подпрограммы ПЗУ PRINT-FP. Скорость будет ниже, зато код компактнее. Всё равно печать с помощью RST 16 сама по себе довольно медленная.

Код:
/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRCHAR_ROM (unsigned char ch) __z88dk_fastcall {
__asm
  LD   A,L
  LD   IY,#0x5C3A
  EX   AF,AF
  LD   A,#2
  CALL 0x1601
  EX   AF,AF
  RST  16
__endasm;
} //Basic_PRCHAR_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRWORD_ROM (unsigned int n) __naked __z88dk_fastcall {
__asm
  LD   C,L
  LD   B,H
  CALL 0x2D2B // BC-TO-FP
  LD   A,#2
  CALL 0x1601
  JP   0x2DE3 // PRINT-FP
__endasm;
} //Basic_PRWORD_ROM

/*--------------------------------- Cut here ---------------------------------*/
void Basic_PRINT_ROM (int n) __naked __z88dk_fastcall {
__asm
    BIT   7,H
    JP    Z,_Basic_PRWORD_ROM
    
    ; HL := -HL
    EX    DE,HL ;  4
    XOR   A     ;  4
    LD    L,A   ;  4
    LD    H,A   ;  4
    SBC   HL,DE ; 15 => 31t

    PUSH  HL
    LD    A,#0x2D
    CALL  _Basic_PRCHAR_ROM+1
    POP   BC
    JP    _Basic_PRWORD_ROM+2
__endasm;
} //Basic_PRINT_ROM
Приветствуются любые замечания по сокращению кода.

P.S. Можно ускорить смену знака на один такт. Вместо:
Код:
;      HL := -HL
    EX    DE,HL ;  4
    XOR   A     ;  4
    LD    L,A   ;  4
    LD    H,A   ;  4
    SBC   HL,DE ; 15 => 31t
использовать:
Код:
    LD    A,L   ;  4
    CPL         ;  4
    LD    L,A   ;  4
    LD    A,H   ;  4
    CPL         ;  4
    LD    H,A   ;  4
    INC   HL    ;  6 => 30t
Но это не даст никакого ощутимого выигрыша, всё равно PRINT-FP использует медленный калькулятор. Но менее компактно (7 байт против 6).