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
/
RCPM
/
RUNFILE.ASM
< prev
next >
Wrap
Assembly Source File
|
2000-06-30
|
4KB
|
147 lines
;RUNFILE.ASM Ver 1.0 27 Nov 1983
;
;Phil Cary, W5TYF
;Mesilla Valley RCP/M, Las Cruces, NM
;(505) 522-8856
;
;The following is an application of the technique described in CPMCHAIN.DOC
;
;The purpose of this program is to aid the user who is unfamiliar with your
;system in running the message program. It gives a message reminding the
;user of the correct filename, and then chains to that program.
;
;Since there are at least four major message systems(CBBS, MINICBBS, RBBS,
;and MINIRBBS) plus some others like my own MSGSYS, this will take the guess
;work out of the user's attempts to run your message system.
;
;To use this aid, fill in the name of the message program you are using below,
;change the message texts as desired, change the defdrv/usr equates as
;required and assemble. Then rename the COM file to one of the above and
;copy it into the drive/area of your message system. Rename the COM file
;again to another possibility from above and copy again. Continue until you
;think you have covered all bases.
;
;BDOS functions
wrcon: equ 2 ;console output
printf: equ 9 ;print string
bdos: equ 5 ;bdos call
openf: equ 15 ;open file
readf: equ 20 ;read sequential
dmaf: equ 26 ;set dma address
usrset: equ 32 ;set user area
;Misc equates
cr: equ 0dh
lf: equ 0ah
org 100h
jmp start ;skip over following data
;############################################################################
;CHANGE THE FOLLOWING TO MEET YOUR REQUIREMENTS
defdrv: equ 'F'-'@' ;drive containing message system COM file
defusr: equ 0 ;user area " " " " "
runfil: db 'MSGSYS ' ;filename for your message system COM file,
; eight chars-->>^^^^^^^^<< ;...MINICBBS, RBBS, MINICBBS, CBBS, etc.
;Remind the user of the name of your message program
opnmsg: db cr,lf
db 'Message program here is MSGSYS',cr,lf
db 'Chaining to MSGSYS.....',cr,lf,'$'
errmsg: db cr,lf
db 'Chain error! Warmbooting. Enter MSGSYS please.$'
;#############################################################################
start: mvi c,8 ;first move the filename above into fcb below
lxi h,runfil ;location of filename
lxi d,fcb+1 ;destination
call move ; 8 bytes
mvi c,usrset ;Set up set user function
mvi e,defusr ;desired user area
call bdos ;..do it
lxi d,opnmsg ;print the reminder
call prnmsg
lhld bdos+1 ;start of BDOS address
lxi b,-codeln ;subtract length of code to be moved
dad b ;..to make room at top of TPA
shld jmpr+1 ;fill in jump address below
push h ;save code address for RET
xchg ;..and use to calculate final location of fcb
lxi h,fcb-loader ;distance between start of loader and fcb
dad d ;add address computed above
shld fcbr+1 ;and put in LXI below for eventual file read
push h ;save FCB destination address
lxi h,loader ;point to start of loader
mvi c,codeln ;length of loader
call move ;destination still in DE from above
pop d ;recover FCB address( saved as push h above )
mvi c,openf
call bdos ;open file
inr a
jz error ;signal if error
pop h ;recover start of loader
sphl ;point stack to top of
push h ;start of loader and save address again
lxi h,100h ;point to start of TPA for set DMA below
ret ;to address on stack which is start of loader
loader: push h ;DMA address at start of TPA
xchg ;put in DE for DMA set
mvi c,dmaf
call bdos ;set DMA address
fcbr: lxi d,$-$ ;address of moved fcb filled in earlier
mvi c,readf
call bdos ;read next record
ora a ;check for end of file
jnz 100h ;EOF -> start TPA
pop h ;recover
lxi d,128 ;...and bump DMA address
dad d
jmpr: jmp $-$ ;jump to loader address filled in earlier
fcb: db defdrv ;drive code
ds 8 ;room for filename
db 'COM' ;file type
db 0,0,0,0,0,0 ;Zero out remaining 24 bytes of fcb
db 0,0,0,0,0,0
db 0,0,0,0,0,0
db 0,0,0,0,0,0
codeln: equ $-loader
move: ; c = # bytes, hl = source, de = destination
mov a,m
stax d
inx h
inx d
dcr c
jnz move
ret
error: lxi d,errmsg
call prnmsg
jmp 0
; Write a string of characters to the CRT
;
prnmsg: mvi c,printf
call bdos
ret
end