home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / basic / redir.asm < prev    next >
Assembly Source File  |  1994-07-13  |  4KB  |  120 lines

  1. TITLE 'MBASIC console output - printer redirection'
  2. ;****************************************************************
  3. ;*                                *
  4. ;*                      R E D I R . A S M                       *
  5. ;*                                *
  6. ;****************************************************************
  7. ;                               by
  8. ;                          Jack L. Owens
  9. ;
  10. ;                   Jack Owens Service Company
  11. ;                       1626 Del Dayo Drive
  12. ;                     Carmichael, California
  13. ;                              95608
  14. ;
  15. ;                          (916)485-8995
  16. ;
  17. ;                          March 7, 1984
  18. ;
  19. ;       For use with Microsoft Basic version 5.21 interpreter
  20. ;
  21. ;    Patch to the base page of operating system to allow
  22. ;     redirection of BASIC console output to the printer.
  23. ;
  24. ;    Method:
  25. ;        a) set up one of the RST locations with a jump
  26. ;            to the BIOS print vector.
  27. ;
  28. ;        b) set up another RST location with a call to
  29. ;            the BIOS print vector and then a routine
  30. ;            to jump to the CONOUT vector.
  31. ;
  32. ;        c) poke an RST <n> in place of the call instruction
  33. ;            in BASIC then continue with BASIC program
  34. ;
  35. ;        d) when all through, poke a <call> instruction to return
  36. ;            the CONOUT vector in BASIC to it's original
  37. ;            condition.
  38. ;
  39. ;    Note: You may find out where the base of the BIOS jump vector is
  40. ;        by inspecting the pointer found in addresses 1 and 2 in
  41. ;        a normal CP/M system.
  42. ;
  43. ;    Set your program up with the following information:
  44. ;    
  45. ;100 LIST% = 207'        RST 1
  46. ;110 BOTH% = 223'        RST 3
  47. ;120 CALLL% = 205'        Replace RST instruction with CALL (CD)
  48. ;130 CONOUT% = &H41E4'        Location in MBASIC 5.21 with call to CONOUT
  49. ;
  50. ;    Then whenever you wish to redirect the console output to the printer
  51. ;     only, do:
  52. ;
  53. ;1500 POKE CONOUT%,LIST%
  54. ;    
  55. ;     and all console output will go to the printer.  If you want the
  56. ;     console output to go to both printer and console, then do:
  57. ;
  58. ;1500 POKE CONOUT%,BOTH%
  59. ;
  60. ;     and all console output goes to both printer and console.
  61. ;
  62. ;    Whenever you want to return to normal operation, do:
  63. ;
  64. ;2500 POKE CONOUT%,CALLL%
  65. ;
  66. ;     and the MBASIC interpreter returns to normal operation.
  67. ;
  68. ;    Run the following program once after boot up.  Then go ahead
  69. ;     with normal operation.  Only shutting the system down should
  70. ;     destroy the routines in the RST locations.  WARNING! some
  71. ;     CP/M systems use these RST locations for their own purposes. 
  72. ;     If so, change to another set of RST locations not in use.  My
  73. ;     system uses the RST 2 location to keep track of the system
  74. ;     clock time.
  75. ;
  76. BIOS    equ    0EE00h        ;start of BIOS jump table
  77.                 ; change to suit your system
  78. ;
  79. CONOUT        equ    BIOS+12        ;CONOUT jump vector
  80. LIST        equ    BIOS+15        ;LIST jump vector
  81. RESTART1    equ    8        ;location of RST 1
  82. RESTART3    equ    18h        ;location of RST 3
  83. ;
  84.     
  85. org    100h
  86. ;
  87.     jmp    START        ;jump around code to be moved
  88. ;
  89. ; The following code up to start is moved with the code at START
  90. ;
  91. ;RST 1 routine
  92. CODE:    jmp    LIST        ;redirect to printer
  93. ;
  94. ;RST 3 routine
  95.     push    B        ;save the character for CONOUT
  96.     call    LIST        ;go print a character
  97.     pop    B        ;get the character back
  98.     jmp    CONOUT        ;go print the character on the screen
  99. ;
  100. START:
  101.     lxi    h,CODE        ;pointer to CODE to be moved
  102.     lxi    d,RESTART1    ;pointer to relocated code address
  103.     mvi    b,3        ;length of RESTART1 code
  104.     call    mover
  105.     lxi    d,RESTART3    ;pointer to RST 3 address
  106.     mvi    b,8        ;length of both console and printer code
  107.     call    mover
  108.     jmp    0        ;reset the system
  109. ;
  110. Mover:
  111.     mov    a,m        ;get a byte
  112.     stax    D        ; and store it
  113.     inx    h        ;And
  114.     inx    d        ;    bump
  115.     dcr    b        ;        Registers
  116.     jnz    mover
  117.     ret
  118. ;
  119.     end
  120.