home *** CD-ROM | disk | FTP | other *** search
- TITLE 'MBASIC console output - printer redirection'
- ;****************************************************************
- ;* *
- ;* R E D I R . A S M *
- ;* *
- ;****************************************************************
- ; by
- ; Jack L. Owens
- ;
- ; Jack Owens Service Company
- ; 1626 Del Dayo Drive
- ; Carmichael, California
- ; 95608
- ;
- ; (916)485-8995
- ;
- ; March 7, 1984
- ;
- ; For use with Microsoft Basic version 5.21 interpreter
- ;
- ; Patch to the base page of operating system to allow
- ; redirection of BASIC console output to the printer.
- ;
- ; Method:
- ; a) set up one of the RST locations with a jump
- ; to the BIOS print vector.
- ;
- ; b) set up another RST location with a call to
- ; the BIOS print vector and then a routine
- ; to jump to the CONOUT vector.
- ;
- ; c) poke an RST <n> in place of the call instruction
- ; in BASIC then continue with BASIC program
- ;
- ; d) when all through, poke a <call> instruction to return
- ; the CONOUT vector in BASIC to it's original
- ; condition.
- ;
- ; Note: You may find out where the base of the BIOS jump vector is
- ; by inspecting the pointer found in addresses 1 and 2 in
- ; a normal CP/M system.
- ;
- ; Set your program up with the following information:
- ;
- ;100 LIST% = 207' RST 1
- ;110 BOTH% = 223' RST 3
- ;120 CALLL% = 205' Replace RST instruction with CALL (CD)
- ;130 CONOUT% = &H41E4' Location in MBASIC 5.21 with call to CONOUT
- ;
- ; Then whenever you wish to redirect the console output to the printer
- ; only, do:
- ;
- ;1500 POKE CONOUT%,LIST%
- ;
- ; and all console output will go to the printer. If you want the
- ; console output to go to both printer and console, then do:
- ;
- ;1500 POKE CONOUT%,BOTH%
- ;
- ; and all console output goes to both printer and console.
- ;
- ; Whenever you want to return to normal operation, do:
- ;
- ;2500 POKE CONOUT%,CALLL%
- ;
- ; and the MBASIC interpreter returns to normal operation.
- ;
- ; Run the following program once after boot up. Then go ahead
- ; with normal operation. Only shutting the system down should
- ; destroy the routines in the RST locations. WARNING! some
- ; CP/M systems use these RST locations for their own purposes.
- ; If so, change to another set of RST locations not in use. My
- ; system uses the RST 2 location to keep track of the system
- ; clock time.
- ;
- BIOS equ 0EE00h ;start of BIOS jump table
- ; change to suit your system
- ;
- CONOUT equ BIOS+12 ;CONOUT jump vector
- LIST equ BIOS+15 ;LIST jump vector
- RESTART1 equ 8 ;location of RST 1
- RESTART3 equ 18h ;location of RST 3
- ;
-
- org 100h
- ;
- jmp START ;jump around code to be moved
- ;
- ; The following code up to start is moved with the code at START
- ;
- ;RST 1 routine
- CODE: jmp LIST ;redirect to printer
- ;
- ;RST 3 routine
- push B ;save the character for CONOUT
- call LIST ;go print a character
- pop B ;get the character back
- jmp CONOUT ;go print the character on the screen
- ;
- START:
- lxi h,CODE ;pointer to CODE to be moved
- lxi d,RESTART1 ;pointer to relocated code address
- mvi b,3 ;length of RESTART1 code
- call mover
- lxi d,RESTART3 ;pointer to RST 3 address
- mvi b,8 ;length of both console and printer code
- call mover
- jmp 0 ;reset the system
- ;
- Mover:
- mov a,m ;get a byte
- stax D ; and store it
- inx h ;And
- inx d ; bump
- dcr b ; Registers
- jnz mover
- ret
- ;
- end