mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
181 lines
3.5 KiB
181 lines
3.5 KiB
;
|
|
; 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
|
|
|