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
/
BDSC
/
BDSC-1
/
BDS46.LQB
/
BDS46.LIB
Wrap
Text File
|
2000-06-30
|
5KB
|
181 lines
;
; BDS.LIB for BDS C v1.46 March 15, 1982
;
; Addresses within C.CCC and the ram area to be used by machine
; language CRL functions.
;
; If you alter C.CCC by reassembling CCC.ASM, be sure to go through
; this file and make sure all the addresses are equated to the
; appropriate values resulting from the reassembly. Then the library
; functions will be ready to reassemble.
;
page 76
CPM: EQU 1 ;true if running under CP/M; else 0
;
; System addresses:
;
if not cpm
CCCORG: EQU WHATEVER ;IF NOT RUNNING UNDER CP/M, SET THIS TO LOAD ADDR,
RAM: EQU WHATEVER2 ;SET THIS TO RAM AREA,
BASE: EQU WHATEVER3 ;AND THIS TO THE BASE OF SYSTEM MEMORY (`BASE' IS
;THE RE-BOOT LOCATION UNDER CP/M; FOR NON-CP/M OPER-
;ATION, IT SHOULD BE SET TO A SAFE PLACE TO JUMP TO ON
;ERROR OR USER-ABORT.
endif
if cpm
base: equ 0000h ;either 0 or 4200h for CP/M systems
fcb: equ base+5ch ;default file control block
tbuff: equ base+80h ;sector buffer
bdos: equ base+5 ;bdos entry point
tpa: equ base+100h ;transient program area
nfcbs: equ 8 ;max number of open files allowed at one time
errorv: equ 255 ;error value returned by BDOS calls
cccorg: equ tpa ;where run-time package resides *TESTING*
;**************************************************
ram: equ cccorg+471h ;THIS WILL PROBABLY CHANGE IF YOU CUSTOMIZE CCC.ASM
;**************************************************
endif
cr: equ 0dh ;ASCII codes: carriage return
lf: equ 0ah ; linefeed
newlin: equ lf ; newline
tab: equ 9 ; tab
bs: equ 08h ; backspace
cntrlc: equ 3 ; control-C
;
; Subroutines in C.CCC (the addresses should be that of the
; appropriate jump vector entry points):
;
error: equ cccorg+1dh ;return -1 in HL:
exit: equ error+3 ;close all open files and reboot
if cpm
close: equ error+6
setfcb: equ error+9 ;set up fcb at HL from text at DE
fgfd: equ error+12 ;set C according to whether file fd is open
fgfcb: equ error+15 ;figure address of internal fcb for file fd
endif
eqwel: equ cccorg+0e5h
smod: equ cccorg+10fh
usmod: equ cccorg+129h
smul: equ cccorg+13fh
usmul: equ cccorg+16bh
usdiv: equ cccorg+189h
sdiv: equ cccorg+1cbh
cmh: equ cccorg+1fah ;2's complement HL
cmd: equ cccorg+202h ;2's complement DE
ma1toh: equ cccorg+20ah ;get 1st stack element into HL and A
ma2toh: equ cccorg+213h ; 2nd
ma3toh: equ ma2toh+6 ; 3rd
ma4toh: equ ma2toh+12 ; 4th
ma5toh: equ ma2toh+18 ; 5th
ma6toh: equ ma2toh+24 ; 6th
ma7toh: equ ma2toh+30 ; 7th
arghak: equ ma2toh+36 ;copy first 6 or so stack elements to argc area
setdma: equ cccorg+460h ;set CP/M internal DMA pointer to BASE+80h (tbuff)
;
; The following addresses will depend on the value of RAM if you
; customize CCC.ASM....be sure they correspond to the assembly
; results of CCC.ASM in such cases. If you remove some of the data
; areas from CCC.ASM (in case they aren't needed), be sure to remove
; from here also.
;
org ram
room: ds 30 ;misc. scratch area (for use by BDS...you can have
;the last ten bytes or so, though, if you really
;need them)
pbase: ds 2 ;DMA video plotting base
ysize: ds 2 ;screen width (# of columns)
xsize: ds 2 ;screen length (# of lines)
psize: ds 2 ;screen size (ysize * xsize)
rseed: ds 8 ;random number seed scratch area
args: ds 14 ;where arghak puts arg values off the stack
iohack: ds 6 ;room for input and output ops for "inp" and "outp"
allocp: ds 2 ;storage allocation pointer
alocmx: ds 2 ;highest addr useable by storage allocator
;
; This is the end of the user-customizable area. The remaining
; equated values are not to be altered.
;
;
; Special locations in C.CCC containing interesting pointers:
;
extrns: equ cccorg+15h ;base of external data area (set by CLINK)
cccsiz: equ cccorg+17h ;size of C.CCC for use by CLINK only
codend: equ cccorg+19h ;address of byte following last byte of program code
; (set by CLINK)
freram: equ cccorg+1bh ;first free address after external area
; (set by CLINK)
arg1: equ args ;these are just convenient names for
arg2: equ args+2 ;the words in the "args" area
arg3: equ args+4
arg4: equ args+6
arg5: equ args+8
arg6: equ args+10
arg7: equ args+12
tmp: equ room ;some scratch data areas used by library
tmp1: equ room+1 ;functions.
tmp2: equ room+2
tmp2a: equ room+4
ungetl: equ room+6
lastc: equ room+7
;
; BDOS call codes:
;
if cpm
conin: equ 1 ;get a character from console
conout: equ 2 ;write a character to console
lstout: equ 5 ;write a character to list device
dconio: equ 6 ;direct console I/O (only for CP/M 2.0)
pstrng: equ 9 ;print string (terminated by '$')
getlin: equ 10 ;get buffered line from console
cstat: equ 11 ;get console status
select: equ 14 ;select disk
openc: equ 15 ;open a file
closec: equ 16 ;close a file
delc: equ 19 ;delete a file
reads: equ 20 ;read a sector (sequential)
writs: equ 21 ;write a sector (sequential)
creatc: equ 22 ;make a file
renc: equ 23 ;rename file
sdma: equ 26 ;set dma
readr: equ 33 ;read random sector
writr: equ 34 ;write random sector
cfsizc: equ 35 ;compute file size
srrecc: equ 36 ;set random record
endif