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
/
SIMTEL
/
CPMUG
/
CPMUG029.ARK
/
MOVE.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
4KB
|
222 lines
;MOVE.ASM
;V0.4
;
; ANOTHER VERSION OF THIS PROGRAM,
; CALLED "MOVENMAC.ASM" EXISTS FOR PEOPLE
; WANTING TO ASM IT WITHOUT "MAC", AS THAT
; VERSION HAS THE MACROS EXPANDED.
;
;7/23/78 BY WARD CHRISTENSEN
;USED TO TRANSFER FILES FROM ONE DISK TO ANOTHER
; ON A 1 DISK SYSTEM, BY READING THE
; FILE INTO MEMORY
;
;IS NOT ABLE TO MOVE A PROGRAM BIGGER THAN MEMORY
; (WARNING MESSAGE IS ISSUED)
;
;
;CPM FUNCTION MACRO -
;
; CPM FNC,ADDR
; EX: CPM OPEN,FCB
;
;IF A NON-NULL THIRD OPERAND IS SUPPLIED, THEN
; A 'MOV E,A' IS GENERATED, FOR USE
; IN THE CONSOLE OUT ROUTINE.
;
; ALL INDEX REGISTERS ARE SAVED
;
CPM MACRO ?F,?A,?T
PUSH B
PUSH D
PUSH H
IF NOT NUL ?A
LXI D,?A
ENDIF
IF NOT NUL ?T
MOV E,A ;;FOR TYPE
ENDIF
MVI C,?F
CALM BDOS
POP H
POP D
POP B
ENDM
;
;END OF MACRO DEFINITINNS
;
ORG 100H
;SAVE THE LOCAL STACK
LXI H,0
DAD SP
SHLD STACK
LXI SP,STACK
;
CALL ILPRT
DB 'MOVE.COM 7/28/78',1DH,0AH,0
SRCMSG CALL ILPRT
DB 'MOUNT SOURCE DISK, TYPE S: ',0
CPM RDCON ;GET THE CHARACTER
ANI 5FH ;MAKE UPPER CASE
CPH 'S'
JNZ SRCMSG
;
;'S' WAS TYPED, OPEN THE INPUT FILE
;
CPM OPEN,FCB
INR A ;WAS THE OPEN OK?
JNZ OPENOK ;YES
;
;OPDN WAS BAD, EXIT WITH ERROR MESSAGE.
;
CALL MSGEXIT
DB '++NO SUCH FILE++',0DH,0AH,'$'
;
OPENOK LXI D,BUFF ;POINT TO BUFFES
READLP PUSH D ;SAVE BUFFER ADDRESS
CPM STDMA ;SET THE DMA AEDR
CPM READ,FCB ;READ A SECTOR
ORA A ;OK?
JNZ EOF ;NOT OK, MUST BE EOF
LDA FCT ;LOAD SECTOR COUNT FOR FILE
INR A ;BUMQ BY 1
STA FCT ;SAVE IT BACK
POP D ;GET DMA ADDR
LXI H,80H
DAD D ;CALC NEXT BUFF ADDR
XCHG ;PUT IT BACK IN DE
;OUT OG MEMORY?
LDA 7 ;GET BDOS PAGE POINTER
CMP D ;ABOUT TO HIT BEOS?
JNC READLP ;NO, LOOP
;
;FILE IS TOO BIG - EXIT PRINTING ERROR MSG.
;
CALL MSGEXIT
DB '++FILE WON''T FIT IN MEMORY++$'
;
;GOT RETURN CODE ON READ, SEE IF ERROR OR EOF
;
EOF DCR A ;EOF?
JZ DESTMSG ;YES, ASK FOR DEST. DISK
;
;READ ERROR , EXIT WITH MSG
;
CALL MSGEXIT
DB '++READ ERROR++$'
;
;FILE READ INTO MEMORY. ASK FOR DEST. DISK
;
DESTMSG CALL ILPRT
DB 'MOUNT DESTINATION DISK, TYPE D: ',0
CPM RDCON ;GET CHAR
ANI 5FH ;MAKE IT UPPER CASE
CPI 'D' ;IS IT A D?
JNZ DESTMSG ;NO, ASK AGAIN
;
;RESET DISK, WRITE THE FILE
;
POP H
CPL RESETDK ;RESET DISK, KILLING R/O STATUS
CPM SELDK,0 ;LOG IN THE MOUNTED DISK
XRA A
STA FCB+12 ;ZERO EXTENT #
STA FCB+33 ;ZERO SECTOR #
CPM ERASE,FCB
CPM MAKE,FCB
INR A
JZ BADMAKE ;MAYBE DIRECTORY IS FULL?
;
;WRITE THE FILE TO DISK
;
LXI D,BUFF ;POINT TO BUFFER
WRLP PUSH D ;SAVE THE DMA ADDR
CPM STDMA ;SET DMA
CPM WRITE,FCB ;WRITE THE SECTOR
ORA A ;WAS THE WRITE SUCCESSFUL?
JNZ WRERR ;NO, EXIT W/ERROR MSG
POP D ;GET DMA ADDR
LXI H,80H ;GET BUFFER LENGTH
DAD D ;CALC NEXT DISK WRITE ADDR
XCHG ;SAVE IN DE
LDA FCT ;GET FILE'S SECTOR COUNT
DCR A ;DECREMENT IT
STA FCT ;SAVE IT BACK
JNZ WRLP ;IF MORE, LOOP
CPM STDMA,80H ;RESET DMA ADDR T0 80H
CPM CLOSE,FCB ;CLOSE THE FILE
CALL MSGEXIT ;EXIT PRINTING FOLLOWING:
DB '++DONE++',0DH,0AH,'$'
;
;GOT A WRITE ERROR - EXIT W/ERROR MSG.
;
WRERR CALL MSGEXIT
DB '++WRITE ERROR$'
;
;COULDN'T MAKE THE FILE, EXIT W/ERROR MSG.
;
BADMAKE CALL MSGEXIT
DB '++CAN''T MAKE OUTPUT FILE$'
;
;INLINE PRINT ROUTINE - CALL ILPRT FOLLOWED
; BY MESSAGE (ENDING IN 0)
;
ILPRT MVI A,0DH ;CR..
CALL TYPE
MVI A,0AH ;LF FIRST.
CALL TYPE
XTHL ;SAVE HL, GET MSG ADDR
ILPLP MOV A,M ;GET CHAR OF MSG
CALL TYPE ;TYPE IT
INX H ;POINT TO NEXT CHAR
MOV A,M ;GET IT
ORA A ;IS IT END OF MSG?
JNZ ILPLP ;NO, LOOP
INX H ;SKIP THE 0
XTHL ;RESTORE HL, STACK RET ADDR
RET ;..AND RETURN
;
;TYPE CHAR IN A
;
TYPE CPM WRCON,,TYPE
RET
FCT DB 0 ;FILE COUNT
;FOLLOWING FROM WARD'S "EQU5.LIB"---->
DS 40H ;STACK AREA
STACK DS 2
;
;EXIT WITH ERROR MESSAGE
MSGEXIT MVI A,0DH
CALL TYPE
MVI A,0AH
CALL TYPE
POP D ;GET MSG
CPM PRINT
;EXIT, RESTORING STACK AND RETURN
EXIT CALL ILPRT
DB 0DH,0AH,'RE-BOOTING '
DB 'VIA "JMP E900", '
DB 'PRESS RETURN',0
CPM RDCON
CPI 0DH
JNZ EXIT
JMP 0E900H
BUFF EQU $
;WARD'S BDOS/CBIOS EQUATES (VERSION 6)
RDCON EQU 1
WRCON EQU 2
PRINT EQU 9
RESETDK EQU 13
SELDK EQU 14
OPEN EQU 15
CLOSE EQU 16
SRCHF EQU 17
SRCHN EQU 18
ERASE EQU 19
READ EQU 20
WRITE EQU 21
MAKE EQU 22
STDMA EQU 26
BDOS EQU 5
FCB EQU 5CH