Files
RomWBW/Source/Images/d_bp/u15/ECHO.MAC
2020-01-03 20:42:06 -08:00

181 lines
3.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; Program: ECHO
; Author: Richard Conn
; Version: 1.0
; Date: 22 Mar 84
;
version equ 10
z3env SET 0F400H ;base address of ZCPR3 Environment Descriptor
;
; The purpose of ECHO is two-fold:
; 1) to provide a convenient way of sending messages to
; the console during the execution of a command file or multiple command
; line; for example:
;
; echo Assembling;m80 =$1;^E
; if input;echo Linking;l80 /P:100,$1,A:SYSLIB/S,$1/N,/E;fi
;
; as a single multiple command line will print the informative messages of
; "ASSEMBLING" and "LINKING" during the respective phases of the commands
;
; 2) to provide a convenient way to send escape sequences
; to the CRT and printer; ECHO does no character translation, using direct
; BIOS calls, so sequences used to program intelligent devices can be
; issued by running echo and typing in those sequences
;
;
; Z3LIB and SYSLIB References
;
ext z3init,print
;
; Equates
;
wboot equ 00h
tbuff equ 80h
fcb1 equ 5ch
cr equ 0dh
ff equ 0ch
lf equ 0ah
;
; Environment Definition
;
if z3env ne 0
;
; External ZCPR3 Environment Descriptor
;
jmp start
db 'Z3ENV' ;This is a ZCPR3 Utility
db 1 ;External Environment Descriptor
z3eadr:
dw z3env
start:
lhld z3eadr ;pt to ZCPR3 environment
;
else
;
; Internal ZCPR3 Environment Descriptor
;
MACLIB Z3BASE.LIB
MACLIB SYSENV.LIB
z3eadr:
jmp start
SYSENV
start:
lxi h,z3eadr ;pt to ZCPR3 environment
endif
;
; Start of Program -- Initialize ZCPR3 Environment
;
call z3init ;initialize the ZCPR3 Env and the VLIB Env
;
; Check for Help
;
lda fcb1+1 ;get first char
cpi '/' ;if slash, then print help
jnz echo
call print
db 'ECHO, Version '
db (version/10)+'0','.',(version mod 10)+'0',cr,lf
db 'Syntax:',cr,lf
db ' ECHO text <-- send text to console',cr,lf
db ' ECHO $text <-- send text to printer',cr,lf
db ' ECHO $text^L <-- send text to printer',cr,lf
db ' terminated by CR,LF,FF'
db 0
ret
;
; Run ECHO Routine
;
ECHO:
LXI H,TBUFF+1 ;PT TO FIRST CHAR
ECHO1:
MOV A,M ;SKIP LEADING SPACES
INX H ;PT TO NEXT
CPI ' '
JZ ECHO1
MOV B,A ;CHAR IN B
CPI '$' ;PRINT FLAG?
JZ ECHO2
DCX H ;PT TO CHAR
;
; LOOP TO ECHO CHARS
;
ECHO2:
MOV A,M ;GET CHAR
ORA A ;EOL?
JZ ECHO4
CPI FF ;FORM FEED?
JZ ECHO3
ECHO2C:
CALL ECHOUT ;SEND CHAR
INX H ;PT TO NEXT
JMP ECHO2
;
; FORM FEED - SEND NEW LINE FOLLOWED BY FORM FEED IF PRINTER OUTPUT
;
ECHO3:
MOV A,B ;CHECK FOR PRINTER OUTPUT
CPI '$'
JNZ ECHOFF ;SEND FORM FEED NORMALLY IF NOT PRINTER
CALL ECHONL ;SEND NEW LINE
MVI A,FF ;SEND FORM FEED
JMP ECHOUT
;
; SEND FORM FEED CHAR TO CONSOLE
;
ECHOFF:
MVI A,FF ;GET CHAR
JMP ECHO2C
;
; END OF PRINT LOOP - CHECK FOR PRINTER TERMINATION
;
ECHO4:
MOV A,B ;CHECK FOR PRINTER OUTPUT
CPI '$'
RNZ ;DONE IF NO PRINTER OUTPUT
;
; OUTPUT A NEW LINE
;
ECHONL:
MVI A,CR ;OUTPUT NEW LINE ON PRINTER
CALL ECHOUT
MVI A,LF ;FALL THRU TO ECHOUT
;
; OUTPUT CHAR TO PRINTER OR CONSOLE
;
ECHOUT:
MOV C,A ;CHAR IN C
PUSH H ;SAVE HL
PUSH B ;SAVE BC
LXI D,0CH-3 ;OFFSET FOR CONSOLE OUTPUT
MOV A,B ;CHECK FOR PRINTER
CPI '$'
JNZ ECHOUT1
INX D ;ADD 3 FOR PRINTER OFFSET
INX D
INX D
;
; OUTPUT CHAR IN C WITH BIOS OFFSET IN DE
;
ECHOUT1:
CALL BIOUT ;BIOS OUTPUT
POP B ;RESTORE BC,HL
POP H
RET
;
; OUTPUT CHAR IN C TO BIOS WITH OFFSET IN DE
;
BIOUT:
LHLD WBOOT+1 ;GET ADDRESS OF WARM BOOT
DAD D ;PT TO ROUTINE
PCHL ;JUMP TO IT
end