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.
179 lines
3.9 KiB
179 lines
3.9 KiB
;
|
|
; Program: ERROR4
|
|
; Author: Richard Conn
|
|
; Version: 1.0
|
|
; Date: 5 Mar 84
|
|
;
|
|
version equ 10
|
|
|
|
;
|
|
; This error handler prints the name of the COM file which was not
|
|
; found and then advances to the next entry (assuming a multiple command
|
|
; line) and resumes with the next command in the line.
|
|
;
|
|
; This program is transportable from one ZCPR3 system to another
|
|
; provided it is reassembled with the correct address for the ZCPR3
|
|
; Environment Descriptor (Z3ENV) or DDT is used to patch this address
|
|
; (which is the first two bytes after the opening JMP). If an external
|
|
; ZCPR3 Environment Descriptor is not available, one will have to be
|
|
; provided by setting the Z3ENV equate to 0 and providing SYSENV.LIB in
|
|
; the current directory at assembly time.
|
|
;
|
|
|
|
;
|
|
; Equates for Key Values
|
|
;
|
|
z3env SET 0f400h ;address of ZCPR3 environment
|
|
cmtch equ ';' ;comment character
|
|
cr equ 0dh
|
|
lf equ 0ah
|
|
|
|
;
|
|
; External Z3LIB and SYSLIB Routines
|
|
;
|
|
ext z3init
|
|
ext print,pstr,codend,moveb
|
|
ext erradr,puter1,puterc ;Error Handler Routines
|
|
ext getefcb,getcl1,qerror ;Z3 Messages et al
|
|
|
|
;
|
|
; 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 Environment
|
|
;
|
|
; Determine if Program Invoked as an Error Handler or By the User
|
|
;
|
|
call qerror ;error?
|
|
jz handler ;handle error
|
|
;
|
|
; Invoked by the User, so Install as an Error Handler
|
|
;
|
|
call getefcb ;pt to external FCB
|
|
jz start1 ;proceed if external FCB not available
|
|
;
|
|
; Make Name Invoked by User the Name of the Error Handler
|
|
;
|
|
inx h ;pt to first char
|
|
lxi d,ername ;pt to name of error handler message
|
|
mvi b,8 ;at most 8 bytes
|
|
call moveb ;copy into buffer
|
|
;
|
|
; Make Command Line in Buffer the Error Handler
|
|
;
|
|
start1:
|
|
lxi h,ername ;make name in buffer the error handler
|
|
call puterc ;set command
|
|
mvi a,0ffh ;set error code
|
|
call puter1 ;set message
|
|
call print
|
|
db 'ERROR4, Version '
|
|
db (version/10)+'0','.',(version mod 10)+'0'
|
|
db cr,lf,' Error Handler Installed',0
|
|
ret
|
|
;
|
|
; Handle Error
|
|
;
|
|
handler:
|
|
call erradr ;get address of error line
|
|
xchg ;HL pts to free area, DE pts to error line
|
|
call codend ;get ptr to free area
|
|
;
|
|
; Extract Bad Command and Store It in Memory Starting at CODEND
|
|
; DE pts to bad command, HL pts to location to store it at
|
|
;
|
|
savebad:
|
|
ldax d ;get next char
|
|
mov m,a ;put it
|
|
ora a ;done?
|
|
jz sbad1
|
|
cpi cmtch ;check for comment
|
|
jz sbad1
|
|
cpi ' ' ;check for space
|
|
jz sbad1
|
|
inx h ;pt to next
|
|
inx d
|
|
jmp savebad
|
|
;
|
|
; Set ending 0 in bad command buffer and print error message and command
|
|
;
|
|
sbad1:
|
|
mvi m,0 ;store ending zero
|
|
call print
|
|
db ' File ',0
|
|
call codend ;pt to name
|
|
call pstr
|
|
call print
|
|
db '.COM Not Found',0
|
|
;
|
|
; Advance to Next Entry in Error Line
|
|
;
|
|
call erradr ;pt to error
|
|
sbad2:
|
|
mov a,m ;skip to comment or eol
|
|
ora a ;eol?
|
|
jz sbad3
|
|
inx h ;pt to next
|
|
cpi cmtch ;comment?
|
|
jnz sbad2
|
|
;
|
|
; Set Up Command Line Pointer
|
|
;
|
|
sbad3:
|
|
push h ;save ptr to error text
|
|
call getcl1 ;pt to command line buffer
|
|
lxi d,4 ;pt to first char position
|
|
xchg
|
|
dad d
|
|
xchg ;DE pts to command line
|
|
mov m,e ;store address
|
|
inx h
|
|
mov m,d
|
|
pop h ;HL pts to next command, DE pts to cmd line
|
|
;
|
|
; Set Up Command Line Contents
|
|
;
|
|
sbad4:
|
|
mov a,m ;copy
|
|
stax d
|
|
inx h ;pt to next
|
|
inx d
|
|
ora a ;done?
|
|
jnz sbad4
|
|
ret
|
|
|
|
;
|
|
; Buffers
|
|
;
|
|
ername:
|
|
db 'ERROR4 ',0 ;name of error handler
|
|
|
|
end
|
|
|