    ;; A simple program to display "Hello World". This program
    ;; will work with CP/M 2.1 and C/PM +
    ;;
    ;; This program uses BIOS function CONOUT

    ;; origin for CP/M programs
    org &100
    nolist
    write"cpmex2.com"

    ;;---------------------------------------------------------
    ;; BIOS FUNCTION offsets

    .cpm_wboot equ 0
    .cpm_const equ 3
    .cpm_conin equ 6
    .cpm_conout equ 9
    .cpm_list equ 12
    .cpm_punch equ 15
    .cpm_reader equ 18
    .cpm_home equ 21
    .cpm_seldsk equ 24
    .cpm_settrk equ 27
    .cpm_setsec equ 30
    .cpm_setdma equ 33
    .cpm_read equ 36
    .cpm_write equ 39
    .cpm_listst equ 42
    .cpm_sectran equ 45

    ;;---------------------------------------------------------
    ;; display message and then return back to the command-line

    ld hl,message
    call display_message
    ret

    ;;---------------------------------------------------------
    ;; HL = pointer to null terminated message
    .display_message
    ld a,(hl)				;; get ASCII character
    inc hl					;; increment pointer for next character
    or a					;; end of message marker (0)?
    ret z					;; quit if end of message marker found.

    call display_char		;; send character to console output
    jp display_message		;; loop for next char

    ;;---------------------------------------------------------
    ;; display char using BIOS function CONOUT
    ;;
    ;; A = ASCII character

    .display_char
    push hl
    push de
    push bc
    call do_conout
    pop bc
    pop de
    pop hl
    ret

    ;;---------------------------------------------------------
    ;; A = ASCII character
    .do_conout
    ld de,cpm_conout
    ld c,a
    ld hl,(1)				;; address of JP BOOT entry in table
    add hl,de				;; add on offset
    jp (hl)

    ;;---------------------------------------------------------
    ;; the message to display

    .message
    defb "Hello World!",0