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
/
CPMUG001.ARK
/
TREAD.ASM
< prev
next >
Wrap
Assembly Source File
|
1984-04-29
|
4KB
|
195 lines
;********************************;
; PAPER TAPE TO DISK COPY ;
;********************************;
ORG 100H
SETUP: LXI SP,STACK
LXI H,IOBUF ;GET ADDRESS OF CIRC. BUFFER
SHLD FPNT ;SET FILL POINTER
SHLD EPNT ;SET EMPTY POINTER
LXI D,BGMSG ;BEGIN MESSAGE
MVI C,WCONB ;WRITE CONSOLE BUFFER
CALL CPM ;WRITE START MESSAGE
MVI C,RCON ;WAIT FOR CR
CALL CPM
CPI 0DH ;CR?
JZ BEGIN ;START PROCESS
CPI 03H ;CONTROL C?
JZ BOOT ;REBOOT
JMP SETUP ;START AGAIN
BEGIN: LXI D,CRLF
MVI C,WCONB
CALL CPM
LXI D,TFCB ;POINT TO INITIALIZED FCB
MVI C,CREATE ;SET UP TO CREATE
CALL CPM
CPI 0FFH ;SUCCESSFULL?
JZ ERR ;NO, ERROR
LOOP1: CALL GETBUF ;GET BUFFER
CALL PUTBUF ;PUT BUFFER
JMP LOOP1 ;CONTINUE
ERR: MVI C,WCONB
LXI D,EMSG
CALL CPM
JMP BOOT
FINIS: LXI D,TFCB
MVI C,WRITE
CALL CPM
CPI 00
JNZ ERR
LXI D,TFCB
MVI C,CLOSE
CALL CPM
CPI 0FFH
JZ ERR
JMP BOOT
GETBUF: MVI C,11H ;START READER CHAR
CALL CONOUT ;START READER
GB2: CALL CONIN
CPI 07FH ;RUBOUT?
JZ GB2 ;IGNORE
CPI 00H ;NULL?
JZ GB2 ;IGNORE
CPI 0AH ;LF?
JZ GB2 ;IGNORE
LHLD FPNT ;GET FILL POINTER
MOV M,A ;STORE CHAR
INX H ;BUMP FILL POINTER
CALL WRAP
SHLD FPNT ;SAVE
CPI 1AH ;TEST FOR CONTROL Z
JZ GB3 ;YES, DONE
CPI 0DH ;TEST FOR CR
JNZ GB2
LHLD FPNT
MVI M,0AH ;ADD LF AFTER CR
INX H ;BUMP POINTER
CALL WRAP ;WRAP POINTER
SHLD FPNT ;SAVE POINTER
GB3: MVI C,13H ;STOP READER
CALL CONOUT
RET
PUTBUF: LDA BCNT ;GET DISK BUFFER COUNT
CPI 128 ;FULL?
JNZ PB2 ;NO,CONTINUE
LXI D,TFCB ;FCB ADDRESS
MVI C,WRITE ;WRITE BLOCK
CALL CPM
CPI 00 ;OK?
JNZ ERR ;ERROR
MVI A,00
STA BCNT ;ZERO BUFFER COUNT
LXI H,TBUF ;BUFFER POINTER
SHLD BPNT
PB2: LHLD EPNT ;GET EMPTY POINTER
XCHG ;INTO DE
LHLD FPNT
CALL CPHL
RZ ;NO MORE CHARS
LHLD EPNT
MOV A,M ;GET BYTE
INX H ;BUMP POINTER
CALL WRAP
SHLD EPNT ;SAVE
LHLD BPNT ;DISK BUFFER POINTER
MOV M,A ;STORE BYTE
CPI 1AH ;CONTROL Z?
JZ FINIS ;DONE
INX H ;BUMP POINTER
SHLD BPNT
LXI H,BCNT
INR M ;BUMP B COUNT
JMP PUTBUF
WRAP: PUSH D
PUSH B
PUSH PSW
PUSH H
XCHG
LXI H,IOBUF+4096
CALL CPHL
JNZ WRAPX
LXI H,IOBUF
XTHL
WRAPX: POP H
POP PSW
POP B
POP D
RET
CPHL: MOV A,D
CMP H
RNZ
MOV A,E
CMP L
RET
CONOUT: MOV E,C
MVI C,WPUN
CALL CPM
RET
CONIN: MVI C,RRDR
CALL CPM
RET
FPNT: DW IOBUF
EPNT: DW IOBUF
BPNT: DW TBUF
BCNT: DB 00
BGMSG: DB 'SET UP DISK, PAPER TAPE, TYPE RETURN $'
EMSG: DB 'I/O ERROR $'
CRLF: DB 0DH,0AH,'$'
DS 32
STACK EQU $
IOBUF: DS 4096
;***********************************;
; CP/M STANDARD EQUATES ;
;***********************************;
BOOT EQU 0000H ;WARM START ADDRESS
TFCB EQU 005CH ;DEFAULT FCB ADDRESS
TBUF EQU 0080H ;DEFAULT BUFFER ADDRESS
TBASE EQU 0100H ;TRANSIENT PROGRAM BASE
CBASE EQU 2900H ;CCP BASE ADDRESS
CPM EQU 0005H ;CPM ENTRY POINT
;***********************************;
; CP/M FUNCTION CODES ;
;***********************************;
SRSET EQU 00 ;SYSTEM RESET
RCON EQU 01 ;READ CONSOLE
WCON EQU 02 ;WRITE CONSOLE
RRDR EQU 03 ;READ READER
WPUN EQU 04 ;WRITE PUNCH
WLST EQU 05 ;WRITE LIST
ISTAT EQU 07 ;GET IOSTATUS
SSTAT EQU 08 ;SET IOSTATUS
WCONB EQU 09 ;WRITE CONSOLE BUFFER
RCONB EQU 10 ;READ CONSOLE BUFFER
CSTAT EQU 11 ;CHECK CONSOLE STATUS
LHEAD EQU 12 ;LIFT DISK HEAD
RSDSK EQU 13 ;RESET DISK SYSTEM
SDISK EQU 14 ;SELECT DISK
OPEN EQU 15 ;OPEN FILE
CLOSE EQU 16 ;CLOSE FILE
SFRST EQU 17 ;SEARCH FIRST
SNEXT EQU 18 ;SEARCH NEXT
FDELT EQU 19 ;DELETE FILE
READ EQU 20 ;READ RECORD
WRITE EQU 21 ;WRITE RECORD
CREATE EQU 22 ;CREATE FILE
RENAM EQU 23 ;RENAME FILE
LOGIN EQU 24 ;GET LOGIN
IDISK EQU 25 ;GET DISK NUMBER
SDMA EQU 26 ;SET DMA VECTOR
IALLOC EQU 27 ;GET ALLOCATION VECTOR
END