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 / MODEMS / ZMODEM / RZMP13.LBR / RZMPOVL.MZC / RZMPOVL.MAC
Text File  |  2000-06-30  |  11KB  |  466 lines

  1. ;
  2. ; System-dependent code / assembly code overlay for RZMP
  3. ;
  4. ;    Insert your own code as necessary in this file. Code contained herein
  5. ; has been written in Z80 code for use with M80. Once assembled,
  6. ; convert to hex with RELHEX and use MLOAD to overlay it over the main
  7. ; RZMPX.COM file to produce your very own RZMP.COM.
  8. ;
  9. ; Notes on modifying this file:
  10. ;    Hi-Tech C requires that functions do not change either index register
  11. ; (IX or IY). If your overlay requires either of these to be changed, ensure
  12. ; they are restored to their original values on return.
  13. ;    Since collecting parameters from C functions can be tricky, only change
  14. ; the parts marked 'Insert your own code here'. Do NOT modify the jump
  15. ; table at the start. Do NOT modify the entry/exit sections of each
  16. ; function. Do NOT pass 'GO'. Do NOT collect $200. You should, however,
  17. ; modify the section marked 'user-set variables' to reflect your system
  18. ; configuration.
  19. ;    This file is derived from the main ZMP installation overlay file, and
  20. ; contains the same jokes. It has, however, been modified to remove the
  21. ; necessity for modem stuff to be included. These are handled by BYE5 and
  22. ; later: note that BYE must be running for it to work.
  23. ;    Terminal characteristics are also included: these are useful if you are
  24. ; monitoring a call on the remote system. Most have been set up for ADM-3A
  25. ; (with a few of my own additions). Modify to suit your own terminal. An
  26. ; inline print routine is provided for printing strings in the usual way:
  27. ; usage is
  28. ;
  29. ;    call    print
  30. ;    db    'required string',0
  31. ;
  32. ;    If you find your overlay exceeds the maximum size (currently 0400h),
  33. ; you will have to re-compile the whole thing. Good luck. You might try
  34. ; informing us if you need to do this: if too many people need to do it, we
  35. ; haven't allowed enough room.
  36. ;
  37. ; Ron Murray 8/9/88
  38. ;
  39. ;******************************************************************************
  40.  
  41. ;User-set variables:
  42. whladd    equ    03eh        ; Address of wheel byte
  43.                 ; If your system doesn't support a wheel byte
  44.                 ; for system security, set this to point to a
  45.                 ; byte which is permanently zero. All incoming
  46.                 ; callers will then have the same security
  47.                 ; level -- there will be no special features
  48.                 ; for the sysop.
  49. mspeed    equ    03ch        ; Address of mspeed byte
  50.  
  51. ;The following two addresses point to memory which will be incremented on
  52. ; each upload/download. If your system doesn't use this feature, set them
  53. ; to point to 'junk'.
  54. uploads    equ    junk        ; Address of upload count byte
  55. dnloads    equ    junk        ; Address of download count byte
  56.  
  57. defdrv    equ    'B'        ; Default upload du: for non-wheels
  58. defusr    equ    0        ; B0:
  59. logdrv    equ    'A'        ; du: for .LOG file
  60. logusr    equ    14        ; A14:    (not yet implemented)
  61. upridrv    equ    'B'        ; du: for private uploads
  62. upriusr    equ    15        ; B15:
  63. dpridrv    equ    'B'        ; du: for private downloads
  64. dpriusr    equ    14        ; B14:
  65.  
  66. clkspd    equ    4        ; Processor clock speed in MHz
  67.  
  68. ;******************************************************************************
  69.  
  70. ;Don't change the following equates
  71. userdef    equ    0145h        ; origin of this overlay: get this value
  72.                 ; from the .SYM file produced when RZMP.COM
  73.                 ; is linked
  74. ovsize    equ    0400h        ; max size of this overlay
  75.  
  76. ;******************************************************************************
  77.  
  78.     .z80            ; use z80 code
  79.     aseg            ; absolute
  80.  
  81.     org    userdef
  82.  
  83. esc    equ    1bh
  84. ctrlq    equ    11h
  85. cr    equ    0dh
  86. lf    equ    0ah
  87. bdos    equ    5
  88.  
  89. codebgn    equ    $
  90.  
  91. ;Jump table for the overlay: do NOT change this
  92. jump_tab:
  93.     jp    getvars        ; get system variables
  94.     jp    mrd        ; modem read with timeout
  95.     jp    mchin        ; get a character from modem
  96.     jp    mchout        ; send a character to the modem
  97.     jp    mordy        ; test for tx buffer empty
  98.     jp    mirdy        ; test for character received
  99.     jp    sndbrk        ; send break
  100.     jp    cursadd        ; cursor addressing
  101.     jp    cls        ; clear screen
  102.     jp    invon        ; inverse video on
  103.     jp    invoff        ; inverse video off
  104.     jp    hide        ; hide cursor
  105.     jp    show        ; show cursor
  106.     jp    savecu        ; save cursor position
  107.     jp    rescu        ; restore cursor position
  108.     jp    mint        ; service modem interrupt
  109.     jp    invec        ; initialise interrupt vectors
  110.     jp    dinvec        ; de-initialise interrupt vectors
  111.     jp    mdmerr        ; test uart flags for error
  112.     jp    dtron        ; turn DTR on
  113.     jp    dtroff        ; turn DTR OFF
  114.     jp    init        ; initialise uart
  115.     jp    wait        ; wait seconds
  116.     jp    mswait        ; wait milliseconds
  117.     jp    userin        ; user-defined entry routine
  118.     jp    userout        ; user-defined exit routine
  119.  
  120. ;Spares to accommodate future additions
  121.     jp    spare        ; spares for later use
  122.     jp    spare        ; spares for later use
  123.     jp    spare        ; spares for later use
  124.     jp    spare        ; spares for later use
  125.     jp    spare        ; spares for later use
  126.  
  127. ;
  128. ; Main code starts here
  129. ;
  130. ;User-defined entry routine
  131. userin:
  132.     ret
  133.  
  134. ;User-defined exit routine
  135. userout:
  136.     ret
  137.  
  138. ;Bad filetypes: rzmp won't send these unless WHEEL is set. They will be
  139. ;  renamed to .OBJ on receive, also unless WHEEL is set. They can be in upper
  140. ;  or lower case, but must be exactly THREE characters long. A null terminates
  141. ;  the list. There's no limit to the size of the list, consistent with the
  142. ;  maximum overlay size.
  143.  
  144. badtypes:
  145.     db    'com'        ; No .COM files
  146.     db    'env'        ; No ZCPR3 .ENV
  147.     db    'fcp'        ; or .FCP
  148.     db    'iop'        ; or .IOP
  149.     db    'ndr'        ; or .NDR
  150.     db    'rcp'        ; or .RCP
  151.  
  152.     db    0        ; end of list: leave this!
  153.  
  154. ;****************************************************************************
  155. ;Video terminal sequences: these are for ADM-3A: Modify as you wish
  156. ;Cursor addressing: 
  157. cursadd:
  158.     ld    hl,2        ; get parameters
  159.     add    hl,sp
  160.     ex    de,hl
  161.     call    getparm        ; in HL
  162.     ld    (row),hl    ; row
  163.     call    getparm
  164.     ld    (col),hl    ; column
  165.                 ; <== Insert your own code here
  166.                 ; using values in row and col
  167.     call    print
  168.     db    esc,'=',0    ; ADM-3A leadin
  169.     ld    a,(row)        ; row first
  170.     add    a,' '        ; add offset
  171.     call    cout
  172.     ld    a,(col)        ; same for column
  173.     add    a,' '
  174.     call    cout
  175.                 ; <== end of your own code
  176.     ret
  177.  
  178. row:    ds    2        ; row
  179. col:    ds    2        ; column
  180.  
  181.  
  182. ;Clear screen:
  183. cls:
  184.     call    print
  185.     db    01ah,0
  186.     ret
  187.  
  188. ;Inverse video on:
  189. invon:
  190.     call    print
  191.     db    esc,')',0
  192.     ret
  193.  
  194. ;Inverse video off:
  195. invoff:
  196.     call    print
  197.     db    esc,'(',0
  198.     ret
  199.  
  200. ;Turn off cursor:
  201. hide:
  202.     ret
  203.  
  204. ;Turn on cursor:
  205. show:
  206.     ret
  207.  
  208. ;Save cursor position:
  209. savecu:
  210.     ret
  211.  
  212. ;Restore cursor position:
  213. rescu:
  214.     ret
  215.  
  216. ;****************************************************************************
  217.  
  218. ;Service modem interrupt:
  219. mint:
  220.     ret            ; my system doesn't need this
  221.  
  222. ;Initialise interrupt vectors:
  223. invec:
  224.     ret            ; ditto
  225.  
  226. ;De-initialise interrupt vectors:
  227. dinvec:
  228.     ret            ; ditto
  229.  
  230. ;****************** End of user-defined code ********************************
  231. ;*************** Don't change anything below this point *********************
  232.  
  233. spare:
  234.     ret
  235.  
  236. ;Get a character from the modem: return in HL
  237. mchin:
  238.     ld    c,64        ; BYE function 64
  239.     call    bdos
  240.     ld    h,0
  241.     ld    l,a
  242.     or    a
  243.     ret
  244.  
  245. ;Send a character to the modem
  246. mchout:
  247.     ld    hl,2        ; get the character
  248.     add    hl,sp
  249.     ld    e,(hl)
  250.     ld    c,63        ; BYE function 63
  251.     call    bdos
  252.     ret            ; done
  253.  
  254. ;Test for output ready: return TRUE (1) in HL if ok
  255. mordy:
  256.     ld    c,62        ; BYE function 62
  257.     call    bdos
  258.     ld    hl,0        ; assume not ready
  259.     or    a
  260.     jr    z,mordy1
  261.     ld    hl,1        ; ready
  262. mordy1:
  263.     ret
  264.  
  265. ;Test for character at modem: return TRUE (1) in HL if so
  266. mirdy:
  267.     push    bc        ; must save bc for mrd()
  268.     ld    c,61        ; BYE function 61
  269.     call    bdos
  270.     ld    hl,0        ; assume not ready
  271.     or    a
  272.     jr    z,mirdy1
  273.     ld    hl,1
  274. mirdy1:
  275.     pop    bc
  276.     ret
  277.  
  278. ;Send a break to the modem: leave empty if your system can't do it
  279. sndbrk:
  280.     ret            ; It's not going to be easy with BYE
  281.  
  282. ;Test UART flags for error: return TRUE (1) in HL if error
  283. mdmerr:
  284.     ld    hl,0
  285.     xor    a        ; set no error
  286.     ret            ; not used
  287.  
  288. ;Turn DTR ON
  289. dtron:
  290.     ret            ; not used
  291.  
  292. ;Turn DTR OFF
  293. dtroff:
  294.     ret            ; not used
  295.  
  296. ;Initialise the UART
  297. init:
  298.     ret            ; not used
  299.  
  300. ;Return pointer to system variables
  301. getvars:
  302.     ld    hl,sysvars
  303.     ret
  304.  
  305. ;Modem character test for 100 ms
  306. mrd:
  307.     push    bc        ; save bc
  308.     ld    bc,100        ; set limit
  309. mrd1:
  310.     call    mirdy        ; char at modem?
  311.     jr    nz,mrd2        ; yes, exit
  312.     ld    hl,1        ; else wait 1ms
  313.     call    waithlms
  314.     dec    bc        ; loop till done
  315.     ld    a,b
  316.     or    c
  317.     jr    nz,mrd1
  318.     ld    hl,0        ; none there, result=0
  319.     xor    a
  320. mrd2:
  321.     pop    bc
  322.     ret
  323.  
  324. ; Inline print routine: destroys A and HL
  325.  
  326. print:
  327.     ex    (sp),hl        ; get address of string
  328. ploop:
  329.     ld    a,(hl)        ; get next
  330.     inc    hl        ; bump pointer
  331.     or    a        ; done if zero
  332.     jr    z,pdone
  333.     call    cout        ; else print
  334.     jr    ploop        ; and loop
  335. pdone:
  336.     ex    (sp),hl        ; restore return address
  337.     ret            ; and quit
  338.  
  339. ;
  340. ;Output a character in A to the local console only
  341. ;
  342. cout:
  343.     push    bc        ; save regs
  344.     push    de
  345.     push    hl
  346.     ld    e,a        ; character to E
  347.     ld    c,68        ; BYE function 68
  348.     call    bdos        ; print it
  349.     pop    hl
  350.     pop    de
  351.     pop    bc
  352.     ret
  353.  
  354. ;Wait(seconds)
  355. wait:
  356.     ld    hl,2
  357.     add    hl,sp
  358.     ex    de,hl        ; get delay size
  359.     call    getparm
  360.                 ; fall thru to..
  361. ;Wait seconds in HL
  362. waithls:
  363.     push    bc        ; save bc
  364.     push    de        ; de
  365.     push    ix        ; and ix
  366.     ld    ix,0        ; then point ix to 0
  367.                 ; so we don't upset memory-mapped i/o
  368.  
  369. ;Calculate values for loop constants. Need to have two loops to avoid
  370. ;   16-bit overflow with clock speeds above 9 MHz.
  371.  
  372. outerval    equ    (clkspd / 10) + 1
  373. innerval    equ    (6667 / outerval) * clkspd
  374.  
  375. wait10:
  376.     ld    b,outerval
  377.  
  378. wait11:
  379.     ld    de,innerval
  380.  
  381. wait12:
  382.     bit    0,(ix)        ; time-wasters
  383.     bit    0,(ix)
  384.     bit    0,(ix)        ; 20 T-states each
  385.     bit    0,(ix)
  386.     bit    0,(ix)
  387.     bit    0,(ix)
  388.     dec    de
  389.     ld    a,e
  390.     ld    a,d
  391.     or    e
  392.     jr    nz,wait12    ; 150 T-states per inner loop
  393.     djnz    wait11        ; decrement outer loop
  394.     dec    hl        ; ok, decrement count in hl
  395.     ld    a,h
  396.     or    l
  397.     jr    nz,wait10
  398.     pop    ix        ; done -- restore ix
  399.     pop    de        ; de
  400.     pop    bc        ; and bc
  401.     ret
  402.  
  403. ;Wait milliseconds
  404. mswait:
  405.     ld    hl,2
  406.     add    hl,sp
  407.     ex    de,hl        ; get delay size
  408.     call    getparm
  409.                 ; fall thru to..
  410. ;Wait milliseconds in HL
  411. waithlms:
  412.     push    de
  413. w1ms0:
  414.     ld    de,39 * clkspd
  415. w1ms1:
  416.     dec    de
  417.     ld    a,d
  418.     or    e
  419.     jr    nz,w1ms1
  420.     dec    hl
  421.     ld    a,h
  422.     or    l
  423.     jr    nz,w1ms0
  424.     pop    de
  425.     ret
  426.  
  427. ;Get next parameter from (de) into hl
  428. getparm:
  429.     ex    de,hl        ; get address into hl
  430.     ld    e,(hl)        ; get lo
  431.     inc    hl
  432.     ld    d,(hl)        ; then hi
  433.     inc    hl        ; bump for next
  434.     ex    de,hl        ; result in hl, address still in de
  435.     ret
  436.  
  437. ;------------------------------------------------------------------------------
  438.  
  439. ;User variables appear here
  440. sysvars:
  441.     dw    whladd        ; address of wheel byte
  442.     dw    mspeed        ; address of mspeed byte
  443.     dw    uploads        ; address of upload count
  444.     dw    dnloads        ; address of download count
  445.     dw    badtypes    ; bad filetype list
  446.     dw    junk        ; spare
  447.     dw    junk        ; spare
  448.     dw    junk        ; spare
  449.     dw    junk        ; spare
  450.     dw    junk        ; spare
  451.     db    defdrv,defusr    ; default upload du:
  452.     db    logdrv,logusr    ; du: for .LOG files
  453.     db    upridrv,upriusr    ; du: for private uploads
  454.     db    dpridrv,dpriusr    ; du: for private downloads
  455.  
  456. ;------------------------------------------------------------------------------
  457.  
  458. junk:
  459.     ds    2        ; junk bytes: no significance
  460.  
  461.      if    ($ - codebgn) gt ovsize
  462. toobig:    jp    errval        ; Overlay too large!
  463.      endif
  464.  
  465.     end
  466.