;; This example shows how to access the firmware from within CP/M 2.1.
;; This example does not work with CP/M+
;;
;;---------------------------------------------------------

org &100							;; origin for C/PM .COM programs
nolist
write"test.com"

.enter_firmware equ &be9b
.scr_set_mode equ &bc0e
.txt_output equ &bb5a

;;---------------------------------------------------------
;; change the display mode to mode 1
ld a,1
call enter_firmware
defw scr_set_mode

;; display a message on the screen
ld hl,test_message
call display_message

;; quit back to command-line
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

;;---------------------------------------------------------
;; A = ASCII character

.display_char
call enter_firmware		;; execute firmware function
defw txt_output			;; firmware function: TXT OUTPUT
ret


;;---------------------------------------------------------
.test_message
defb "Hello World!",0

