home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / sysutl / switchio.lbr / IO21.AQM / IO21.ASM
Encoding:
Assembly Source File  |  1986-06-21  |  7.4 KB  |  167 lines

  1. ***************************************************************************
  2. *                                                                         *
  3. *    What the heck is IO2?  Does your computer have both a parallel and   *
  4. *    serial printer port? (Kaypro and Osborne do.)  Do you have a printer *
  5. *    attatched to both? (I do.)  Would you like to switch between the     *
  6. *    two quickly and easily without the hassle of using STAT?  (I do.)    *
  7. *    If so, read on, to find out how to patch this program for your       *
  8. *    computer system, and find out how easy it is to change your printer  *
  9. *    selection.  It's small, and can be kept on every disk where you may  *
  10. *    want to switch printers quickly.   Enjoy!                            *
  11. *                                                                         *
  12. *    This is IO2, by Dan Silva.  This program is based on "SWITCHIO", a   *
  13. *    program which appeared in an article in Profiles magazine called     *
  14. *    "Love That IOBYTE" by David Weinberger.  This program was originally *
  15. *    written for Kaypro computers.  I have made it transportable by       *
  16. *    adding some equates at the beginning.  Also, I made it so you can    *
  17. *    check which printer is selected without changing the setting.        *
  18. *                                                                         *
  19. *    I made IO2 relatively easy to install.  All you need to know is what *
  20. *    the IO numbers are for your machine and enter them here, Assemble    *
  21. *    with ASM and you're on your way.                                     *
  22. *                                                                         *
  23. *    To use:  Type IO at the console.  The program will load quickly      *
  24. *    (it's a small file), and tell you what printer is currently assigned *
  25. *    as the primary LST: device.  It will then ask you if you wish to     *
  26. *    change it. (for example, from the parallel port to the serial port)  *
  27. *    If you do, the program will change it and display the current value. *
  28. *    If you don't want to change it, the program will exit.  This works   *
  29. *    out to be much faster and easier to use than STAT for this purpose.  *
  30. *                                                                         *
  31. *    Please do not change the "credits" listed above, or elsewhere in the *
  32. *    program.  You may not sell or otherwise make any money from this     *
  33. *    program, as it is being distributed solely in the public domain.     *
  34. *                                                                         *
  35. *    SWITCHIO is copyright (c) 1984 by David Weinberger.                  *
  36. *    IO2 is copyright (c) 1986 by Dan Silva.                              *
  37. *                                                                         *
  38. ***************************************************************************
  39. ;
  40. ; VERSION 2.1:  Mar. 31, 1986
  41. ;               Changed the Warning lines to more properly fit onto small
  42. ;               screens like the Osborne 1.  Also some minor changes
  43. ;        to make the source more compact.
  44. ;
  45. ; DO NOT CHANGE THE FOLLOWING TWO LINES:
  46.     ORG    100H
  47.     JMP    START
  48. ;-----------------------------------------------------------------------------
  49. ;                                    /--- PATCH FROM HERE...
  50. ; PATCH YOUR COMPUTER'S VALUES BELOW:
  51.     IOBYTE    EQU    3    ;WHAT IS YOUR COMPUTER'S I/O BYTE? (USUALLY 3)
  52.     IOPAR    EQU    141    ;WHAT IS THE VALUE FOR PARALLEL PRINTER?
  53.     IOSER    EQU    13    ;WHAT IS THE VALUE FOR SERIAL PRINTER?
  54.     COMP    DB    'Kaypro 1'    ; WHAT COMPUTER ARE YOU USING?
  55. ;                      ENCLOSE THE NAME IN APOSTROPHE'S (')
  56. ;
  57. ;                                    \--- TO HERE...
  58. ;-----------------------------------------------------------------------------
  59. ;
  60.         DB    '<-- $',26    ; END OF STRING, EOF (IF TYPED)
  61. ;    SOME MISC. EQUATES
  62. ;
  63.     PRNTMSG    EQU    9    ; CP/M PRINT MESSAGE FUNCTION
  64.     PRNTCHR    EQU    2    ; CP/M PRINT CHATACTER FUNCTION
  65.     CONIO    EQU    6    ; DIRECT CONSOLE I/O FUNCTION
  66.      BDOS    EQU    5    ; BONSAI TO BDOS!
  67.     CR    EQU    13    ; ASCII VALUE OF CARRIAGE RETURN
  68.     LF    EQU    10    ; ASCII VALUE OF LINE FEED
  69.  
  70. ;
  71. ; SET UP
  72. START:    LXI    SP,STACK    ; SET UP STACK FOR CP/M TO PLAY WITH
  73. ;
  74. ; MAIN PROGRAM
  75.     LXI    D,COMP        ; LOAD WITH COMPUTER TYPE MSG.
  76.     MVI    C,PRNTMSG    ; PRINT MESSAGE FUNCTION
  77.     CALL    BDOS        ; ... AND EXECUTE THE MESSAGE
  78.     LXI    D,HMES        ; LOAD WITH HEADING MESSAGE
  79.     MVI    C,PRNTMSG    ; PRINT MESSAGE FUNCTION
  80.     CALL    BDOS        ; ... AND EXECUTE THE MESSAGE
  81. ;
  82. IOCHK:    LDA    IOBYTE        ; REGISTER A GETS CONTENT OF IOBYTE
  83.     CPI    IOSER        ; IS IOBYTE SERIAL?
  84.     JNZ    PAR        ; IF NOT, JUMP TO PARALLEL
  85.  
  86. ;
  87. ; SERIAL BECOMES PARALLEL
  88.     LXI    D,SERMES    ; LOAD WITH SERIES-MESSAGE
  89.     MVI    C,PRNTMSG    ; PRINT MESSAGE FUNCTION
  90.     CALL    BDOS        ; ... AND EXECUTE THE MESSAGE
  91.     CALL    ASK        ; CALL "Y" OR "N" INPUT ROUTINE
  92.     JMP    SETPAR        ; IF "Y" TO QUESTION, SET PARALLEL
  93. ;
  94. ; PARELLEL BECOMES SERIAL
  95. PAR:    LDA    IOBYTE        ; REGISTER A GETS IOBYTE
  96.     CPI    IOPAR        ; JUST TO MAKE SURE IT'S ONE OF THE TWO.
  97.     JNZ    ERROR        ; IF IT'S NEITHER, SOMETHING'S WRONG!
  98.     LXI    D,PARMES    ; LOAD WITH PARALLEL MESSAGE
  99.     MVI    C,PRNTMSG    ; PRINT MESSAGE FUNCTION
  100.     CALL    BDOS        ; ... AND EXECUTE THE MESSAGE
  101.     CALL    ASK        ; GET "Y" OR "N"
  102.     JMP    SETSER        ; IF IT GETS HERE, THE ANSWER WAS "Y"
  103. ;
  104. ;------------------------------------------------------------------------
  105. ;--            SUBROUTINES:                                            --
  106. ;------------------------------------------------------------------------
  107. ;
  108. ; SETTING PARALLEL AND SERIAL SELECTIONS
  109. ;
  110. SETPAR:    MVI    A,IOPAR        ; PUT IOPAR IN REGISTER A
  111.     STA    IOBYTE        ; AND STORE WHAT'S IN A TO IOBYTE
  112.     JMP    IOCHK        ; AND START AGAIN...
  113. ;
  114. SETSER:    MVI    A,IOSER        ; PUT IOSER INTO REGISTER A
  115.     STA    IOBYTE        ; AND STORE WHAT'S IN A TO IOBYTE
  116.     JMP    IOCHK        ; AND WE'RE DONE!
  117. ;
  118. ; GET A Y OR N FROM KEYBOARD
  119. ;
  120. ASK:    MVI    C,CONIO        ; GET READY FOR AN ANSWER FROM KEYBOARD
  121.     MVI    E,0FFH        ; WE WANT THE "I" OF "CONIO" (INPUT)
  122.     CALL    BDOS        ; BDOS CALL
  123.     CPI    'Y'        ; DID THEY SAY "YES"?
  124.     JZ    RETURN        ; IF SO, SET PARALLEL...
  125.     CPI    'y'        ; THE SAME FOR "yes"...
  126.     JZ    RETURN        ; IF SO, SET PARALLEL...
  127.     CPI    'N'        ; NO CHANGE?
  128.     JZ    DONE        ; IF SO, WE'RE DONE.
  129.     CPI    'n'        ; WHAT ABOUT SMALL "n"?
  130.     JZ    DONE        ; SAME THING...
  131.     JMP    ASK        ; AND FOR THOSE WHO CAN'T READ...
  132. RETURN:    RET
  133. ;
  134. ; ERROR HANDLING. (PRINT A MSG. AND THEN EXIT THE DAMN THING BEFORE
  135. ; SOMETHING HAPPENS!
  136. ERROR:    LXI    D,ERRMSG    ; LOADING THE ERROR MESSAGE
  137.     MVI    C,PRNTMSG    ; FUNCTION TO PRINT IT
  138.     CALL    BDOS        ; CALL BDOS
  139.     JMP    0        ; NOW, BACK TO CP/M WITH WARM BOOT
  140. ;
  141. ; FINISHING UP
  142. DONE:    LXI    D,BYEMSG    ; MIGHT AS WELL SAY GOODBYE FIRST
  143.     MVI    C,PRNTMSG    ; FUNCTION TO PRINT IT
  144.     CALL    BDOS        ; BDOS WILL KNOW WHAT TO DO...
  145.     JMP    0        ; HAPPINESS IS A WARM BOOT!
  146. ;
  147. ; MESSAGES AND SPACE SET ASIDE FOR THE STACK
  148. SERMES:    DB    CR,'Serial printer port seleced.     Change? (Y/N) $'
  149. PARMES:    DB    CR,'Parallel printer port selected.  Change? (Y/N) $'
  150. HMES:    DB    CR,LF,'I/O vers. 2.1 by Dan Silva. ',CR,LF,'$'
  151. BYEMSG:    DB    CR,LF,'It''s been fun! (Back to CP/M)',CR,LF,'$'
  152. ERRMSG    DB    07,CR,LF,'WARNING!  Not properly patched!  You should have '
  153.     DB    CR,LF,'this program patched for YOUR computer set-up.'
  154.     DB    CR,LF,'Get IO21.ASM and read the directions, or have '
  155.     DB    CR,LF,'someone who knows assembly language help you.'
  156.     DB    CR,LF,LF
  157.     DB    'I don''t want to mess up your computer, so we''re ',CR,LF
  158.     DB    'going back to CP/M before something happens! ',CR,LF,'$'
  159. ;
  160.     DS    64
  161. STACK:    DB    0
  162. END
  163.  your computer, so we''re ',CR,LF
  164.     DB    'going back to CP/M before something happens! ',CR,LF,'$'
  165. ;
  166.     DS    64
  167. STAC