Code:
const char trmld[] = { // Z80 code TRMLD:
0x3E,0x0C, //TL LD A,FF
0xCD,0x1B,0xE0, // CALL VIDEO clear screen
0x06,0x0E, // LD B,14
0x3E,0x0A, //LL LD A,LF
0xCD,0x1B,0xE0, // CALL VIDEO set cursor position
0x10,0xF9, // DJNZ LL
0x11,0x40,0x00, // LD DE,$0040
0x21,0xC0,0xF0, // LD HL,VID+$40 screen RAM pointer
0x3E,0xCB, // LD A,$CB
0xD3,0xFC, // OUT A,UARTD ask Teensy for file list
0xDB,0xFD, //IL IN A,UARTS
0xCB,0x4F, // BIT 1,A
0x28,0xFA, // JR Z,IL wait for byte
0xDB,0xFC, // IN A,UARTD
0xFE,0xCB, // CP A,$CB end of list signal
0x28,0x15, // JR Z,KL
0xFE,0x0D, // CP A,CR handle Carriage Return
0x28,0x08, // JR Z,RC
0xFE,0x0A, // CP A,LF handle Line Feed
0x28,0x0A, // JR Z,FL
0x77, // LD (HL),A write text to screen
0x23, // INC HL
0x18,0x07, // JR DN
0x7D, //RC LD A,L Carriage Return
0xE6,0xC0, // AND A,$C0
0x6F, // LD L,A reset pointer to start of line
0x18,0x01, // JR DN
0x19, //FL ADD HL,DE Line Feed, advance pointer
0x18,0xDF, //DN JR IL
0xDB,0xFD, //KL IN A,UARTS
0xCB,0x47, // BIT 0,A
0x28,0xFA, // JR Z,KL wait for UART ready to send
0x3E,0xCB, // LD A,$CB
0xD3,0xFC, // OUT A,UARTD send signal that TRMLD is waiting for user
0xCD,0x18,0xE0, // CALL KEYBRD
0x28,0xF1, // JR Z,KL wait for user choice
0x77, // LD (HL),A display it
0xDB,0xFD, //UL IN A,UARTS
0xCB,0x47, // BIT 0,A
0x28,0xFA, // JR Z,UL wait for UART ready to send
0x7E, // LD A,(HL)
0xD3,0xFC, // OUT A,UARTD send user choice to Teensy
0xFE,0x0D, // CP A,CR
0x28,0xAA, // JR Z,TL loop if next list
0xDB,0xFD, //IL IN A,UARTS
0xCB,0x4F, // BIT 1,A
0x28,0xFA, // JR Z,IL wait for signal from Teensy
0xDB,0xFC, // IN A,UARTD
0xFE,0xCB, // CP A,$CB
0x28,0x03, // JR Z,LD jump to loader
0xC3,0xFA,0xDF, // JP PWARM or jump to BASIC
//0xC3,0xFD,0xDF, // JP PCOLD
0xBF, //LD CP A,A
0xF5, // PUSH AF
0xC3,0x2D,0xE0, // JP BASLOD jump to ROM loader
0};