home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MODEMS / MODEM7 / M7OS-1.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  11KB  |  355 lines

  1.  
  2. ; M7OS-1.ASM  -  Osborne Overlay for MDM7xx - 11/11/83
  3. ;
  4. ; You will want to look this file over carefully.  There are a number of
  5. ; options that can be used to configure the program to suit your taste.
  6. ;
  7. ; Use the "SET" command to change the baudrate when desired.  It starts
  8. ; out at 300 baud when the program is first called up.
  9. ;
  10. ; NOTE:  Any programmer updating the main program should check the
  11. ;     address:  SETUPADR -- it may have changed with your update.
  12. ;     Alter accordingly.
  13. ;
  14. ;
  15. ;    TO USE: First edit this file filling in answers for your own
  16. ;        equipment.  Then assemble with ASM.COM or equivalent
  17. ;        assembler.  Then use DDT to overlay the the results
  18. ;        of this program to the original .COM file:
  19. ;
  20. ;        A>DDT MDM7xx.COM
  21. ;        DDT VERS 2.2
  22. ;        NEXT  PC
  23. ;        4300 0100
  24. ;        -IM7OS-1.HEX        (note the "I" command)
  25. ;        -R            (loads in the .HEX file)
  26. ;        NEXT  PC
  27. ;        4300 0000
  28. ;        -G0            (return to CP/M)
  29. ;        A>SAVE 66 MCM7xx.COM    (now have modified .COM file)
  30. ;
  31. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  32. ;
  33. ; 11/11/83 - Renamed to M7OS-1.ASM, no changes    - Irv Hoff
  34. ; 07/27/83 - Renamed to work with MDM712    - Irv Hoff
  35. ; 07/01/83 - Revised to work with MDM711    - Irv Hoff
  36. ; 06/22/83 - Revised to work with MDM710    - Irv Hoff
  37. ; 05/27/83 - Revised to work with MDM709    - Irv Hoff
  38. ; 05/15/83 - Revised to work with MDM708    - Irv Hoff
  39. ; 04/11/83 - Updated to work with MDM707    - Irv Hoff
  40. ; 04/04/83 - Updated to work with MDM706    - Irv Hoff
  41. ; 02/27/83 - Updated to work with MDM705    - Irv Hoff
  42. ; 02/17/83 - Updated to work with MDM704    - Irv Hoff
  43. ; 02/07/83 - Updated to work with MDM703    - Irv Hoff
  44. ; 01/27/83 - Updated to work with MDM702    - Irv Hoff
  45. ; 01/10/83 - Updated to work with MDM701    - Irv Hoff
  46. ; 11/29/82 - Overlay file for Osborne O-1    - Paul Kelley
  47. ;
  48. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  49. ;
  50. BELL:        EQU    07H        ;bell
  51. CR:        EQU    0DH        ;carriage return
  52. ESC:        EQU    1BH        ;escape
  53. LF:        EQU    0AH        ;linefeed
  54. ;
  55. YES:        EQU    0FFH
  56. NO:        EQU    0
  57. ;
  58. ;
  59. MODCTLP:    EQU    2A00H    ;status register for RS232
  60. MODDATP:    EQU    MODCTLP+1 ;data resister for RS232
  61. MODSNDB:    EQU    2    ;bit to test for ready to send
  62. MODSNDR:    EQU    2    ;modem send ready when high
  63. MODRCVB:    EQU    1    ;bit to test for received data
  64. MODRCVR:    EQU    1    ;modem receive ready when high
  65. ;
  66. ;
  67. ;
  68. ; Change CLOCK to match your equipment
  69. ;
  70.         ORG    100H
  71. ;
  72.         DS    3    ;(for  "JMP   START" instruction)
  73. ;
  74. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  75. SMARTMODEM:    DB    NO    ;yes=HAYES Smartmodem, no=non-PMMI    104H
  76. TOUCHPULSE:    DB    'T'    ;T=touch, P=pulse (Smartmodem-only)    105H
  77. CLOCK:        DB    20    ;clock speed in MHz x10, 25.5 MHz max.    106H
  78.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  79. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  80.                 ;6=2400 7=4800 8=9600 9=19200 default
  81. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  82.                 ;default time to send character in ter-
  83.                 ;minal mode file transfer for slow BBS.
  84. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  85.                 ;default time for extra wait after CRLF
  86.                 ;in terminal mode file transfer
  87. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  88. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH
  89. SCRNTEST:    DB    YES    ;cursor control routine         10CH
  90. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  91.                 ;no=resend a record after a valid NAK
  92. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  93. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  94. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  95. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  96. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  97. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  98.                 ;terminal mode (added by remote echo)
  99. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  100. TRANLOGON:    DB    YES    ;yes=allow transmission of logon    115H
  101.                 ;write logon sequence at location LOGON
  102. NOSAVE:        DB    NO    ;DO NOT CHANGE, MUST BE 'NO' FOR OS-1    116H
  103. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  104.                 ;no=external command if EXTCHR precedes
  105. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  106. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  107. XOFFTST:    DB    NO    ;yes=checks for XOFF from remote while    11AH
  108.                 ;sending a file in terminal mode
  109. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  110.                 ;sending a file in terminal mode
  111. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  112. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  113. EXTRA1:        DB    0    ;for future expansion            11EH
  114. EXTRA2:        DB    0    ;for future expansion            11FH
  115. BRKCHR:        DB    '@'-40H    ;^@ = Send a 300 ma. break tone        120H
  116. NOCONNCT:    DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  117. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  118. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  119. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  120. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  121. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        126H
  122. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        127H
  123.         DS    2        ;                128H
  124. ;
  125. IN$MODCTLP:    CALL    OSTAT    ! RET    ;get the I/O status        12AH
  126.         DS    6
  127. ;
  128. OUT$MODDATP:    CALL    OSOUT    ! RET    ;send a character to the I/O    134H
  129.         DS    6
  130. ;
  131. IN$MODDATP:    CALL    OSIN    ! RET    ;get a character from the I/O    13EH
  132.         DS    6
  133. ;
  134. ANI$MODRCVB:    ANI    MODRCVB ! RET    ;bit to test for receive ready    148H
  135. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;value of rcv. bit when ready    14BH
  136. ANI$MODSNDB:    ANI    MODSNDB ! RET    ;bit to test for send ready    14EH
  137. CPI$MODSNDR:    CPI    MODSNDR ! RET    ;value of send bit when ready    151H
  138.         DS    12        ;                156H
  139. LOGONPTR:    DW    LOGON        ;for user message.        160H
  140.         DS    6        ;                162H
  141. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  142. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  143.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    16EH
  144.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  145.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  146. JMP$SETUPR:    JMP    SETUPR        ;                177H
  147. JMP$SPCLMENU:    JMP    SPCLMENU    ;                17AH
  148. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  149. JMP$BREAK:    JMP    SENDBRK        ;                180H
  150. ;
  151. ;
  152. ; Do not change the following six lines.
  153. ;
  154. JMP$ILPRT:    DS    3        ;                183H
  155. JMP$INBUF    DS    3        ;                186H
  156. JMP$INLNCOMP:    DS    3        ;                189H
  157. JMP$INMODEM    DS    3        ;                18CH
  158. JMP$NXTSCRN:    DS    3        ;                18FH
  159. JMP$TIMER:    DS    3        ;                192H
  160. ;
  161. CLREOS:        CALL    JMP$ILPRT    ;                195H
  162.         DB    0,0,0,0,0    ;O-1 has no clear EOS.        198H
  163.         RET            ;                19DH
  164. ;
  165. CLRSCRN:    CALL JMP$ILPRT        ;                19EH
  166.         DB    1AH,0,0,0,0    ;O-1 clear screen, home cursor    1A1H
  167.         RET            ;                1A6H
  168. ;
  169. SYSVER:        CALL    JMP$ILPRT    ;                1A7H
  170.             
  171.         DB    'Version for OSBORNE O-1'
  172.         DB    CR,LF,0
  173.         RET
  174. ;.....
  175. ;
  176. ;
  177. ;-----------------------------------------------------------------------
  178. ;
  179. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  180. ;     end of your last routine should terminate by 0400H (601 bytes
  181. ;     available after start of SYSVER) if using the Hayes Smartmodem
  182. ;     or by address 0C00H (2659 bytes) otherwise.
  183. ;
  184. ;-----------------------------------------------------------------------
  185. ;
  186. ; You can put in a message at this location which can be called up with
  187. ; CTL-O if TRANLOGON has been set TRUE.  You can put in several lines if
  188. ; desired.  End with a 0.
  189. ;
  190. LOGON:        DB    'This is an OSBORNE computer',CR,LF,0
  191. ;.....
  192. ;
  193. ;
  194. ; You can put a routine here that sends a break tone to reset time-share
  195. ; computers.
  196. ;
  197. SENDBRK:    RET
  198. ;.....
  199. ;
  200. ;
  201. ; You can put a routine here that sets DTR low and sends a break tone to
  202. ; disconnect the phone line.  End with a RET.
  203. ;
  204. GOODBYE:    RET
  205. ;.....
  206. ;
  207. ;
  208. ; You can put any items in this area you wish to display that are of in-
  209. ; terest to those using this equipment.  If using the Hayes Smartmodem
  210. ; this is unavailable without a special address change.  End the routine
  211. ; with a RET.
  212. ;
  213. SPCLMENU:    RET
  214. ;.....
  215. ;
  216. ;
  217. ; This is the Osborne initialization routine.
  218. ;    
  219. INITMOD:  LDA    FINITFLG    ;FLAG SET YET?
  220.       ORA    A
  221.       RNZ            ;IF YES, ALREADY BEEN THIS WAY ONCE
  222.       INR    A        ;OTHERWISE SET FLAG
  223.       STA    FINITFLG    ;..AND INITIALIZE THIS ROUTINE
  224.       LHLD    0005H+1        ;FIND START OF BDOS
  225.       LXI    D,-0100H    ;GO TO FIRST PAGE AHEAD OF BDOS
  226.       DAD    D        ;HL NOW POSITIONED ONE PAGE BELOW BDOS
  227.       PUSH    H        ;SAVE THE ADDRESS
  228.       LXI    D,BDJ        ;POINT TO OUR ROUTINE TO PUT THERE
  229.       LXI    B,CDLEN+2    ;SET LENGTH OF CODE
  230.       XCHG
  231.       DB    0EDH,0B0H    ;Z80 LDIR
  232. ;
  233.       LHLD    0005H+1        ;GET BDOS ADDRESS BACK ONCE MORE
  234.       POP    D        ;GET THE STARTING ADDRESS OFF STACK
  235.       PUSH    D        ;PUT IT BACK ON THE STACK
  236.       INX    D        ;POINT TO ADDRESS POSITION
  237.       XCHG            ;PUT INTO 'HL'
  238.       MOV    M,E        ;STORE 'LSP' ADDRESS
  239.       INX    H        ;GET 'LSP' LOCATION
  240.       MOV    M,D        ;STORE 'MSP' ADDRESS
  241.       POP    H        ;GET THE ADDRESS BACK ONCE MORE
  242.       SHLD    0005H+1        ;NEW ADDRESS TO PROTECT FOR OVERWRITE
  243. ;
  244.       LXI    D,OSIN-BDJ    ;GET THE LENGTH OF ROUTINE TO MOVE
  245.       DAD    D        ;COMUTE ADDRESS OF THE 'OSIN' ROUTINE
  246.       SHLD    IN$MODDATP+1    ;PATCH CALL FOR "GET CHAR." ROUTINE
  247.       LXI    D,OSOUT-OSIN
  248.       DAD    D
  249.       SHLD    OUT$MODDATP+1    ;PATCH CALL FOR "SEND CHAR." ROUTINE
  250.       LXI    D,OSTAT-OSOUT
  251.       DAD    D
  252.       SHLD    IN$MODCTLP+1    ;PATCH CALL FOR "GET STATUS" ROUTINE
  253. ;
  254.       MVI    A,1        ;MSPEED 300 baud value
  255.       STA    MSPEED
  256. ;
  257. ;
  258. ; SET THE INITIAL BAUD RATE TO 300
  259. ;
  260.       MVI    C,56H        ;FOR 300 BAUD
  261. ;
  262. STBAUD:      PUSH    H
  263.       CALL    OSET
  264.       POP    H
  265.       XRA    A        ;CLEAR CARRY
  266.       RET
  267. ;.....
  268. ;
  269. ;
  270. OSET:      LHLD    1        ;GET BIOS+3 ADDRESS
  271.       MVI    L,3CH        ;SPECIAL OSBORNE ROUTINE
  272.       PCHL            ;BRANCH TO IT
  273. ;.....
  274. ;
  275. ;
  276. ; Change the baud rate with the SET command
  277. ;
  278. SETUPR:      PUSH    H
  279. ;
  280. AGAIN:      LXI    D,BAUDBUF    ;POINT TO INPUT BUFFER
  281.       CALL    JMP$ILPRT
  282.       DB    'Input Baud Rate (300, 1200): ',0
  283.       CALL    JMP$INBUF
  284.       LXI    D,BAUDBUF+2
  285.       CALL    JMP$INLNCOMP    ;COMPARE BAUDBUF+2 WITH CHARACTERS BELOW
  286.       DB    '300',0
  287.       MVI    A,1        ;MSPEED 300 BAUD
  288.       MVI    C,56H        ;OSBORNE 300 BAUD
  289.       JNC    OK        ;GO IF GOT MATCH
  290. ;
  291.       CALL    JMP$INLNCOMP
  292.       DB    '1200',0
  293.       MVI    A,5        ;MSPEED 1200 BAUD
  294.       MVI    C,55H        ;OSBORNE 1200 BAUD
  295.       JNC    OK
  296.       CALL    JMP$ILPRT    ;ALL MATCHES FAILED - TELL OPERATOR
  297.       DB    '++ Incorrect entry ++',CR,LF,BELL,0
  298.       JMP    AGAIN        ;TRY AGAIN
  299. ;...
  300. ;
  301. ;
  302. OK:      STA    MSPEED        ;SET MSPEED
  303.       POP    H
  304.       JMP    STBAUD
  305. ;.....
  306. ;
  307. ;
  308. BAUDBUF:  DB    10,0
  309.       DS    10
  310. ;
  311. FINITFLG: DB    0
  312. ;.....
  313. ;
  314. ;
  315. ; --- ROUTINES THAT GET PLACED JUST UNDER 'BDOS' OVERLAYING 'CCP'
  316. ;
  317. BDJ:    JMP    $-$        ;THIS GETS PATCHED TO JUMP TO BDOS ENTRY
  318. ;
  319. OSIN:    DI            ;DISABLE INTERRUPTS
  320.     OUT    0        ;SWITCH TO ALTERNATE PAGE
  321.     LDA    MODDATP        ;GET DATA BYTE
  322.     OUT    1        ;SWITCH PAGES BACK
  323.     EI            ;RE-ENABLE INTERRUPTS
  324.     RET
  325. ;.....
  326. ;
  327. ;
  328. OSOUT:    DI            ;DISABLE INTERRUPTS
  329.     OUT    0        ;SWITDH TO ALTERNATE PAGE
  330.     STA    MODDATP        ;SEND DATA BYTE
  331.     OUT    1        ;SWITCH PAGES BACK
  332.     EI            ;RE-ENABLE INTERRUPTS
  333.     RET
  334. ;.....
  335. ;
  336. ;
  337. OSTAT:    DI            ;DISABLE INTERRUPTS
  338.     OUT    0        ;SWITCH TO ALTERNATE PAGE
  339.     LDA    MODCTLP        ;GET STATUS BYTE
  340.     OUT    1        ;SWITCH PAGES BACK
  341.     EI            ;RE-ENABLE INTERRUPTS
  342.     RET
  343. ;.....
  344. ;
  345. ;
  346. CDLEN:    EQU    $-BDJ        ;LENGTH OF CODE TO COPY
  347. ;
  348. ;-----------------------------------------------------------------------
  349. ;
  350. ; NOTE:  MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
  351. ;                 0C00H (without Smartmodem)
  352. ;
  353.     END
  354. ;
  355.