mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:23:13 -06:00
181 lines
3.5 KiB
Plaintext
181 lines
3.5 KiB
Plaintext
;
|
||
; 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
|
||
|