home *** CD-ROM | disk | FTP | other *** search
- ***************************************************************************
- * *
- * What the heck is IO2? Does your computer have both a parallel and *
- * serial printer port? (Kaypro and Osborne do.) Do you have a printer *
- * attatched to both? (I do.) Would you like to switch between the *
- * two quickly and easily without the hassle of using STAT? (I do.) *
- * If so, read on, to find out how to patch this program for your *
- * computer system, and find out how easy it is to change your printer *
- * selection. It's small, and can be kept on every disk where you may *
- * want to switch printers quickly. Enjoy! *
- * *
- * This is IO2, by Dan Silva. This program is based on "SWITCHIO", a *
- * program which appeared in an article in Profiles magazine called *
- * "Love That IOBYTE" by David Weinberger. This program was originally *
- * written for Kaypro computers. I have made it transportable by *
- * adding some equates at the beginning. Also, I made it so you can *
- * check which printer is selected without changing the setting. *
- * *
- * I made IO2 relatively easy to install. All you need to know is what *
- * the IO numbers are for your machine and enter them here, Assemble *
- * with ASM and you're on your way. *
- * *
- * To use: Type IO at the console. The program will load quickly *
- * (it's a small file), and tell you what printer is currently assigned *
- * as the primary LST: device. It will then ask you if you wish to *
- * change it. (for example, from the parallel port to the serial port) *
- * If you do, the program will change it and display the current value. *
- * If you don't want to change it, the program will exit. This works *
- * out to be much faster and easier to use than STAT for this purpose. *
- * *
- * Please do not change the "credits" listed above, or elsewhere in the *
- * program. You may not sell or otherwise make any money from this *
- * program, as it is being distributed solely in the public domain. *
- * *
- * SWITCHIO is copyright (c) 1984 by David Weinberger. *
- * IO2 is copyright (c) 1986 by Dan Silva. *
- * *
- ***************************************************************************
- ;
- ; VERSION 2.1: Mar. 31, 1986
- ; Changed the Warning lines to more properly fit onto small
- ; screens like the Osborne 1. Also some minor changes
- ; to make the source more compact.
- ;
- ; DO NOT CHANGE THE FOLLOWING TWO LINES:
- ORG 100H
- JMP START
- ;-----------------------------------------------------------------------------
- ; /--- PATCH FROM HERE...
- ; PATCH YOUR COMPUTER'S VALUES BELOW:
- IOBYTE EQU 3 ;WHAT IS YOUR COMPUTER'S I/O BYTE? (USUALLY 3)
- IOPAR EQU 141 ;WHAT IS THE VALUE FOR PARALLEL PRINTER?
- IOSER EQU 13 ;WHAT IS THE VALUE FOR SERIAL PRINTER?
- COMP DB 'Kaypro 1' ; WHAT COMPUTER ARE YOU USING?
- ; ENCLOSE THE NAME IN APOSTROPHE'S (')
- ;
- ; \--- TO HERE...
- ;-----------------------------------------------------------------------------
- ;
- DB '<-- $',26 ; END OF STRING, EOF (IF TYPED)
- ; SOME MISC. EQUATES
- ;
- PRNTMSG EQU 9 ; CP/M PRINT MESSAGE FUNCTION
- PRNTCHR EQU 2 ; CP/M PRINT CHATACTER FUNCTION
- CONIO EQU 6 ; DIRECT CONSOLE I/O FUNCTION
- BDOS EQU 5 ; BONSAI TO BDOS!
- CR EQU 13 ; ASCII VALUE OF CARRIAGE RETURN
- LF EQU 10 ; ASCII VALUE OF LINE FEED
-
- ;
- ; SET UP
- START: LXI SP,STACK ; SET UP STACK FOR CP/M TO PLAY WITH
- ;
- ; MAIN PROGRAM
- LXI D,COMP ; LOAD WITH COMPUTER TYPE MSG.
- MVI C,PRNTMSG ; PRINT MESSAGE FUNCTION
- CALL BDOS ; ... AND EXECUTE THE MESSAGE
- LXI D,HMES ; LOAD WITH HEADING MESSAGE
- MVI C,PRNTMSG ; PRINT MESSAGE FUNCTION
- CALL BDOS ; ... AND EXECUTE THE MESSAGE
- ;
- IOCHK: LDA IOBYTE ; REGISTER A GETS CONTENT OF IOBYTE
- CPI IOSER ; IS IOBYTE SERIAL?
- JNZ PAR ; IF NOT, JUMP TO PARALLEL
-
- ;
- ; SERIAL BECOMES PARALLEL
- LXI D,SERMES ; LOAD WITH SERIES-MESSAGE
- MVI C,PRNTMSG ; PRINT MESSAGE FUNCTION
- CALL BDOS ; ... AND EXECUTE THE MESSAGE
- CALL ASK ; CALL "Y" OR "N" INPUT ROUTINE
- JMP SETPAR ; IF "Y" TO QUESTION, SET PARALLEL
- ;
- ; PARELLEL BECOMES SERIAL
- PAR: LDA IOBYTE ; REGISTER A GETS IOBYTE
- CPI IOPAR ; JUST TO MAKE SURE IT'S ONE OF THE TWO.
- JNZ ERROR ; IF IT'S NEITHER, SOMETHING'S WRONG!
- LXI D,PARMES ; LOAD WITH PARALLEL MESSAGE
- MVI C,PRNTMSG ; PRINT MESSAGE FUNCTION
- CALL BDOS ; ... AND EXECUTE THE MESSAGE
- CALL ASK ; GET "Y" OR "N"
- JMP SETSER ; IF IT GETS HERE, THE ANSWER WAS "Y"
- ;
- ;------------------------------------------------------------------------
- ;-- SUBROUTINES: --
- ;------------------------------------------------------------------------
- ;
- ; SETTING PARALLEL AND SERIAL SELECTIONS
- ;
- SETPAR: MVI A,IOPAR ; PUT IOPAR IN REGISTER A
- STA IOBYTE ; AND STORE WHAT'S IN A TO IOBYTE
- JMP IOCHK ; AND START AGAIN...
- ;
- SETSER: MVI A,IOSER ; PUT IOSER INTO REGISTER A
- STA IOBYTE ; AND STORE WHAT'S IN A TO IOBYTE
- JMP IOCHK ; AND WE'RE DONE!
- ;
- ; GET A Y OR N FROM KEYBOARD
- ;
- ASK: MVI C,CONIO ; GET READY FOR AN ANSWER FROM KEYBOARD
- MVI E,0FFH ; WE WANT THE "I" OF "CONIO" (INPUT)
- CALL BDOS ; BDOS CALL
- CPI 'Y' ; DID THEY SAY "YES"?
- JZ RETURN ; IF SO, SET PARALLEL...
- CPI 'y' ; THE SAME FOR "yes"...
- JZ RETURN ; IF SO, SET PARALLEL...
- CPI 'N' ; NO CHANGE?
- JZ DONE ; IF SO, WE'RE DONE.
- CPI 'n' ; WHAT ABOUT SMALL "n"?
- JZ DONE ; SAME THING...
- JMP ASK ; AND FOR THOSE WHO CAN'T READ...
- RETURN: RET
- ;
- ; ERROR HANDLING. (PRINT A MSG. AND THEN EXIT THE DAMN THING BEFORE
- ; SOMETHING HAPPENS!
- ERROR: LXI D,ERRMSG ; LOADING THE ERROR MESSAGE
- MVI C,PRNTMSG ; FUNCTION TO PRINT IT
- CALL BDOS ; CALL BDOS
- JMP 0 ; NOW, BACK TO CP/M WITH WARM BOOT
- ;
- ; FINISHING UP
- DONE: LXI D,BYEMSG ; MIGHT AS WELL SAY GOODBYE FIRST
- MVI C,PRNTMSG ; FUNCTION TO PRINT IT
- CALL BDOS ; BDOS WILL KNOW WHAT TO DO...
- JMP 0 ; HAPPINESS IS A WARM BOOT!
- ;
- ; MESSAGES AND SPACE SET ASIDE FOR THE STACK
- SERMES: DB CR,'Serial printer port seleced. Change? (Y/N) $'
- PARMES: DB CR,'Parallel printer port selected. Change? (Y/N) $'
- HMES: DB CR,LF,'I/O vers. 2.1 by Dan Silva. ',CR,LF,'$'
- BYEMSG: DB CR,LF,'It''s been fun! (Back to CP/M)',CR,LF,'$'
- ERRMSG DB 07,CR,LF,'WARNING! Not properly patched! You should have '
- DB CR,LF,'this program patched for YOUR computer set-up.'
- DB CR,LF,'Get IO21.ASM and read the directions, or have '
- DB CR,LF,'someone who knows assembly language help you.'
- DB CR,LF,LF
- DB 'I don''t want to mess up your computer, so we''re ',CR,LF
- DB 'going back to CP/M before something happens! ',CR,LF,'$'
- ;
- DS 64
- STACK: DB 0
- END
- your computer, so we''re ',CR,LF
- DB 'going back to CP/M before something happens! ',CR,LF,'$'
- ;
- DS 64
- STAC