;; 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