home *** CD-ROM | disk | FTP | other *** search
- ; M7AQ-4.ASM Apple Micromodem overlay file for MDM730 05/18/84
- ;
- ; This overlay file for MDM730 program is based on M712AP.ASM to support
- ; the AppliCard or Softcard and the Micromodem ][. Please note the specific
- ; equates for 6MHz on AppliCard. Since code changes in the main sec-
- ; tion were necessary to support auto-dial with the Micromodem, MDM730
- ; specific equates are defined in this overlay.
- ;
- ; In the code section of this overlay, code sections, labels, etc. which
- ; go to the main program are listed in <lower-case>. Code that is called
- ; through established MDM7xx overlay vectors are listed in <UPPER CASE>
- ; and, therefore, can be modified. Take care in changing code which
- ; overlays main program.
- ;
- ; NOTE: When using this overlay, be careful to save the working file un-
- ; der a different name than original file since major changes are made
- ; in the main program by this overlay. MDM730 requires 73 sectors be
- ; saved rather than 66 or more as in earlier MDM7xx programs.
- ; - Henry Middlebrook
- ;
- ;----------------------------------------------------------------------
- ;
- ; This overlay file enables Apple ][ computers to use the following
- ; Apple modem configuration at 300 baud only:
- ;
- ; > Hayes Micromodem ][ and 6 MHz PCPI AppliCard <
- ; > Hayes Micromodem ][ and Microsoft Softcard or equivalent <
- ;
- ; It can be modified to be used with most of the available Z-80 processor
- ; boards available for the Apple including SoftCard and PCPI Applicard.
- ;
- ; 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.
- ;
- ; Edit this file for your preferences then follow the "TO USE:" example.
- ;
- ; 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 the results
- ; of this program to the original .COM file:
- ;
- ; A>DDT MDM730.COM
- ; DDT VERS 2.2
- ; NEXT PC
- ; 4A00 0100
- ; -IM7AQ-4.HEX (note the "I" command)
- ; -R ("R" loads in the .HEX file)
- ; NEXT PC
- ; 4A00 0000
- ; -G0 (return to CP/M)
- ; A>SAVE 73 M730.COM (now have a new .COM file)
- ;
- ; = = = = = = = = = = = = = = = = = =
- ;
- ; 05/18/84 - Renamed to avoid confusion with another M7AQ-3 which
- ; didn't have as many features. - Keith Petersen
- ; 04/22/84 - Added conditionals for Softcard, fixed so no hangup
- ; if program exited and restarted, revised with
- ; MDM730 addresses - Ross Alford
- ; 03/15/84 - Revised with MDM729 addresses - Henry Middlebrook
- ; 03/10/84 - Revised with MDM727 addresses - Henry Middlebrook
- ; 02/29/84 - Revised with MDM724 addresses - Henry Middlebrook
- ; 02/28/84 - Revised for MM][ Auto Dial - Henry Middlebrook
- ; 08/27/83 - Revised to work with Applicard - William Cook
- ; 07/27/83 - Renamed to work with MDM712 - Irv Hoff
- ; 02/12/83 - Used MDM703CF to make this file
- ; for Apple computers using a var-
- ; iety of serial interface cards
- ; with external modem. - Bruce Kargol
- ;
- ; = = = = = = = = = = = = = = = = =
- ;
- ; SPECIAL EQUATES FOR OVERLAYING ROUTINES IN MAIN PROGRAM
- ; -------------------------------------------------------
- ;
- ; These equates are specific to MDM730!
- ;
- DIAL18: EQU 05DFH
- CONMADE: EQU 06AFH
- DIALA2: EQU 072BH
- DIALBGN: EQU 07AFH
- DISCONNT: EQU 0826H
- GOODBYE: EQU DISCONNT
- RINGBK: EQU 0950H
- RINGBK2: EQU 0989H
- WAIT: EQU 09C6H
- PMMI$MENU: EQU 09EDH ;SPCLMENU entry in main program
- SPCLMENU$DB: EQU 09F8H ;SPCLMENU data area
- TIMER: EQU 0CBBH
- RESTART1: EQU 1433H
- BREAK: EQU 20AEH
- BREAK1: EQU 20CBH
- ;
- ;
- ;-------------- START OF MAIN OVERLAY ---------------------------------
- ;
- BELL: EQU 07H ;bell
- CR: EQU 0DH ;carriage return
- ESC: EQU 1BH ;escape
- LF: EQU 0AH ;linefeed
- FSW: EQU 15H ;Data format byte for Micromodem, see manual
- ;
- YES: EQU 0FFH
- NO: EQU 0
- ;
- SOFTCARD: EQU YES ;Yes for Softcard, Z-Card, etc.
- APPLICARD: EQU NO ;Yes for Applicard
- MMII: EQU YES ;YES for Micromodem II
- ;
- IF APPLICARD
- OFFSET: EQU 0C000H
- ENDIF ;Applicard
- ;
- IF SOFTCARD
- OFFSET: EQU 0E000H
- ENDIF ;Softcard
- ;
- MODDATP: EQU 0A7H + OFFSET ;data port of MMII
- MODCTLP: EQU 0A6H + OFFSET ;status port of MMII
- MODCTLP2: EQU 0A5H + OFFSET ;control port 2 of MMII
- ;
- IF APPLICARD
- RDBYTE: EQU 0FFE0H ;read a byte from Apple (A = byte)
- WRBYTE: EQU 0FFE3H ;write a byte to Apple (C = byte)
- RDWORD: EQU 0FFE6H ;read 2 bytes from Apple (DE = bytes)
- WRWORD: EQU 0FFE9H ;write 2 bytes to Apple (DE = bytes)
- RDNBYTS: EQU 0FFECH ;read n bytes (DE = count, HL = buffer)
- WRNBYTS: EQU 0FFEFH ;write n bytes (DE = count, HL = buffer)
- ;
- PEEK1BYTE: EQU 6 ;command to peek 1 byte in the Apple
- POKE1BYTE: EQU 7 ;command to poke 1 byte in the Apple
- ENDIF ;Applicard
- ;
- ;
- ; Status bit equates for 6850 in Micromodem ][
- ;
- MODSNDB: EQU 02H ;bit to test for send
- MODSNDR: EQU 02H ;value when ready
- MODRCVB: EQU 01H ;bit to test for receive
- MODRCVR: EQU 01H ;value when ready
- ;
- ;----------------------------------------------------------------------
- ;
- ORG 100H
- ;
- DS 3 ;(for "JMP START" instruction)
- ;
- PMMIMODEM: DB YES ;MUST be yes for MM ][ 103H
- SMARTMODEM: DB NO ;MUST be no for MM ][ implementation 104H
- TOUCHPULSE: DB 'P' ;T=touch, P=pulse (Smartmodem-only) 105H
- ;
- IF APPLICARD
- CLOCK: DB 6 ;clock speed in MHz x10, 25.5 MHz max. 106H
- ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
- ;Applicard values should not be multiplied
- ;by 10 because of 6502 overhead
- ENDIF ;Applicard
- ;
- IF SOFTCARD
- CLOCK: DB 20
- ENDIF ;Softcard
- ;
- 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 0 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms 108H
- ;default time to send character in ter-
- ;minal mode file transfer for slow BBS.
- CRDLY: DB 0 ;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 DIR columns shown 10AH
- SETUPTST: DB NO ;yes=user-added Setup routine 10BH
- SCRNTEST: DB YES ;Cursor control routine 10CH
- ACKNAK: DB YES ;yes=resend a record after any non-ACK 10DH
- ;no=resend a record after a valid NAK
- BAKUPBYTE: DB YES ;yes=change any file same name to .BAK 10EH
- CRCDFLT: DB NO ;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 YES ;yes=allow toggling of bksp to rub 112H
- ADDLF: DB NO ;no=no LF after CR to send file in' 113H
- ;terminal 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
- SAVCCP: DB YES ;yes=do not overwrite CCP 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
- XOFFTST: DB NO ;yes=checks for XOFF from remote while 11AH
- ;sending a file in terminal mode
- XONWAIT: DB NO ;yes=wait for XON after CR while 11BH
- ;sending a file in terminal mode
- TOGXOFF: DB YES ;yes=allow toggling of XOFF checking 11CH
- IGNORCTL: DB NO ;yes=CTL-chars above ^M not displayed 11DH
- EXTRA1: DB 0 ;for future expansion 11EH
- EXTRA2: DB 0 ;for future expansion 11FH
- BRKCHR: DB 'B'-40H ;ESC = Send 300 ms. break tone 120H
- NOCONNCT: DB 'N'-40H ;^N = Disconnect from the 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 'Z'-40H ;^Z = Send next character 127H
- DS 2 ;for PMMI control chars 128H
- ;
- ;
- IN$MODCTLP: JMP RD$MODCTLP ; 12AH
- DS 7
- OUT$MODDATP: JMP WR$MODDATP ; 134H
- DS 7
- IN$MODDATP: JMP RD$MODDATP ; 13EH
- DS 7
- ;
- ;
- ANI$MODRCVB: ANI MODRCVB ! RET ;bit to test for receive ready 148H
- CPI$MODRCVR: CPI MODRCVR ! RET ;value of rcv. bit when ready 14BH
- ANI$MODSNDB: ANI MODSNDB ! RET ;bit to test for send ready 14EH
- CPI$MODSNDR: CPI MODSNDR ! RET ;value of send bit when ready 151H
- DS 12 ;PMMI only calls 154H
- ;
- ;
- LOGONPTR: DW LOGON ;for user message. 160H
- JMP$DIAL: DS 6 ;to main dial routines 162H
- JMP$GOODBYE: JMP GOODBYE ; 168H
- JMP$INITMOD: JMP INITMOD ;go to user written routine 16BH
- JMP$NEWBAUD: RET ! NOP ! NOP ;(by-passes PMMI routine) 16EH
- JMP$NOPARITY: RET ! NOP ! NOP ;(by-passes PMMI routine) 171H
- JMP$PARITY: 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 ;IN-LINE print routine 183H
- JMP$INBUF: DS 3 ;get kbd input routine 186H
- JMP$INLNCOMP: DS 3 ;IN-LINE compare routine 189H
- JMP$INMODEM: DS 3 ;100 msec or char recd routine 18CH
- JMP$NXTSCRN: DS 3 ;prints mess and then next scrn 18FH
- JMP$TIMER: DS 3 ;.1 sec X 'B' reg timer 192H
- ;
- ;
- CLREOS: CALL JMP$ILPRT ; 195H
- DB ESC,0D9H,0,0,0 ;for Soroc/Televideo 198H
- RET ;(or VideoTerm) 19DH
- ;
- CLRSCRN: CALL JMP$ILPRT ; 19EH
- DB ESC,0AAH,0,0,0 ;for Soroc/Televideo 1A1H
- RET ;(or VideoTerm) 1A6H
- ;
- SYSVER: CALL JMP$ILPRT ; 1A7H
- ;
- IF SOFTCARD
- DB 'Modem 730 for Softcard '
- ENDIF
- ;
- IF APPLICARD
- DB 'Modem 730 for 6 Mhz Applicard '
- ENDIF
- ;
- DB 'and Micromodem ][',CR,LF,0
- RET
- ;.....
- ;
- ;
- ; User routines can be added after SYSVER routine. With this overlay
- ; all user added routines and data blocks must end before 0400H since
- ; PMMI routines are used.
- ;
- ;---------------- START OF LOCAL OVERLAY ROUTINES ---------------------
- ;
- ; The following routines communicate with hardware in Apple Slots
- ; directly from Applicard.
- ;
- ;
- ; Read the modem control port
- ;
- RD$MODCTLP:
- PUSH D
- LXI D,MODCTLP
- CALL PEEK
- POP D
- RET
- ;.....
- ;
- ;
- ; Write the modem control port
- ;
- WR$MODCTLP:
- PUSH D
- LXI D,MODCTLP
- CALL POKE
- POP D
- RET
- ;.....
- ;
- ;
- ; Write the modem control port 2
- ;
- WR$MODCTLP2:
- PUSH D
- LXI D,MODCTLP2
- CALL POKE
- POP D
- RET
- ;.....
- ;
- ;
- ; Read the modem data port
- ;
- RD$MODDATP:
- PUSH D
- LXI D,MODDATP
- CALL PEEK
- POP D
- RET
- ;.....
- ;
- ;
- ; Write the modem data port
- ;
- WR$MODDATP:
- PUSH D
- LXI D,MODDATP
- CALL POKE
- POP D
- RET
- ;.....
- ;The peek and poke routines are only necessary for the Applicard,
- ;but are just redefined for the Softcard
- ;
- IF APPLICARD
- ;
- ;
- ; Peek at 1 byte in the Apple
- ; Entry: DE = address
- ; Exit: A = data
- ;
- PEEK: PUSH B
- MVI C,PEEK1BYTE
- CALL WRBYTE
- CALL WRWORD
- CALL RDBYTE
- POP B
- RET
- ;.....
- ;
- ;
- ; Poke 1 byte into the Apple
- ; Entry: DE = address
- ; Exit: A = data
- ;
- POKE: PUSH B
- MOV B,A
- MVI C,POKE1BYTE
- CALL WRBYTE
- CALL WRWORD
- MOV C,B
- CALL WRBYTE
- POP B
- RET
- ;
- ENDIF ;Applicard complicated I/O
- ;
- IF SOFTCARD
- PEEK: LDAX D
- RET
- ;
- POKE: STAX D
- RET
- ;
- ENDIF ;Softcard simple I/O
- ;.....
- ;
- ;
- ; You can put in a message at this location which can be called up with
- ; CTL-L if TRANLOGON has been set TRUE. You can put in several lines if
- ; desired. End with a 0.
- ;
- LOGON: DB CR,'vax',CR,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- ;.....
- ;
- ;
- ; This routine will send a BREAK through MM ][. Routine is called
- ; through patch in main program and JMP$BREAK vector here.
- ;
- SENDBRK:
- MVI A,60H ;BREAK byte to ACIA
- CALL WR$MODCTLP ;send to ACIA
- PUSH B
- LXI B,300 ;send break for 300 msecs
- CALL DELAY
- POP B
- MVI A,FSW ;re-init modem w/current status
- CALL WR$MODCTLP
- RET
- ;.....
- ;
- ;
- ; This routine initializes MM ][ on first entry to MDM730 and is
- ; used after that to re-initialize modem to current status.
- ;
- DTR: DB 8FH ;300 baud, orig, carrier on, off-hook
- ;
- MODSTAT:
- DB 00H ;value of 00 indicates cold start, no hangup
- ;
- INITMOD:
- MVI A,1 ;MSPEED 300 baud value
- STA MSPEED
- ;
- INITMOD2:
- MVI A,3 ;reset ACIA
- CALL WR$MODCTLP
- MVI A,FSW ;Send word status to ACIA
- CALL WR$MODCTLP
- LDA MODSTAT ;get current modem params
- ORA A ;if 00, is a cold start, dont bother
- RZ ;initializing in case connected
- CALL WR$MODCTLP2
- RET
- ;.....
- ;
- ;
- ; This routine is called from main program with MODSTAT set for
- ; disconnect of MM][.
- ;
- HANGUP$MM:
- CALL INITMOD2
- PUSH B
- LXI B,1000 ;wait 1 second for MM][ disconnect
- CALL DELAY
- POP B
- RET
- ;.....
- ;
- ;
- ; The following routine can be used to change baud rate or word/parity
- ; settings. This routine is called each time a menu entry is selected
- ; and is designed to allow setup changes before entry to terminal mode.
- ;
- SETUPR: RET
- ;.....
- ;
- ;
- ; The following routine can be used to display commands on the screen
- ; of interest to users of this equipment. If using the Hayes Smartmodem
- ; this is unavailable without a special address change. In this overlay
- ; a datablock is overlayed on the original PMMI special menu and this
- ; routine is called by JMP$SPCLMENU vector in main program. The info
- ; screen can be eliminated by replacing this code with a simple RET.
- ;
- SPCLMENU:
- JMP PMMI$MENU ;this jumps to main program
- RET
- ;.....
- ;
- ;
- ; This routine on 6 MHz AppliCard will delay for the number of
- ; milliseconds passed in 'BC' register. PSW, DE, HL registers saved.
- ; For a 4MHz AppliCard change number of timing loops from 3 to 2.
- ;
- DELAY: PUSH PSW
- PUSH H
- PUSH D ;contains delay time
- ;
- IF APPLICARD
- MVI A,3 ;loop through 3 times
- ENDIF
- ;
- IF SOFTCARD
- MVI A,1 ;loop through 1 time
- ENDIF
- ;
- DELAY0: PUSH B
- INR B ;will later be decremented
- ;
- DELAY1: MVI E,126 ;count for .1 msec Z-80 at 2 MHz
- ;
- DELAY2: DCR E
- JNZ DELAY2
- DCR C ;run down LO byte then..
- JNZ DELAY1
- DCR B ;..HI byte back down
- JNZ DELAY1 ;If not done keep going
- POP B ;Otherwise, get delay time back...
- DCR A ;...and loop back again...
- JNZ DELAY0 ;...for 3 times (6 MHz).
- POP D
- POP H
- POP PSW ;unload stack
- RET
- ;.....
- ;
- ;
- ;------------ START OF ROUTINES TO BE OVERLAYED IN MAIN PROGRAM --------
- ;
- ; These routines have been written such that Smartmodem routines are
- ; not disturbed. Conditional assembly routines can be added to support
- ; serial I/O cards and Smartmodem.
- ;.....
- ;
- ;
- ; This routine is called after dialing is complete; routine expects
- ; modem to return with Carrier Detect, then passes control
- ; to CONMADE routine.
- ;
- OVL1: ORG DIAL18
- ;
- MVI A,3 ;clear ACIA port 1
- CALL WR$MODCTLP
- MVI B,1 ;read modem or come back in .1 secs
- CALL TIMER
- MVI A,8DH ;set modem for off-hook, orig, etc
- CALL WR$MODCTLP2
- MVI D,4 ;mask for Carrier Detect
- MVI C,96H ;time limit for CD (about 30 secs)
- CALL WAIT
- JNC CONMADE ;got it, then continue
- CALL DISCONNT ;no, then drop..
- ;.....
- ;
- ;
- ; This routine replaces the original disconnect routine. It resets
- ; all modem values to standby, onhook status.
- ;
- OVL2: ORG DISCONNT+7
- ;
- MVI A,0DH ;restores modem defaults
- STA MODSTAT
- CALL HANGUP$MM
- RET
- ;.....
- ;
- ;
- ; This CALL is to replace PMMI call..reads modem port for CD status.
- ;
- OVL3: ORG WAIT+5
- ;
- CALL RD$MODCTLP ;check for Carrier Detect
- ;
- ;.....
- ;
- ; This routine replaces unnecessary PMMI code. Jump is forced to
- ; overlay SETUPR routine.
- ;
- OVL4: ORG RESTART1+12
- ;
- CNZ SETUPR
- ;.....
- ;
- ;
- OVL5: ORG BREAK+4
- ;
- JMP BREAK1 ;jump over PMMI routine, use
- ;..... ;BREAK routine here
- ;
- ;
- ; This routine replaces PMMI dialing routine in main program.
- ;
- OVL6: ORG DIALA2+8
- ;
- PULSE: PUSH B ;digit dialed is in 'B' reg
- MVI A,0DH ;set modem on-hook..
- CALL WR$MODCTLP2
- LXI B,61 ;..for 61 msecs
- CALL DELAY
- MVI A,8DH ;set modem off-hook..
- CALL WR$MODCTLP2
- LXI B,39 ;..for 39 msecs
- CALL DELAY
- POP B ;get back number from stack
- DCR C ;..one less pulse
- JNZ PULSE ;go back for next pulse if not done
- LXI B,600 ;otherwise, wait 600 msecs
- CALL DELAY
- RET
- ;.....
- ;
- ;
- ; This routine is called after number is entered or found in library,
- ; but before dial-pulsing routine is called. Off-hook status saved
- ; for re-init after dialing.
- ;
- OVL7: ORG DIALBGN+5
- ;
- LDA DTR ;get DTR byte
- STA MODSTAT ;save for post dial re-init
- MVI A,8DH ;set modem off-hook
- CALL WR$MODCTLP2
- LXI B,3000 ;wait 3 secs for dialtone
- CALL DELAY
- ORA A ;must return with carry clear
- RET
- ;.....
- ;
- ;
- ; This routine re-inits modem ACIA registers and modem status
- ; from MODSTAT set at DIALBGN (above).
- ;
- OVL8: ORG CONMADE
- ;
- LDA MODSTAT ;Do nothing step since we are...
- CALL INITMOD2 ;...going to re-init ACIA anyway!
- ;.....
- ;
- ;
- ; This text block overlays original PMMI special menu data and is
- ; called through jumps in overlay code and back to start of the
- ; PMMI menu. This data section must end prior to 0CB4H!!
- ;
- OVL9: ORG SPCLMENU$DB
- ;
- DB ' '
- DB 'Additional Information for Micromodem ][ Users',CR,LF
- DB ' '
- DB '---------- ----------- --- ---------- -- -----'
- DB CR,LF,LF,LF
- DB ' '
- DB 'This overlay allows the MM ][ to operate in the',CR,LF
- DB ' '
- DB 'originate mode only at 300 baud. Word status is',CR,LF
- DB ' '
- DB 'fixed to 7 Data Bits, Even parity, and 1 Stop Bit.'
- DB CR,LF,LF,LF
- DB 0
- RET
- ;.....
- ;
- ;
- ; The Micromodem ][ cannot be used for RingBack dialing. This patch
- ; defeats PMMI routine and gives error message.
- ;
- OVL10: ORG RINGBK+5
- ;
- JMP RINGBK2
- ;
- ;
- ORG RINGBK2+3
- ;
- DB CR,LF,'+ No Ringback for Micromodem ][ +',0
- ;.....
- ;
- ;
- ;------------- END OF PATCHES TO MAIN PROGRAM AREA --------------------
- ;
- ;
- END