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 / 22RSX / 22RSX-20.ARK / EXPTABS.ASM < prev    next >
Assembly Source File  |  1984-10-13  |  2KB  |  74 lines

  1. ;
  2. ; Module name : EXPTABS.ASM
  3. ; Author      : James Whorton
  4. ; Date written: 09/24/84
  5. ;
  6. ;
  7. ; This sample module illustrates how to write an RSX for the 22RSX
  8. ; environment. While it is rather simple, it does give you an idea
  9. ; on how to proceed with your own modules. Have fun. JHW <--
  10. ; (Oh, yes, this RSX will expand TAB chars sent to the console
  11. ; device using BDOS call 2 (CONOUT) to <spac> # of spaces.
  12. ;
  13. ;
  14. cout:    equ    2
  15. cr:    equ    13
  16. lf:    equ    10
  17. tab:    equ    9
  18. bell:    equ    7
  19. spac:    equ    4        ;set this to the number of spaces you
  20.                 ;wish TAB's to be expanded to
  21. ; RSX prefix
  22. ;
  23. serial:    db    0,0,0,0,0,0    ;Space for serial # (CP/M 3.0)
  24. start:    jmp    rsxstrt        ;jump to beginning of actual module
  25. next:    jmp    $-$        ;jump to next RSX in line or BDOS jump table
  26. prev:    dw    0        ;Previous module.
  27. remove:    db    0        ;Remove flag.
  28. nonbank:db    0        ;Non-bank flag.
  29. name:    db    'EXP TABS'    ;This is the name of the RSX. It MUST be
  30.                 ;8 bytes, pad with blanks if needed.
  31. loader:    db    0        ;Loader flag.
  32.     db    0,0        ;Reserved for sysem use (CP/M 3.0)
  33. ;
  34. ;Module starts here
  35. ;
  36. rsxstrt:mov    a,c        ;check function
  37.     cpi    cout        ;output?
  38.     jnz    next        ;nope, go ahead
  39.     mov    a,e        ;check char
  40.     cpi    9        ;is it a TAB?
  41.     jnz    next
  42. ;ok, it's a TAB char, let's save some stuff
  43.     lxi    h,0
  44.     dad    sp
  45.     shld    userstk        ;save satck pointer
  46.     lxi    sp,rstack    ;set local stack
  47.     push    d        ;save regs
  48.     push    b
  49. ;now output <spac> spaces
  50.     mvi    b,spac        ;set up space counter
  51. sploop:    mvi    e,' '        ;put space in reg for output
  52.     mvi    c,cout        ;BDOS function
  53.     push    b
  54.     call    next        ;output it
  55.     pop    b
  56.     dcr    b        ;decrement counter
  57.     jnz    sploop        ;if not done, go again
  58. ;we're done, so restore stack pointer and return
  59.     lhld    userstk        ;restore stack pointer
  60.     sphl
  61.     pop    b        ;restore regs
  62.     pop    d
  63.     ret            ;back to wherever we came from
  64. ;
  65. ;Data storage area
  66. ;
  67. userstk:dw    0        ;old stack pointer
  68.     ds    20        ;local stack space
  69. rstack:    dw    0
  70. ;
  71.     link    '22INSTB'
  72. rom
  73. ;
  74. ;Data storage a