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
/
PROGRAMS
/
WSTAR
/
SIMPLE.ARK
/
TRUNCATE.MAC
< prev
Wrap
Text File
|
1987-07-06
|
3KB
|
163 lines
TITLE TRUNCATE absolute printer driver image into a DRV file
;
; Equates
;
CR EQU 0DH ; Special chars
LF EQU 0AH
;
BDOS EQU 0005H ; BDOS entry point
DFCB EQU 005CH ; Default FCB
DRVORG EQU 8680H ; Load point for printer driver
DRVREC EQU (DRVORG-300H) SHR 7 ; Record corresponding to load point
;
; Start truncation program
;
ASEG
ORG 100H ; Start of TPA
JMP T1
;
DS 128
T1: LXI SP,$ ; Top of stack
; LXI H,DFCB+16+1 ; No output FCB?
MOV A,M
CPI ' '
JZ THELP
;
LXI D,OTFCB ; Copy output FCB name
DCX H
MVI B,12
CALL COPY
;
LXI D,DFCB+1 ; No input FCB?
LDAX D
CPI ' '
JZ THELP
;
DCX D ; Can't open input file?
XRA A
STA DFCB+12
MVI C,15
CALL BDOS
INR A
JZ THELP
;
LXI D,OTFCB ; Create new output file
PUSH D
MVI C,19
CALL BDOS
POP D
MVI C,22
CALL BDOS
INR A
JZ TFULL
;
LXI H,DRVREC ; Starting record within image
SHLD DFCB+33
XRA A
STA DFCB+35
;
STA OTFCB+32 ; Start of output file
;
T2: MVI B,0 ; Read bufferful from input file
LXI D,OTBFR
T3: PUSH B
PUSH D
MVI C,26
CALL BDOS
LXI D,DFCB
MVI C,33
CALL BDOS
POP D
POP B
ORA A
JNZ T4
;
LHLD DFCB+33 ; Next record
INX H
SHLD DFCB+33
LXI H,128
DAD D
XCHG
INR B
MOV A,B
CPI OTSIZE
JNZ T3
;
T4: INR B ; Done?
DCR B
JZ T6
;
LXI D,OTBFR ; Write from buffer
T5: PUSH B
PUSH D
MVI C,26
CALL BDOS
LXI D,OTFCB
MVI C,21
CALL BDOS
POP D
POP B
ORA A
JNZ TFULL
;
LXI H,128 ; Next record
DAD D
XCHG
DCR B
JNZ T5
JMP T2
;
T6: LXI D,DFCB ; Close files
MVI C,16
CALL BDOS
LXI D,OTFCB
MVI C,16
CALL BDOS
;
LXI D,TDONMS ; All done
JMP THEL1
;
TFULL: LXI D,TFULMS ; Disk full
JMP THEL1
;
THELP: LXI D,THELMS ; Display help message
THEL1: MVI C,9
CALL BDOS
;
TDONE: MVI C,0 ; Done, exit to CP/M
MOV E,C
CALL BDOS
;
THELMS: DB CR,LF
DB 'TRUNCATE DRIVER.TMP DRIVER.DRV',CR,LF,LF
DB 'Where, DRIVER.TMP is the absolute driver image',CR,LF
DB ' DRIVER.DRV is the resulting DRV file',CR,LF
DB '$'
;
TFULMS: DB 'Disk full$'
TDONMS: DB 'DRV file created$'
;
; Subroutines
;
COPY: ; Copy B bytes from HL to DE
MOV A,M
STAX D
INX H
INX D
DCR B
JNZ COPY
RET
;
; Variable data
;
OTFCB: DB 0,' ' ; Output FCB
DW 0,0,0,0,0,0,0,0,0,0,0,0
;
OTBFR: ; Output buffer follows
OTSIZE EQU 1024/128 ; Assume 1k available
END