home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
CPM3
/
NULL.LBR
/
NULL.AZM
/
NULL.ASM
Wrap
Assembly Source File
|
2000-06-30
|
4KB
|
228 lines
;NULL v1.0 - CP/M Plus Utility - For writing a 0 byte file to disk
;
; COPYRIGHTED 1984 BY GUY GAMBLE
;
; This utility takes the place of the A>SAVE 0 filename.ext of CPM 2.2
; and before. The main reason I wrote this was to make it easy to write
; a directory entry of type -.123 so the popular MCAT program can be
; used with C/PM Plus operating system. The program is self explanatory
; so I did not write a DOC file.
;
; The only thing you might need to know is that drive B: is the default
; drive that the program writes to. So you don't need to specify any
; drive when you name the file.
;
; This program is donated to Public Domain and I hope people will im-
; prove on it. It is not intended for commercial distribution. If you
; make modifications please update and resubmit to the Public Domain
; either here or any other RCPM BBS.
; - Guy Gamble
;
;=======================================================================
;
; System Equates under CP/M Plus
;
BASE: EQU 0
FCB: EQU BASE+5CH
BDOS: EQU BASE+5
PRINT: EQU 9
CONIN: EQU 1
CONOUT: EQU 2
RESETD: EQU 13 ;Disk system reset both drives
SDSKR: EQU 37 ;Single disk reset
SELDK: EQU 14
PFCB: EQU 152 ;CPM Plus only PARSE FCB
RCONBF: EQU 10
MAKEF: EQU 22
OPEN: EQU 15
CLOSE: EQU 16
;
;
; EQU for ASCII characters
;
CR: EQU 0DH
LF: EQU 0AH
CLS: EQU 1AH ;Clear screen
;
;
;
ORG BASE+100H
;
;
; Sign on messege
;
CALL ILPRT
DB CLS,LF,' NULL FILE UTILITY v1.0 - for CPM PLUS - 03/19/84'
DB CR,LF,LF
DB ' This writes a NULL file to drive B:',CR,LF,LF,0
;
START: LDA BUFLEN ;Maximum input buffer length (12 char)
STA INBUF ;initialize 0 byte of the input buffer
; ;for BDOS function 10
;
;
LXI SP,STACK ;local stack
XRA A
CALL ILPRT
DB ' Type Q to QUIT or',CR,LF,LF
DB ' Press RETURN to continue ',0
CALL CRTIN
CPI 'Q'
JZ QUIT
CPI CR
JZ MSG
CALL ILPRT
DB CLS,LF,LF,' TRY AGAIN !!',CR,LF,LF,0
JMP START
;
;
;
MSG: CALL ILPRT
DB CLS,LF,LF,' INSERT DISK in drive B:',CR,LF,LF
DB ' ENTER FILENAME.EXT',CR,LF,LF
DB ' :',0
CALL INPUT
CALL MOVFN ;move name from inbuf to FCB
; ;BDOS function 152 under CPM Plus only
CALL RESDSK
CALL OFILE
INR A
JNZ ERR1
CALL MFILE
INR A
JZ ERR2
CALL CFILE
CALL ILPRT
DB CLS,LF,LF,0
JMP INIT
;
;
ILPRT: XTHL ;inline print routine
;
;
ILPLP: MOV A,M
PUSH H
CALL CRTOUT
POP H
INX H
MOV A,M
ORA A
JNZ ILPLP
INX H
XTHL
RET
;
;
CRTOUT: PUSH PSW
MVI C,CONOUT
MOV E,A
CALL BDOS
POP PSW
RET
;
;
CRTIN: MVI C,CONIN
CALL BDOS
ANI 07FH
CPI ' '
RZ
CPI 'C'-40H
JZ QUIT
CPI ' '
RC
ANI 05FH
RET
;
;
;
INPUT: MVI C,RCONBF ;BDOS function 10
LXI D,INBUF ;input buffer address
CALL BDOS
CALL CRLF
RET
;
;
MOVFN: MVI C,PFCB ;move filename.ext from input
; ;buffer to FCB. BDOS 152 CPM Plus only
LXI D,PFILE
CALL BDOS
RET
;
;
RESDSK: MVI C,SDSKR ;reset drive B: only
LXI D,0002
CALL BDOS
;
MVI C,SELDK ;select drive B:
MVI E,01
CALL BDOS
RET
;
;
OFILE: MVI C,OPEN ;check to see if file exists
LXI D,FCB
CALL BDOS
RET
;
;
MFILE: MVI C,MAKEF ;write file to disk
LXI D,FCB
CALL BDOS
RET
;
;
CFILE: MVI C,CLOSE
LXI D,FCB
CALL BDOS
RET
;
;
INIT: LXI H,INBUF ;initialization of input buffer
LXI D,INBUF+1
LXI B,0026H
MVI M,0 ;fill with 0's
DB 0EDH,0B0H ;Z80 LDIR command
JMP START ;start over again
;
;
ERR1: CALL CFILE
CALL ILPRT
DB CLS,LF,LF,' +++ FILE ALREADY EXISTS +++',CR,LF,LF,0
JMP INIT
;
;
ERR2: CALL ILPRT
DB CLS,LF,LF,' +++ NO DIRECTORY SPACE +++',CR,LF,LF,0
JMP INIT
;
;
QUIT: CALL CRLF
MVI C,RESETD ;reset both drives before returning
; ;to CPM
CALL BDOS
JMP BASE
;
;
CRLF: CALL ILPRT
DB CR,LF,0
RET
;
;
DS 80 ;local stack
STACK: DB 0,0,0
;
;
PFILE: DW INBUF+2 ;BDOS function 152
DW FCB ;move filename.ext from inbuf+2
DB 0,0,0 ;to FCB address
;
;
BUFLEN: DB 0CH,0,0 ;maximum number of char allowed
; ;to be input -filename.ext
; ;currently set for 12 chars
INBUF: DB 0,0
DS 26H
;
;
END