*************************************************************************** * * * 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