home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol168 / m7ap-1.aqm / M7AP-1.ASM
Assembly Source File  |  1985-02-09  |  14KB  |  437 lines

  1. ; M7AP-1.ASM Apple overlay file for MDM7xx.  11/11/83
  2. ;
  3. ; This overlay file enables Apple II computers with the Apple Super
  4. ; Serial card and external modem to use the MDM7xx phone modem program.
  5. ; It also supports the following Apple modem configurations:
  6. ;
  7. ;    a) CCS 7710 serial interface and external modem
  8. ;    b) SSM serial interface and external modem
  9. ;    c) Apple communications interface and external modem
  10. ;    d) Mountain Hardware CPS Multifunction card and external modem
  11. ;
  12. ; You will want to look this file over carefully. There are a number of
  13. ; options that you can use to configure the program to suit your taste.
  14. ; Much of the information contained here is not in the MDM7xx.ASM file.
  15. ;
  16. ; Edit this file for your preferences then follow the "TO USE:" example.
  17. ;
  18. ; Use the "SET" command to change the baudrate when desired.  It starts
  19. ; out at 300 baud when the program is first called up.
  20. ;
  21. ;
  22. ;    TO USE: First edit this file filling in answers for your own
  23. ;        equipment.  Then assemble with ASM.COM or equivalent
  24. ;        assembler.  Then use DDT to overlay the the results
  25. ;        of this program to the original .COM file:
  26. ;
  27. ;        A>DDT MDM7xx.COM
  28. ;        DDT VERS 2.2
  29. ;        NEXT  PC
  30. ;        4300 0100
  31. ;        -IM7AP-1.HEX        (note the "I" command)
  32. ;        -R            ("R" loads in the .HEX file)
  33. ;        NEXT  PC
  34. ;        4300 0000
  35. ;        -G0            (return to CP/M)
  36. ;        A>SAVE 66 MDM7xx.COM    (now have a modified .COM file)
  37. ;
  38. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  39. ;
  40. ; 11/11/83 - Renamed to M7AP-1.ASM, no changes    - Irv Hoff
  41. ; 10/07/83 - Added CPS card support        - Wally Hubbard
  42. ; 07/27/83 - Renamed to work with MDM712    - Irv Hoff
  43. ; 07/01/83 - Revised to work with MDM711    - Irv Hoff
  44. ; 06/22/83 - Revised to work with MDM710    - Irv Hoff
  45. ; 05/27/83 - Updated to work with MDM709    - Irv Hoff
  46. ; 05/15/83 - Revised to work with MDM708    - Irv Hoff
  47. ; 04/11/83 - Updated to work with MDM707    - Irv Hoff
  48. ; 04/04/83 - Updated to work with MDM706    - Irv Hoff
  49. ; 02/27/83 - Updated to work with MDM705    - Irv Hoff
  50. ; 02/12/83 - Used MDM703CF to make this file
  51. ;         for Apple computers using a var-
  52. ;         iety of serial interface cards
  53. ;         with external modem.        - Bruce Kargol
  54. ;
  55. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  56. ;
  57. BELL:        EQU    07H    ;bell
  58. CR:        EQU    0DH    ;carriage return
  59. ESC:        EQU    1BH    ;escape
  60. LF:        EQU    0AH    ;linefeed
  61. ;
  62. YES:        EQU    0FFH
  63. NO:        EQU    0
  64. ;
  65. ;
  66. CCS:        EQU    NO    ;YES for CCS 7710
  67. COMCARD:    EQU    NO    ;YES for Apple comcard
  68. SSC:        EQU    NO    ;YES for Super Serial Card
  69. SSM:        EQU    NO    ;YES for SSM serial card
  70. CPS:        EQU    YES    ;YES for CPS card
  71. ;
  72.          IF    CCS
  73. MODDATP:    EQU    0E0A1H    ;data port of CCS 7710
  74. MODCTL1:    EQU    0E0A0H    ;status port of CCS 7710
  75.          ENDIF        ;endif CCS
  76. ;
  77.          IF    COMCARD
  78. MODDATP:    EQU    0E0AFH    ;data port of Comcard
  79. MODCTL1:    EQU    0E0AEH    ;status port of Comcard
  80.          ENDIF        ;endif Comcard
  81. ;
  82.          IF    SSM
  83. MODDATP:    EQU    0E0A5H    ;data port of SSM
  84. MODCTL1:    EQU    0E0A4H    ;status port of SSM
  85.          ENDIF        ;endif SSM
  86. ;
  87.          IF    SSC
  88. MODDATP:    EQU    0E0A8H    ;data port of Apple Super Serial Card
  89. MODCTL1:    EQU    0E0A9H    ;modem status port of Super Serial Card
  90. MODRCVB:    EQU    08H    ;bit to test for received data
  91. MODRCVR:    EQU    08H    ;modem receive ready
  92. MODSNDB:    EQU    10H    ;bit to test for ready to send
  93. MODSNDR:    EQU    10H    ;modem send ready bit
  94.          ENDIF        ;endif SSC
  95. ;
  96. ;
  97. ; (Any slot with any CPS function assigned to it may be used.)
  98. ;
  99.          IF    CPS
  100. SLOT:        EQU    2    ;Slot = 1 or 2 for normal CP/M.
  101. MODCR:        EQU    0E0FEH+SLOT*100H  ;control port of CPS card
  102. MODDATP:    EQU    0E0FAH+SLOT*100H  ;data port of CPS card
  103. MODCTL1:    EQU    0E0FBH+SLOT*100H  ;status port of CPS card
  104. MODRCVB:    EQU    02H    ;bit to test for receive
  105. MODRCVR:    EQU    02H    ;value when ready
  106. MODSNDB:    EQU    01H    ;bit to test for send
  107. MODSNDR:    EQU    01H    ;value when ready
  108.          ENDIF        ;endif CPS
  109. ;
  110. ;
  111. ; Apple status bit equates for CCS, Comcard and SSM
  112. ;
  113.          IF    NOT SSC AND NOT CPS
  114. MODSNDB:    EQU    02H    ;bit to test for send
  115. MODSNDR:    EQU    02H    ;value when ready
  116. MODRCVB:    EQU    01H    ;bit to test for receive
  117. MODRCVR:    EQU    01H    ;value when ready
  118.          ENDIF        ;not SSC and not CPS
  119. ;
  120. ;
  121. ; We have software control over the Super Serial and CPS cards, so
  122. ; SETUPRTST is YES for those cards, below.
  123. ;
  124. ;
  125.         ORG    100H
  126. ;
  127. ;
  128. ; Change the clock speed to match your equipment.  The Microsoft Softcard
  129. ; operates at 2 MHz.
  130. ;
  131.         DS    3    ;(for  "JMP   START" instruction)
  132. ;
  133. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  134. SMARTMODEM:    DB    YES    ;yes=HAYES Smartmodem, no=non-pmmi    104H
  135. TOUCHPULSE:    DB    'P'    ;T=touch, P=pulse (Smartmodem-only)    105H
  136. CLOCK:        DB    20    ;clock speed in MHz x10, 25.5 MHz max.    106H
  137.                 ;20=2 MHz, 37=3.68 MHz, 40=4 MHz, etc.
  138. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  139.                 ;6=2400 7=4800 8=9600 9=19200 default
  140. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  141.                 ;default time to send character in ter-
  142.                 ;minal mode file transfer for slow BBS.
  143. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  144.                 ;default time for extra wait after CRLF
  145.                 ;in terminal mode file transfer
  146. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  147. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH
  148. SCRNTEST:    DB    NO    ;Cursor control routine         10CH
  149. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  150.                 ;no=resend a record after a valid NAK
  151. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  152. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  153. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  154. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  155. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  156. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  157.                 ;terminal mode (added by remote echo)
  158. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  159. TRANLOGON:    DB    YES    ;yes=allow transmission of logon    115H
  160.                 ;write logon sequence at location LOGON
  161. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  162. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  163.                 ;no=external command if EXTCHR precedes
  164. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  165. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  166. XOFFTST:    DB    NO    ;yes=checks for XOFF from remote while    11AH
  167.                 ;sending a file in terminal mode
  168. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  169.                 ;sending a file in terminal mode
  170. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  171. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  172. EXTRA1:        DB    0    ;for future expansion            11EH
  173. EXTRA2:        DB    0    ;for future expansion            11FH
  174. BRKCHR:        DB    '@'-40H    ;^@ = Send 300 ms. break tone        120H
  175. NOCONNCT:    DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  176. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  177. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  178. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  179. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  180. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        126H
  181. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        127H
  182.         DS    2        ;                128H
  183. ;
  184. IN$MODCTL1:    LDA    MODCTL1 ! RET    ;in modem control port        12AH
  185.         DS    6
  186. OUT$MODDATP:    STA    MODDATP ! RET    ;out modem data port        134H
  187.         DS    6
  188. IN$MODDATP:    LDA    MODDATP ! RET    ;in modem data port        13EH
  189.         DS    6        ;spares if needed
  190. ;
  191. ANI$MODRCVB:    ANI    MODRCVB ! RET    ;bit to test for receive ready    148H
  192. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;value of rcv. bit when ready    14BH
  193. ANI$MODSNDB:    ANI    MODSNDB ! RET    ;bit to test for send ready    14EH
  194. CPI$MODSNDR:    CPI    MODSNDR ! RET    ;value of send bit when ready    151H
  195.         DS    12        ;PMMI only calls        154H
  196. ;
  197. LOGONPTR:    DW    LOGON        ;for user message.        160H
  198.         DS    6        ;                162H
  199. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  200. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  201.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    16EH
  202.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  203.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  204. JMP$SETUPR:    JMP    SETUPR        ;                177H
  205. JMP$SPCLMENU:    JMP    SPCLMENU    ;                17AH
  206. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  207. JMP$BREAK:    JMP    SENDBRK        ;                180H
  208. ;
  209. ;
  210. ; Do not change the following six lines.
  211. ;
  212. JMP$ILPRT:    DS    3        ;                183H
  213. JMP$INBUF    DS    3        ;                186H
  214. JMP$INLNCOMP:    DS    3        ;                189H
  215. JMP$INMODEM    DS    3        ;                18CH
  216. JMP$NXTSCRN:    DS    3        ;                18FH
  217. JMP$TIMER:    DS    3        ;                192H
  218. ;
  219. ;
  220. CLREOS:        CALL    JMP$ILPRT    ;                195H
  221. EOSCLR:        DB    0,0,0,0,0    ;                198H
  222.         RET            ;                19DH
  223. ;
  224. CLRSCRN:    CALL    JMP$ILPRT    ;                19EH
  225.         DB    0,0,0,0,0    ;                1A1H
  226.         RET            ;                1A6H
  227. ;
  228. SYSVER:        CALL    JMP$ILPRT    ;                1A7H
  229.         DB    'Version for Apple II with external modem'
  230.         DB    CR,LF,0
  231.         RET
  232. ;.....
  233. ;
  234. ;
  235. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  236. ;     end of your last routine should terminate by 0400H (601 bytes
  237. ;     available after start of SYSVER) if using the Hayes Smartmodem
  238. ;     or by address 0C00H (2659 bytes) otherwise.
  239. ;
  240. ;
  241. ; You can put in a message at this location which can be called up with
  242. ; CTL-L if TRANLOGON has been set TRUE.  You can put in several lines if
  243. ; desired.  End with a 0.
  244. ;
  245. LOGON:    DB    'Hello there from an Apple user',CR,0
  246. ;
  247. ;
  248. ; You can add your own routine here to send a break tone to reset time-
  249. ; share computers, if desired.
  250. ;
  251.      IF NOT CPS
  252. SENDBRK:RET
  253.      ENDIF        ;endif not CPS
  254. ;
  255.      IF CPS
  256. SENDBRK:MVI    A,80H    ;open the command register
  257.     STA    MODCR    ;by storing 80H in MODCR
  258.     MVI    A,3FH    ;send a break by storing
  259.     STA    MODCTL1    ;$3F in MODCTL1
  260.     XRA    A    ;close the command register
  261.     STA    MODCR    ;by storing 00H in MODCR
  262.     RET
  263.      ENDIF        ;endif CPS
  264. ;
  265. ; You can add your own routine here to set DTR low and/or send a break
  266. ; tone to disconnect.
  267. ;
  268. GOODBYE:RET
  269. ;
  270. ;.....
  271. ;
  272. ;
  273. ; The following address is used to set data bits, parity, stop bits
  274. ; and baud rate on the Super Serial Card.
  275. ;
  276.      IF SSC
  277. MODDLL:    EQU    0E0ABH        ;SSC ACIA control register
  278. ;
  279. ;
  280. ; Control over number of data bits, parity and number of stop
  281. ; bits (thru MSB300:) has not been implemented.  These must be
  282. ; set using the slide switches on the Super Serial Card.
  283. ;
  284. ; The following is used to initialize the Apple SSC on execution of the
  285. ; program.  Change it to initialize the modem port on your micro if you
  286. ; wish.  It initializes to 300 baud.
  287. ;
  288. INITMOD:
  289.     MVI    A,1        ;default transfer time to 300
  290.     STA    MSPEED
  291.     LDA    MODDLL        ;current baudrate from MODDLL
  292.     ANI   0F0H        ;zero the last 4 bits
  293. ;
  294. INITMOD1:
  295.     ORI   06H        ;get default baudrate (300)
  296.     STA    MODDLL        ;store default baudrate
  297.     RET
  298.      ENDIF            ;SSC
  299. ;.....
  300. ;
  301. ;
  302. ; The following may be used to initialize the Mountain Hardware CPS
  303. ; Multifunction Card for eight bits, no parity, one stop bit, and
  304. ; 300 baud.  This does not alter the CPS defaults outside of MDM7xx.
  305. ;
  306.      IF CPS
  307. INITMOD:
  308.     MVI    A,1        ;set MSPEED at 1 (=300 baud)
  309.     STA    MSPEED
  310.     MVI    A,80H        ;open the command register
  311.     STA    MODCR        ;by storing 80H in MODCR
  312.     MVI    A,37H        ;initialize the serial chip
  313.     STA    MODCTL1        ;by storing 37H in MODCTL1
  314.     MVI    A,4EH        ;set 1 stop bit, no parity
  315.     STA    MODDATP        ;by storing $4E in MODDATP
  316. ;
  317. INITMOD1:
  318.     MVI    A,35H        ;set baud rate at 300 by storing
  319.     STA    MODDATP        ;35H in MODDATP (same address - the two 
  320.                 ;registers cycle with each write)
  321.     XRA    A        ;close the command register
  322.     STA    MODCR        ;by storing 00 in MODCR
  323. ;
  324. ;
  325. ; The MDM7xx.COM routine that checks to see if the printer is ready
  326. ; does not work with the CPS card.  This routine changes it.  Check
  327. ; to make sure the original code sequence CALL 0000H, ORA A, RZ, is
  328. ; located at GOLIST.  A new routine to send the character to the
  329. ; printer is also provided, to eliminate the need for the CPS patches.
  330. ;
  331. GOLIST:    EQU    01A8FH        ;MDM7xx.COM location of GOLIST
  332.     LXI    H,PRCHECK    ;store the address of the
  333.     SHLD    GOLIST+1    ;PRCHECK routine at GOLIST+1
  334.     LXI    H,PRINTCHAR    ;store the address of the
  335.     SHLD    GOLIST+15    ;PRINTCHAR routine
  336.     RET
  337. ;.....
  338. ;
  339. ;
  340. ; Substitute routines for status checks and printing:
  341. ;
  342. PRCHECK:
  343.     LDA    0E0F9H+SLOT*100H ;read the status port
  344.     ANI    040H         ;mask off unused bits
  345.     RET
  346. ;.....
  347. ;
  348. ;
  349. PRINTCHAR:
  350.     MOV    A,C         ;move char to A
  351.     STA    0E0FDH+SLOT*100H ;send it to the printer
  352.     RET
  353.      ENDIF            ;CPS
  354. ;.....
  355. ;
  356. ;
  357. ;
  358.      IF NOT SSC AND NOT CPS
  359. INITMOD:RET            ;intialization goes here, if needed
  360. SETUPR:    RET            ;routine to change baud rates, if needed
  361.      ENDIF            ;NOT SSC AND NOT CPS
  362. ;.....
  363. ;
  364. ;
  365. ; Changes the modem baud rate with SET command.
  366. ;
  367.      IF SSC OR CPS
  368. SETUPR: LXI    D,BAUDBUF    ;point to input buffer for INLNCOMP
  369.     CALL    JMP$ILPRT
  370.     DB    'Input Baud Rate (300,600,1200): ',0
  371.     CALL    JMP$INBUF
  372.     LXI    D,BAUDBUF+2
  373.     CALL    JMP$INLNCOMP    ;compare BAUDBUF+2 with characters below
  374.     DB    '300',0
  375.     JNC    OK300        ;go if got match
  376.     CALL    JMP$INLNCOMP
  377.     DB    '600',0
  378.     JNC    OK600
  379.     CALL    JMP$INLNCOMP
  380.     DB    '1200',0
  381.     JNC    OK1200
  382.     CALL    JMP$ILPRT    ;all matches failed - tell operator
  383.     DB    '++ Incorrect entry ++',CR,LF,BELL,0
  384.     JMP    SETUPR        ;try again
  385. ;
  386. OK300:    MVI    A,1        ;MSPEED 300 baud value
  387.     LHLD    BD300        ;get 300 baud parameters in HL
  388.     JMP    LOADBD        ;go load them
  389. ;
  390. OK600:    MVI    A,3
  391.     LHLD    BD600
  392.     JMP    LOADBD
  393.  
  394. OK1200:    MVI    A,5
  395.     LHLD    BD1200
  396. ;
  397. LOADBD:    STA    INITMOD+1
  398.     MOV    A,L        ;get baud rate byte
  399.     STA    INITMOD1+1    ;store in INITMOD
  400.     JMP    INITMOD        ;reset SSC ACIA baud rate
  401.      ENDIF            ;endif SSC or CPS
  402. ;
  403. ;
  404. ; Table of baud rate parameters
  405. ;
  406.      IF SSC
  407. BD300:    DW    0006H
  408. BD600:    DW    0007H
  409. BD1200:    DW    0008H
  410.      ENDIF            ;SSC
  411. ;
  412.      IF CPS
  413. BD300:    DW    0035H
  414. BD600:    DW    0036H
  415. BD1200:    DW    0037H
  416.      ENDIF            ;CPS
  417. ;
  418. ;
  419. BAUDBUF:DW    10,0        ;TELLS CLEARBUF ROUTINE IT CAN..
  420.     DS    10        ;..CLEAR NEXT 10 BYTES
  421. ;
  422. ;-----------------------------------------------------------------------
  423. ;
  424. ; The following routine can be used to display commands on the screen
  425. ; of interest to users of this equipment.  If using the Hayes Smartmodem
  426. ; this is unavailable without a special address change.
  427. ;
  428. SPCLMENU: RET
  429. ;
  430. ;-----------------------------------------------------------------------
  431. ;
  432. ;
  433. ; NOTE: MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
  434. ;                0C00H (without Smartmodem)
  435. ;
  436.     END
  437.