; M7AC-1.ASM -- APPLE-CAT II overlay file for MDM7xx. 11/11/83 ; ; You will want to look this file over carefully. There are a number of ; options that you can use to configure the program to suit your taste. ; Much of the information contained here is not in the main file. ; ; Edit this file for your preferences then follow the "TO USE:" EXAMPLE ; shown below. ; ; ; SPECIAL NOTES FOR THE APPLE CAT II VERSION: ; ------------------------------------------ ; ; The distribution version of this file is configured for an Apple- ; Cat II in slot 2. If you are runing your modem in a different slot, ; you need merely change the 'CATSLOT' equate before assembling. (A ; side note, if you are experiencing thermal problems with your Apple ; try moving the Apple-Cat board away from the 80-column card.) ; ; This overlay supports the Apple-Cat II at 300 and 1200 baud, as- ; suming you have the 212A option board). With this board, you must ; use the 'slot saver' configuration. The 'SET' command has been im- ; plemented to allow the user to set either baud rate, and well as ; 'answer' or 'originate' mode. It also allows the user to change ; modem baud rate on the fly, if desired. The 'TIM' function is set ; automatically. ; ; A 'quick INIT' feature has been added. The command from the CP/M ; level is either A>MDM 3 (300 baud) or A>MDM 2 (1200 baud). These ; commands will cause automatic initialization of the modem at 300 or ; 1200 baud respectively (originate mode only). The program then falls ; directly into the terminal mode. Just calling up the program with: ; A>MDM will result in the program not being initialized, so the user ; will then need to use the 'SET' command to initialize for 300 or for ; 1200 baud. ; ; IMPORTANT NOTE REGARDING THE PRINTER BUFFER FUNCTION: ; ; As distributed, this overlay has the printer buffer function dis- ; abled. This is because the Apple (Microsoft) BIOS does not support ; the LISTST function (BIOS 14). Thus it returns with "Printer busy" ; status. Printer handshaking is not important if you have plenty of ; buffering. Some printers have 64k, although most only have 2-4k. ; It is also of no importance, if the throughput of your printer is ; higher than the speed of the incoming information. For example when ; using 300 baud (30 characters per second), nearly all printers are ; capable of printing at this relatively slow speed. However at 1200 ; baud, very few printers in the under-$1000 class are capable of 120 ; character/second throughput. In this case a modest-sized buffer ; might fill before you finished copying the information you wished to ; print. It would probably start to lose characters as a result. A ; special routine in the initialization code has been added so that ; BIOS 14 always returns "Printer ready". This special patch is used ; only if the printer option LSTTST in this overlay is set to YES. Be ; careful about using this option if you do not have a large printer ; buffer and frequently run at 1200 baud. ; ; TO USE: First edit this file filling in answers for your own ; equipment. Then assemble with ASM.COM or equivalent ; assembler. Then use DDT to overlay the results of ; this program to the original .COM file: ; ; A>DDT MDM7xx.COM ; DDT VERS 2.2 ; NEXT PC ; 4300 0100 ; -IM7AC-1.HEX (note the "I" command) ; -R ("R" load in the .HEX file) ; NEXT PC ; 4300 0000 ; -G0 (return to CP/M) ; A>SAVE 66 MDM7xx.COM (now have a modified .COM file) ; ; = = = = = = = = = = = = = = = = = = ; ; 11/11/83 - Renamed to M7AC-1.ASM, no changes - Irv Hoff ; 07/27/83 - Renamed to work with MDM712 - Irv Hoff ; 07/01/83 - Revised to work with MDM711 - Irv Hoff ; 06/22/83 - Revised to work with MDM710 - Irv Hoff ; 06/07/83 - Converted GP file for APPLECAT - Chris Hays ; ; = = = = = = = = = = = = = = = = = = ; BELL: EQU 07H ;BELL CR: EQU 0DH ;CARRIAGE RETURN ESC: EQU 1BH ;ESCAPE LF: EQU 0AH ;LINEFEED ; YES: EQU 0FFH NO: EQU 0 ; ; ; CHANGE THE FOLLOWING INFORMATION TO MATCH YOUR EQUIPMENT ; MODCTL1: EQU 0 ;DUMMY MODEM CONTROL PORT MODCTL2: EQU 0 ;DUMMY MODEM CONTROL PORT ; CATSLOT EQU 2 ;SET FOR SLOT OF APPLE CAT ; SLOT EQU CATSLOT*16 COM EQU 0E08CH+SLOT XMTBYT EQU 0E08DH+SLOT CON EQU 0E08AH+SLOT BSRBYT EQU 0E083H+SLOT SHBYT EQU 0E082H+SLOT TONBYT EQU 0E081H+SLOT SQUBYT EQU 0E081H+SLOT SWBYT EQU 0E080H+SLOT RECBYT EQU 0E089H+SLOT INDAT EQU 0E08BH+SLOT OUTDAT EQU 0E08EH+SLOT SPDBYT EQU 0E08BH+SLOT STATUS EQU 0E08FH+SLOT ACBYT EQU 0E08DH+SLOT DEVBYT EQU 0E08FH+SLOT XMTRAM EQU 0F01BH ;TO CLEAR STATUS ; MODDCD3 EQU 0 MODDCD12 EQU 0 ;FOR 212 BOARD MODRCVB: EQU 2 ;BIT TO TEST FOR RECEIVE MODRCVR: EQU 2 ;VALUE WHEN READY MODSNDB: EQU 1 ;BIT TO TEST FOR SEND MODSNDR: EQU 1 ;VALUE WHEN READY ; ORG 100H ; ; ; CHANGE THE CLOCK SPEED TO SUIT YOUR SYSTEM ; DS 3 ;(For "JMP START" instruction) ; PMMIMODEM: DB NO ;yes=PMMI S-100 Modem 103H SMARTMODEM: DB NO ;yes=HAYES Smartmodem 104H TONEPULSE: DB 'T' ;T=tone, P=pulse (Smartmodem-only) 105H CLOCK: DB 20 ;clock speed in MHz x10, 25.5 MHz max. 106H ;20=2 MHz, 37=3.68 MHz, 40=4 MHz, etc. MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200 107H ;6=2400 7=4800 8=9600 9=19200 default BYTDLY: DB 5 ;0=0 delay 1=10 ms 5=50 ms - 9=90 ms 108H ;default time to send character in ter- ;minal mode file transfer for slow BBS. CRDLY: DB 5 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H ;default time for extra wait after CRLF ;in terminal mode file transfer NOOFCOL: DB 5 ;number of directory columns shown 10AH SETUPTST: DB YES ;yes=user-added setup routine 10BH SCRNTEST: DB NO ;cursor control routine 10CH ACKNAK: DB YES ;yes=resend a record after a non-ACK 10DH ;no=resend a record only after NAK BAKUPBYTE: DB NO ;yes=change any file same name to .BAK 10EH CRCDFLT: DB YES ;yes=default to CRC checking 10FH TOGGLECRC: DB YES ;yes=allow toggling of CRC to checksum 110H CONVBKSP: DB NO ;yes=convert backspace to rub 111H TOGGLEBK: DB NO ;yes=allow toggling of BKSP to RUB 112H ADDLF: DB NO ;no=no LF after CR to send file in 113H ;termianl mode (added by remote echo) TOGGLELF: DB YES ;yes=allow toggling of LF after CR 114H TRANLOGON: DB YES ;yes=allow transmission of LOGON 115H ;write logon sequence at location LOGON NOCCP: DB NO ;MUST BE NO FOR APPLE CP/M 2.23 116H LOCONEXTCHR: DB NO ;yes=local command if EXTCHR precedes 117H ;no=external command if EXTCHR precedes TOGGLELOC: DB YES ;yes=allow toggling of LOCONEXTCHR 118H LSTTST: DB NO ;yes=printer available on printer port 119H ;(See special printer note above) XOFFTST: DB NO ;yes=checks for X-OFF from remote while 11AH ;sending a file in terminal mode XONWAIT: DB NO ;yes=wait for X-ON after CR while 11BH ;sending a file in terminal mode TOGXOFF: DB YES ;yes=allow toggling of X-OFF checking 11CH IGNORCTL: DB YES ;yes=CTL-chars. above ^M not displayed 11DH EXTRA1: DB 0 ;for future expansion 11EH EXTRA2: DB 0 ;for future expansion 11FH BRKCHR: DB '@'-40H ;^@ = send a 300 ms. break tone 120H NOCONNCT DB 'N'-40H ;^N = disonnect from phone line 121H LOGCHR: DB 'L'-40H ;^L = send LOGON 122H LSTCHR: DB 'P'-40H ;^P = toggle printer 123H UNSAVE: DB 'R'-40H ;^R = close input text buffer 124H TRANCHR: DB 'T'-40H ;^T = transmit file to remote 125H SAVECHR: DB 'Y'-40H ;^Y = open input text buffer 126H EXTCHR: DB '^'-40H ;^^ = send next character to modem 127H ; ; DS 2 ; 128H ; IN$MODCTL1: LDA STATUS ! RET ;IN MODEM CONTROL PORT 12AH DS 6 OUT$MODDATP: STA OUTDAT ! RET ;OUT MODEM DATA PORT 134H DS 6 IN$MODDATP: LDA XMTRAM ; 13EH STA XMTBYT LDA INDAT RET ANI$MODRCVB: ANI 00001000B ! RET ;BIT TO TEST FOR RECEIVE READY 148H CPI$MODRCVR: CPI 00001000B ! RET ;VALUE OF RCV BIT WHEN READY 14BH ANI$MODSNDB: ANI 00010000B ! RET ;BIT TO TEST FOR SEND READY 14EH CPI$MODSNDR: CPI 00010000B ! RET ;VALUE OF SEND BIT WHEN READY 151H DS 6 ; 154H ; OUT$MODCTL1: OUT MODCTL1 ! RET ;OUT MODEM CONTROL PORT #2 15AH OUT$MODCTL2: OUT MODCTL2 ! RET ;OUT MODEM CONTROL PORT #1 15DH ; LOGONPTR: DW LOGON ;FOR USER MESSAGE. 160H DS 6 ; 162H JMP$GOODBYE: JMP GOODBYE ; 168H JMP$INITMOD: JMP INITMOD ;GO TO USER WRITTEN ROUTINE 16BH RET ! NOP ! NOP ;(BY-PASSES PMMI ROUTINE) 16EH RET ! NOP ! NOP ;(BY-PASSES PMMI ROUTINE) 171H RET ! NOP ! NOP ;(BY-PASSES PMMI ROUTINE) 174H JMP$SETUPR: JMP SETUPR ; 177H JMP$SPCLMENU: JMP SPCLMENU ; 17AH JMP$SYSVER: JMP SYSVER ; 17DH JMP$BREAK: JMP SENDBRK ; 180H ; ; ; DO NOT CHANGE THE FOLLOWING SIX LINES. ; JMP$ILPRT: DS 3 ; 183H JMP$INBUF DS 3 ; 186H JMP$INLNCOMP: DS 3 ; 189H JMP$INMODEM DS 3 ; 18CH JMP$NXTSCRN: DS 3 ; 18FH JMP$TIMER: DS 3 ; 192H ; ; ; ROUTINE TO CLEAR TO END OF SCREEN. IF USING CLREOS AND CLRSCRN, SET ; SCRNTEST TO YES AT 010AH (ABOVE). ; CLREOS: CALL JMP$ILPRT ; 195H DB 0,0,0,0,0 ; 198H RET ; 19DH ; CLRSCRN: CALL JMP$ILPRT ; 19EH DB 0,0,0,0,0 ; 1A1H RET ; 1A6H ; SYSVER: CALL JMP$ILPRT ; 1A7H DB 'Version for APPLE-CAT II modem' DB CR,LF,0 RET ;..... ; ; ;----------------------------------------------------------------------- ; ; NOTE: You can change the SYSVER message ta be longer or shorter. The ; end of your last routine should terminate by 0400H (601 bytes ; available after start of SYSVER) if using the Hayes Smartmodem ; or by address 0C00H (2659 bytes) otherwise. ; ;----------------------------------------------------------------------- ; ; You can put in a message at this location which can be called up with ; CTL-O if TRANLOGON has been set YES. You can use several lines if ; desired. End with a 0. ; LOGON: DB 'HOW ARE YOU TODAY?',CR,LF,0 ;..... ; ; ; You can add a routine here to send a 300 ms. break tone to reset some ; time-share computers. (See examples in other overlays, such as the ; MDM710DP for Datapoint computers. ; SENDBRK: RET ;..... ; ; GOODBYE: MVI A,0 STA SHBYT MVI A,1FH STA XMTBYT STA XMTRAM MVI A,0A1H STA SQUBYT RET ;..... ; ; ; INITMOD: ; ; This routine patches the printer test in the Apple so that is always ; returns "printer ready". (See notes at the beginning about using this ; routine.) ; INITMOD: LDA LSTTST ;CHECK IF PRINT FUNCTION ENABLED CPI 0 JZ FIRSTIN ;DON'T PATCH BIOS IF WE AREN'T PRINTING LHLD 0001 MOV A,L ADI 02AH MOV L,A MVI A,03EH MOV M,A INR L MVI A,0FFH MOV M,A INR L MVI A,0C9H MOV M,A ; ; ;Now begins the actual modem initialization ; FIRSTIN: LDA 80H ;CHECK FOR BAUD CODE CPI 0 JZ NOINMSG ;DON'T INITIALIZE IF NOTHING THERE LDA 5DH ;GET FIRST CHARACTER OF OBJECT ANI 0FH CPI 3 ;ASCII 3 FOR 300 BAUD JNZ CK2 CALL INIT3 JMP ORIG103 ;..... ; ; CK2: CPI 2H ;ASCII 2 FOR 1200 BAUD JNZ NOINMSG CALL INIT2 JMP ORIG212 ;..... ; ; NOINMSG: CALL JMP$ILPRT DB ESC,'(','NOT INITIALIZED',ESC,')',CR,LF,0 RET ;..... ; ; INIT3: CALL PICKUP ;PICKUP PHONE MVI A,0A1H STA RECBYT MVI A,00000011B ;8 DATA NO PARITY 1 STOP STA CON MVI A,22H STA SPDBYT MVI A,1 STA MSPEED RET ;..... ; ; ORIG103: MVI A,11H ;103 ORIG, NO RING IRQ STA XMTBYT STA XMTRAM MVI A,65H STA RECBYT RET ;..... ; ; ANS103: MVI A,10H STA XMTBYT STA XMTRAM MVI A,64H STA RECBYT RET ;..... ; ; INIT2: CALL PICKUP MVI A,0 STA SPDBYT ;1200 BAUD MVI A,18H STA XMTBYT STA XMTRAM MVI A,0AH STA DEVBYT MVI A,13H STA CON MVI A,05H STA COM STA MSPEED RET ;..... ; ; ORIG212: MVI A,0A1H STA SQUBYT CALL DELAY5 MVI A,21H STA SQUBYT RET ;..... ; ; ANS212: MVI A,81H STA SQUBYT CALL DELAY5 MVI A,01 STA SQUBYT RET ;..... ; ; SETORIG: LDA MSPEED CPI 1 JZ ORIG103 JMP ORIG212 ;SELECT 212 OR 103 ;..... ; ; SETANS: LDA MSPEED CPI 1 JZ ANS103 JMP ANS212 ;..... ; ; PICKUP: MVI A,0A1H STA SQUBYT MVI A,'T' STA 5DH ;FORCE TERMINAL MODE AFTER INIT MVI A,2 STA SHBYT MVI A,0FH STA BSRBYT MVI A,13H STA CON MVI A,05H STA COM MVI A,0 STA DEVBYT RET ;..... ; ; SETUPR1: CALL JMP$ILPRT DB 'ENTER ''O'' FOR Originate, ''A'' FOR Answer ' DB 'OR ''D'' FOR Disconnect:',0 MVI C,1 CALL 0005 PUSH PSW CALL JMP$ILPRT DB CR,LF,0 POP PSW ANI 01011111B ;FORCE UPPER CASE AND HI BIT OFF CPI 'O' JZ SETORIG CPI 'A' JZ SETANS CPI 'D' JZ GOODBYE CALL JMP$ILPRT DB 'INVALID: MUST BE ONE OF THE THREE',CR,LF,0 JMP SETUPR1 ;..... ; ; SETUPR: CALL JMP$ILPRT DB 'ENTER 3 FOR 300 BAUD OR 2 FOR 1200 BAUD:',0 MVI C,1 CALL 0005 ;GET THE USER'S INPUT PUSH PSW CALL JMP$ILPRT DB CR,LF,0 POP PSW SUI 30H CPI 3 JNZ CK2A CALL INIT3 JMP SETUPR1 ;..... ; ; CK2A: CPI 2 JNZ NOT2 CALL INIT2 JMP SETUPR1 ;..... ; ; NOT2: CALL JMP$ILPRT DB 'INVALID MUST BE 2 OR 3',CR,LF,0 JMP SETUPR RET ;..... ; ; SPCLMENU: CALL JMP$ILPRT DB 'APPLECAT MODE CAN BE CHANGED WITH THE ' DB 'COMMAND AT THE COMMAND PROMPT',CR,LF,0 RET ;..... ; ; DELAY5: PUSH PSW PUSH B LXI B,1000 ;5-10 MS HARDWARE DELAY ; DELAY5A: DCX B MOV A,B ORA C JNZ DELAY5A POP B POP PSW RET ;..... ; ; ; NOTE: Must terminate prior to 0C00H ;..... ; END ; ASE AND HI BIT OFF CPI 'O' JZ SETORIG CPI 'A' JZ SETANS CPI 'D' JZ GOOD