home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
asmutl
/
m80date.lbr
/
GETBUF.MZC
/
GETBUF.MAC
Wrap
Text File
|
1987-07-18
|
2KB
|
80 lines
TITLE GETBUF RSX to allocate buffer in high memory
;************************************************************************
; *
; This RSX returns the address of a buffer resident within *
; the RSX. *
; *
; On return HL = buffer address *
; BC = buffer length (always = 229) *
; *
; This RSX uses Ron Fowler's RSX calling convention: in the *
; RSX parameter block, *
; *
; FUNC = 127 *
; NUMPARMS = 1 (for this RSX) *
; PARM1 = address of RSX name in the calling *
; program. *
; *
; 16 Feb 84 HRC *
; *
;************************************************************************
.Z80
CSEG
PREFIX: DB 0,0,0,0,0,0 ; CP/M 3.0 SERIAL NUMBER.
ENTRY: JP BEGIN ; JP TO ENTRY POINT.
NEXT: DB 0C3H ; JP INSTRUCTION OPCODE FOR THE
DW 0 ; NEXT RSX OR THE LOADER.
DW 0 ; PREVIOUS RSX.
REMOVE: DB 0FFH ; REMOVE RSX ON WARM START.
DB 0 ; CAN LOAD IN BANKED SYSTEM.
MYNAME: DB 'GETBUF ' ; RSX NAME.
DB 0 ; THIS IS THE LOADER - FLAG.
DB 0,0 ; RFU.
BEGIN:
LD A,C ; GET BDOS FUNCTION CODE AND SEE
CP 60 ; IF IT IS A RSX CALL.
JP NZ,NEXT ; PASS ON IF IT IS NOT.
LD A,(DE) ; HAVE AN RSX CALL SO GET THE
CP 127 ; FUNCTION NO AND SEE OF OURS.
JP NZ,NEXT ; PASS ON IF NOT.
PUSH DE
EX DE,HL ; NOW TEST IF NUMBER OF PARMS IS
INC HL ; CORRECT FOR THIS RSX.
LD A,(HL)
CP 1 ; WE USE ONE PARAMETER.
JP NZ,PASSON ; PASS ON IF NOT OURS.
INC HL ; IF OURS, CHECK THE NAME.
LD E,(HL) ; GET USER SUPPLIED NAME
INC HL ; IN DE REGISTER.
LD D,(HL)
LD HL,MYNAME
LD B,8 ; 8 CHARACTER NAME.
LOOP:
LD A,(DE) ; GET NEXT CHAR OF NAME AND
CP (HL) ; COMPARE WITH PASSED NAME.
INC HL ; (DOUBLE REGISTER INCREMENT)
INC DE ; (DOES NOT CHANGE ZERO FLAG)
JP NZ,PASSON ; NOT OUR NAME.
DJNZ LOOP ; THIS CHAR OK, TEST ANOTHER.
; OK, HAVE A CALL FOR US.
LD HL,(NEXT+1) ; THE BUFFER CAN ONLY BE ALLOCATED
LD (ENTRY+1),HL ; ONCE SO CHANGE ENTRY ADDRESS TO
; THE NEXT RSX ADDRESS. THEN THE
LD HL,BEGIN ; BUFFER CAN OVERLAY THE RSX CODE.
LD BC,PREFIX+256-BEGIN ; LENGTH OF THE BUFFER.
POP DE ; RETURN TO CALLING PROGRAM.
XOR A ; SIGNAL 'WE DONE IT'.
RET
PASSON:
POP DE ; PASS ON TO THE NEXT RSX.
JP NEXT ; C REGISTER WAS NOT MODIFIED.
END