MS-DOS/v2.0/source/RECMES.ASM

220 lines
5.6 KiB
NASM
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.

TITLE RECOVER Messages
FALSE EQU 0
TRUE EQU NOT FALSE
bdos equ 21h
boot equ 20h
aread equ 25h
awrite equ 26h
.xlist
.xcref
INCLUDE DOSSYM.ASM
;The DOST: prefix is a DEC TOPS/20 directory prefix. Remove it for
; assembly in MS-DOS assembly environments using MASM. The DOSSYM.ASM
; file must exist though, it is included with OEM distribution.
.cref
.list
code segment public
code ends
const segment public byte
const ends
data segment public byte
EXTRN filsiz:WORD
data ends
dg group code,const,data
cr equ 0dh
lf equ 0ah
code segment public byte
assume cs:dg,ds:dg,es:dg,ss:dg
EXTRN PCRLF:NEAR,PRINT:NEAR,INT_23:NEAR,CONVERT:NEAR
PUBLIC dskwrt,dskrd,DSKERR,report
hecode db 0
dskwrt: push ax
push bx
push cx
push dx
int awrite
mov [hecode],al
inc sp
inc sp ;clean up stack
pop dx
pop cx
pop bx
pop ax
jnc pret
mov si,offset dg: writing
call dskerr
jz dskwrt
clc
pret: ret
dskrd: push ax
push bx
push cx
push dx
int aread
mov [hecode],al
inc sp
inc sp ;clean up stack
pop dx
pop cx
pop bx
pop ax
jnc pret
mov si,offset dg: reading
call dskerr
jz dskrd
clc
ret
DSKERR:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
PUSH ES
CALL PCRLF
MOV AL,[HECODE]
CMP AL,12
JBE HAVCOD
MOV AL,12
HAVCOD:
XOR AH,AH
MOV DI,AX
SHL DI,1
MOV DX,WORD PTR [DI+MESBAS] ; Get pointer to error message
CALL PRINT ; Print error type
MOV DX,OFFSET DG:ERRMES
CALL PRINT
MOV DX,SI
CALL PRINT
MOV DX,OFFSET DG:DRVMES
CALL PRINT
ASK:
MOV DX,OFFSET DG:REQUEST
CALL PRINT
MOV AX,(STD_CON_INPUT_FLUSH SHL 8)+STD_CON_INPUT
INT 21H ; Get response
PUSH AX
CALL PCRLF
POP AX
OR AL,20H ; Convert to lower case
CMP AL,"i" ; Ignore?
JZ EEXITNZ
CMP AL,"r" ; Retry?
JZ EEXIT
CMP AL,"a" ; Abort?
JNZ ASK
JMP INT_23
EEXITNZ:
OR AL,AL ; Resets zero flag
EEXIT:
POP ES
POP DI
POP DX
POP CX
POP BX
POP AX
RET
;******************************************
; Prints the XXX of YYY bytes recovered message.
; The XXX value is a dword at di+16 on entry.
; The YYY value is a dword (declared as a word) at filsiz.
; Note:
; If it is desired to print a message before the first number,
; point at the message with DX and call PRINT.
report:
mov si,[di+16] ;Get the XXX value
mov di,[di+18]
mov bx,offset dg: ofmsg
call convert ;Print "XXX of " (DI:SI followed by message
; pointed to by BX)
mov si,filsiz ;Get the YYY value
mov di,filsiz+2
mov bx,offset dg: endmsg
call convert ;Print "YYY bytes recovered CR LF"
ret
code ends
const segment public byte
PUBLIC BADVER,askmsg,drvlet,DRVLET1,dirmsg,recmsg_pre
PUBLIC crlf,drverr,baddrv,opnerr,recmsg_post
MESBAS DW OFFSET DG:ERR0
DW OFFSET DG:ERR1
DW OFFSET DG:ERR2
DW OFFSET DG:ERR3
DW OFFSET DG:ERR4
DW OFFSET DG:ERR5
DW OFFSET DG:ERR6
DW OFFSET DG:ERR7
DW OFFSET DG:ERR8
DW OFFSET DG:ERR9
DW OFFSET DG:ERR10
DW OFFSET DG:ERR11
DW OFFSET DG:ERR12
READING DB "read$"
WRITING DB "writ$"
ERRMES DB " error $"
DRVMES DB "ing drive "
DRVLET1 DB "A",13,10,"$"
REQUEST DB "Abort, Retry, Ignore? $"
ERR0 DB "Write protect$"
ERR1 DB "Bad unit$"
ERR2 DB "Not ready$"
ERR3 DB "Bad command$"
ERR4 DB "Data$"
ERR5 DB "Bad call format$"
ERR6 DB "Seek$"
ERR7 DB "Non-DOS disk$"
ERR8 DB "Sector not found$"
ERR9 DB "No paper$"
ERR10 DB "Write fault$"
ERR11 DB "Read fault$"
ERR12 DB "Disk$"
;-----------------------------------------------------------------------;
BADVER DB "Incorrect DOS version"
crlf db cr,lf,'$'
askmsg db cr,lf,'Press any key to begin recovery of the'
db cr,lf,'file(s) on drive '
drvlet db 'A: ',cr,lf,cr,lf,'$'
dirmsg db cr,lf,'Warning - directory full',cr,lf,'$'
;"recmsg_pre<number of files recovered>recmsg_post"
recmsg_post db ' file(s) recovered',cr,lf
recmsg_pre db '$'
ofmsg db ' of $'
endmsg db ' bytes recovered',13,10,"$"
drverr db 'Invalid number of parameters$'
baddrv db 'Invalid drive or file name$'
opnerr db 'File not found$'
const ends
end