home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / asmutl / m80date.lbr / GETBUF.MZC / GETBUF.MAC
Text File  |  1987-07-18  |  2KB  |  80 lines

  1.     TITLE    GETBUF  RSX to allocate buffer in high memory
  2.  
  3. ;************************************************************************
  4. ;                                    *
  5. ;    This RSX returns the address of a buffer resident within    *
  6. ;    the RSX.                            *
  7. ;                                    *
  8. ;    On return  HL = buffer address                    *
  9. ;           BC = buffer length (always = 229)               *
  10. ;                                    *
  11. ;    This RSX uses Ron Fowler's RSX calling convention: in the        *
  12. ;    RSX parameter block,                        *
  13. ;                                    *
  14. ;        FUNC         = 127                    *
  15. ;        NUMPARMS    = 1    (for this RSX)            *
  16. ;        PARM1        = address of RSX name in the calling    *
  17. ;                  program.                *
  18. ;                                    *
  19. ;                        16 Feb 84  HRC        *
  20. ;                                    *
  21. ;************************************************************************
  22.  
  23.     .Z80
  24.     CSEG
  25.  
  26. PREFIX:    DB    0,0,0,0,0,0        ; CP/M 3.0 SERIAL NUMBER.
  27. ENTRY:    JP    BEGIN            ; JP TO ENTRY POINT.
  28. NEXT:    DB    0C3H            ; JP INSTRUCTION OPCODE FOR THE
  29.     DW    0             ; NEXT RSX OR THE LOADER.
  30.     DW    0            ; PREVIOUS RSX.
  31. REMOVE:    DB    0FFH            ; REMOVE RSX ON WARM START.
  32.     DB    0            ; CAN LOAD IN BANKED SYSTEM.
  33. MYNAME:    DB    'GETBUF  '        ; RSX NAME.
  34.     DB    0            ; THIS IS THE LOADER - FLAG.
  35.     DB    0,0            ; RFU.
  36.  
  37. BEGIN:
  38.     LD    A,C            ; GET BDOS FUNCTION CODE AND SEE
  39.     CP    60            ; IF IT IS A RSX CALL.
  40.     JP    NZ,NEXT            ; PASS ON IF IT IS NOT.
  41.     LD    A,(DE)            ; HAVE AN RSX CALL SO GET THE
  42.     CP    127            ; FUNCTION NO AND SEE OF OURS.
  43.     JP    NZ,NEXT            ; PASS ON IF NOT.
  44.     PUSH    DE
  45.     EX    DE,HL            ; NOW TEST IF NUMBER OF PARMS IS
  46.     INC    HL            ; CORRECT FOR THIS RSX.
  47.     LD    A,(HL)
  48.     CP    1            ; WE USE ONE PARAMETER.
  49.     JP    NZ,PASSON        ; PASS ON IF NOT OURS.
  50.     INC    HL            ; IF OURS, CHECK THE NAME.
  51.     LD    E,(HL)            ; GET USER SUPPLIED NAME
  52.     INC    HL            ; IN DE REGISTER.
  53.     LD    D,(HL)            
  54.     LD    HL,MYNAME        
  55.     LD    B,8            ; 8 CHARACTER NAME.
  56. LOOP:
  57.     LD    A,(DE)            ; GET NEXT CHAR OF NAME AND
  58.     CP    (HL)            ; COMPARE WITH PASSED NAME.
  59.     INC    HL            ; (DOUBLE REGISTER INCREMENT)
  60.     INC    DE            ; (DOES NOT CHANGE ZERO FLAG)
  61.     JP    NZ,PASSON        ; NOT OUR NAME.
  62.     DJNZ    LOOP            ; THIS CHAR OK, TEST ANOTHER.
  63.  
  64.                     ; OK, HAVE A CALL FOR US.
  65.  
  66.     LD    HL,(NEXT+1)        ; THE BUFFER CAN ONLY BE ALLOCATED
  67.     LD    (ENTRY+1),HL        ; ONCE SO CHANGE ENTRY ADDRESS TO
  68.                     ; THE NEXT RSX ADDRESS.  THEN THE
  69.     LD    HL,BEGIN                ; BUFFER CAN OVERLAY THE RSX CODE.
  70.     LD    BC,PREFIX+256-BEGIN    ; LENGTH OF THE BUFFER.
  71.     POP    DE            ; RETURN TO CALLING PROGRAM.
  72.     XOR    A            ; SIGNAL 'WE DONE IT'.
  73.     RET                
  74.  
  75. PASSON:
  76.     POP    DE            ; PASS ON TO THE NEXT RSX.
  77.     JP    NEXT            ; C REGISTER WAS NOT MODIFIED.
  78.  
  79.     END
  80.