home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol170 / m7aj-1.aqm / M7AJ-1.ASM
Encoding:
Assembly Source File  |  1985-02-10  |  15.8 KB  |  543 lines

  1.  
  2. ; M7AJ-1.ASM Apple J-CAT modem overlay file for MDM7xx - 11/11/83
  3. ;
  4. ;              NOTICE
  5. ;
  6. ; This file is a patch of the M712AP.ASM overlay designed to allow auto-
  7. ; dialing through a Novation J-Cat modem and to provide for more than
  8. ; one "logon" message.
  9. ;
  10. ; Some of the patches here rely on addresses within the main body of the
  11. ; MDM7xx12.COM file.  They are correct addresses for the copy of MDM712
  12. ; that I downloaded from Oxgate in October 1983.  However, there is no
  13. ; guarantee that those addresses will be the same if the main program is
  14. ; updated.
  15. ;
  16. ; The equates and patches in this file are set up for the combination of
  17. ; an Apple Super Serial Card in slot 2, with a Novation J-Cat modem.  The
  18. ; J-cat is 300-baud only, so I have eliminated the routine for changing
  19. ; baud rate that was in the original Apple overlay.
  20. ;
  21. ; In order to dial with the J-Cat, the modem's OHK line (pin 7 on the
  22. ; modem's card-edge connector; blue unconnected line in the DB25 con-
  23. ; nector provided with the modem) must be connected to the Apple's
  24. ; AN(0) annunciator (pin 15 on the game I/O socket). {Actually, it
  25. ; could be connected to one of the other annunciator ports, if the
  26. ; "onhook" and "offhook" equates below are changed to refer to that
  27. ; annunciator.}
  28. ;
  29. ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  30. ;  
  31. ; This overlay file enables Apple II computers with the Apple Super
  32. ; Serial card and external modem to use the MDM712 phone modem program.
  33. ; It also supports the following Apple modem configurations:
  34. ;
  35. ;    a) CCS 7710 serial interface and external modem
  36. ;    b) SSM serial interface and external modem
  37. ;    c) Apple communications interface and external modem
  38. ;
  39. ; You will want to look this file over carefully. There are a number of
  40. ; options that you can use to configure the program to suit your taste.
  41. ; Much of the information contained here is not in the MDM712.ASM file.
  42. ;
  43. ; Edit this file for your preferences then follow the "TO USE:" example.
  44. ;
  45. ; Use the "SET" command to change the baudrate when desired.  It starts
  46. ; out at 300 baud when the program is first called up.
  47. ;
  48. ;
  49. ;    TO USE: First edit this file filling in answers for your own
  50. ;        equipment.  Then assemble with ASM.COM or equivalent
  51. ;        assembler.  Then use DDT to overlay the the results
  52. ;        of this program to the original .COM file:
  53. ;
  54. ;        A>DDT MDM7xx.COM
  55. ;        DDT VERS 2.2
  56. ;        NEXT  PC
  57. ;        4300 0100
  58. ;        -IM7AJ-1.HEX        (note the "I" command)
  59. ;        -R            ("R" loads in the .HEX file)
  60. ;        NEXT  PC
  61. ;        4300 0000
  62. ;        -G0            (return to CP/M)
  63. ;        A>SAVE 66 MDM7xx.COM    (now have a modified .COM file)
  64. ;
  65. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  66. ;
  67. ; 11/11/83 - Renamed to M7AJ-1.ASM, no changes    - Irv Hoff
  68. ; 10/06/83 - Multiple logon messages        - D. W. Walker
  69. ; 10/04/83 - J-Cat dialing routines added    - D. W. Walker
  70. ; 07/27/83 - Renamed to work with MDM712    - Irv Hoff
  71. ; 02/12/83 - Used MDM703CF to make this file
  72. ;         for Apple computers using a var-
  73. ;         iety of serial interface cards
  74. ;         with external modem.        - Bruce Kargol
  75. ;
  76. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  77. ;
  78. BELL:        EQU    07H    ;bell
  79. CR:        EQU    0DH    ;carriage return
  80. ESC:        EQU    1BH    ;escape
  81. LF:        EQU    0AH    ;linefeed
  82. ;
  83. YES:        EQU    0FFH
  84. NO:        EQU    0
  85. ;
  86. ;
  87. CCS:        EQU    NO    ;YES for CCS 7710
  88. COMCARD:    EQU    NO    ;YES for Apple comcard
  89. SSC:        EQU    YES    ;YES for Super Serial Card
  90. SSM:        EQU    NO    ;YES for SSM serial card
  91. ;
  92.          IF    CCS
  93. MODDATP:    EQU    0E0A1H    ;data port of CCS 7710
  94. MODCTL1:    EQU    0E0A0H    ;status port of CCS 7710
  95.           ENDIF        ;endif CCS
  96. ;
  97.          IF    COMCARD
  98. MODDATP:    EQU    0E0AFH    ;data port of Comcard
  99. MODCTL1:    EQU    0E0AEH    ;status port of Comcard
  100.          ENDIF        ;endif Comcard
  101. ;
  102.          IF    SSM
  103. MODDATP:    EQU    0E0A5H    ;data port of SSM
  104. MODCTL1:    EQU    0E0A4H    ;status port of SSM
  105.          ENDIF        ;endif SSM
  106. ;
  107.          IF    SSC
  108. MODDATP:    EQU    0E0A8H    ;data port of Apple Super Serial Card 
  109. MODCTL1:    EQU    0E0A9H    ;modem status port of Super Serial Card
  110. MODRCVB:    EQU    08H     ;bit to test for received data
  111. MODRCVR:    EQU    08H     ;modem receive ready
  112. MODSNDB:    EQU    10H    ;bit to test for ready to send
  113. MODSNDR:    EQU    10H    ;modem send ready bit
  114.          ENDIF        ;endif SSC
  115. ;
  116. ;
  117. ; Apple status bit equates for CCS, Comcard and SSM
  118. ;
  119.          IF    NOT SSC
  120. MODSNDB:    EQU    02H    ;bit to test for send
  121. MODSNDR:    EQU    02H    ;value when ready
  122. MODRCVB:    EQU    01H    ;bit to test for receive
  123. MODRCVR:    EQU    01H    ;value when ready
  124.          ENDIF        ;not SSC
  125. ;
  126. ;
  127. ; We have software control over the Super Serial Card so allow INITMOD
  128. ; SETUPR routines.
  129. ;
  130. ;
  131.         ORG    100H
  132. ;
  133. ;
  134. ; Change the clock speed to match your equipment
  135. ;
  136.         DS    3    ;(for  "JMP   START" instruction)
  137. ;
  138. ; J-Cat dialing routines patched over PMMI routines {DWW 10-04-83}
  139. ;
  140. PMMIMODEM:    DB    YES    ;yes=PMMI S-100 Modem            103H
  141. SMARTMODEM:    DB    NO    ;yes=HAYES Smartmodem, no=non-pmmi    104H
  142. TOUCHPULSE:    DB    'T'    ;T=touch, P=pulse (Smartmodem-only)    105H
  143. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  144.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  145. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  146.                 ;6=2400 7=4800 8=9600 9=19200 default
  147. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  148.                 ;default time to send character in ter-
  149.                 ;minal mode file transfer for slow BBS.
  150. CRDLY:        DB    3    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  151.                 ;default time for extra wait after CRLF
  152.                 ;in terminal mode file transfer
  153. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  154. SETUPTST:    DB    NO    ;yes=user-added Setup routine        10BH
  155. SCRNTEST:    DB    YES    ;Cursor control routine         10CH
  156. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  157.                 ;no=resend a record after a valid NAK
  158. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  159. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  160. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  161. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  162. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  163. ADDLF:        DB    NO    ;no=no LF after CR to send file in'    113H
  164.                 ;terminal mode (added by remote echo)
  165. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  166. TRANLOGON:    DB    YES    ;yes=allow transmission of logon    115H
  167.                 ;write logon sequence at location LOGON
  168. SAVCCP:        DB    NO     ;yes=do not overwrite CCP        116H
  169. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  170.                 ;no=external command if EXTCHR precedes
  171. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  172. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  173. XOFFTST:    DB    NO    ;yes=checks for XOFF from remote while    11AH
  174.                 ;sending a file in terminal mode
  175. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  176.                 ;sending a file in terminal mode
  177. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  178. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  179. EXTRA1:        DB    0    ;for future expansion            11EH
  180. EXTRA2:        DB    0    ;for future expansion            11FH
  181. BRKCHR:        DB    '@'-40H    ;^@ = Send 300 ms. break tone        120H
  182. NOCONNCT:    DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  183. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  184. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  185. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  186. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  187. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        126H
  188. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        127H
  189.         DS    2        ;                128H
  190. ;
  191. IN$MODCTL1:    LDA    MODCTL1 ! RET    ;in modem control port        12AH
  192.         DS    6
  193. OUT$MODDATP:    STA    MODDATP ! RET    ;out modem data port        134H
  194.         DS    6
  195. IN$MODDATP:    LDA    MODDATP ! RET    ;in modem data port        13EH
  196.         DS    6        ;spares if needed
  197. ;
  198. ANI$MODRCVB:    ANI    MODRCVB ! RET    ;bit to test for receive ready    148H
  199. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;value of rcv. bit when ready    14BH
  200. ANI$MODSNDB:    ANI    MODSNDB ! RET    ;bit to test for send ready    14EH
  201. CPI$MODSNDR:    CPI    MODSNDR ! RET    ;value of send bit when ready    151H
  202.         DS    12        ;PMMI only calls        154H
  203. ;
  204. LOGONPTR:    DW    LOGON        ;for user message.        160H
  205.         DS    6        ;                162H
  206. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  207. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  208.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    16EH
  209.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  210.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  211. JMP$SETUPR:    JMP    SETUPR        ;                177H
  212. JMP$SPCLMENU:    JMP    SPCLMENU    ;                17AH
  213. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  214. JMP$BREAK:    JMP    SENDBRK        ;                180H
  215. ;
  216. ;
  217. ; Do not change the following six lines.
  218. ;
  219. JMP$ILPRT:    DS    3        ;                183H
  220. JMP$INBUF    DS    3        ;                186H
  221. JMP$INLNCOMP:    DS    3        ;                189H
  222. JMP$INMODEM    DS    3        ;                18CH
  223. JMP$NXTSCRN:    DS    3        ;                18FH
  224. JMP$TIMER:    DS    3        ;                192H
  225. ;
  226. ;
  227. CLREOS:        CALL    JMP$ILPRT    ;                195H
  228. EOSCLR:        DB    esc,'Y',0,0,0    ;                198H
  229.         RET            ;                19DH
  230. ;
  231. CLRSCRN:    CALL    JMP$ILPRT    ;                19EH
  232.         DB    esc,'*',0,0,0    ;                1A1H
  233.         RET            ;                1A6H
  234. ;
  235. SYSVER:        CALL    JMP$ILPRT    ;                1A7H
  236.         DB    'Version for Apple II with J-Cat modem'
  237.         DB    CR,LF,0
  238.         RET
  239. ;.....
  240. ;
  241. ;
  242. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  243. ;     end of your last routine should terminate by 0400H (601 bytes
  244. ;     available after start of SYSVER) if using the Hayes Smartmodem
  245. ;     or by address 0C00H (2659 bytes) otherwise.
  246. ;
  247. ;
  248. ; You can put in a message at this location which can be called up with
  249. ; CTL-O if TRANLOGON has been set TRUE.  You can put in several lines if
  250. ; desired.  End with a 0.
  251. ;
  252. ;
  253. ; Pad each message with nulls to make 20 bytes, so new logon routine can
  254. ; find the right one
  255. ;
  256. ;   ^L1 will send first message to modem,
  257. ;   ^L2 will send second message, and so on
  258. ;
  259. LOGON:    DB    'The Source......',CR,0,0,0
  260.     DB    'Compuserve...',CR,0,0,0,0,0,0
  261.     DB    'Etc...',CR,0,0,0,0,0,0,0,0,0,0,0,0,0
  262. ;
  263. NUMLOGS:EQU    3        ;number of valid logon messages
  264. STAT:    EQU    2595H        ;keypress routine
  265. GETCHR:    EQU    25A0H        ;get typed char
  266. TYPE:    EQU    25B4H        ;send char to console
  267. ;
  268. LOGSELCT:
  269.     PUSH    B
  270.     PUSH    D
  271.     LXI    H,LOGON
  272.     LXI    D,20
  273. ;
  274. KYLP:    CALL    STAT        ;wait for next keypress
  275.     JZ    KYLP
  276.     CALL    GETCHR        ;get key
  277.     CPI    '1'        ;in range?
  278.     JC    NOGOOD
  279.     CPI    NUMLOGS+'0'+1
  280.     JNC    NOGOOD
  281.     SUI    '0'        ;in range, make it binary
  282.     MOV    C,A
  283. ;
  284. FINDLP:    DCR    C        ;count down    
  285.     JZ    DONE
  286.     DAD    D        ;not found yet, add 20 to hl
  287.     JMP    FINDLP
  288. ;
  289. NOGOOD:    MVI    A,BELL
  290.     CALL    TYPE
  291. ;
  292. DONE:    POP    D
  293.     POP    B
  294.     RET            ;return with hl pointing to log message
  295. ;.....
  296. ;
  297. ;
  298. ; Values for Novation J-Cat using Ann(0) as offhook line
  299. ;
  300. ONHOOK:    EQU    0E058H
  301. OFFHOOK:EQU    0E059H
  302. COMMAND:EQU    MODCTL1+1    ;ssc command register
  303. DTR:    EQU    0BH        ;dtr, xmit on(rts low), irq disabled
  304. ;
  305. ;
  306. ; Send break through SSC -- 233 millisecond space tone
  307. ;
  308. SENDBRK:LDA    COMMAND    
  309.     PUSH    PSW        ;save register content
  310.     ORI    0CH        ;set bits 2,3
  311.     STA    COMMAND     ;break line
  312.     PUSH    B
  313.     LXI    B,233        ;wait 233 msec
  314.     CALL    DELAY
  315.     POP    B
  316.     POP    PSW        ;get original register
  317.     STA    COMMAND     ;restore it
  318.     RET
  319. ;.....
  320. ;
  321. ;
  322. ; You can add your own routine here to set DTR low and/or send a break
  323. ; tone to disconnect.
  324. ;
  325. GOODBYE:STA    ONHOOK
  326.     PUSH    B
  327.     LXI    B,25        ;on hook for 25 msec
  328.     CALL    DELAY
  329.     POP    B
  330.     STA    OFFHOOK
  331.     PUSH    B
  332.     LXI    B,20        ;off hook for 20 msec
  333.     CALL    DELAY
  334.     POP    B
  335.     STA    ONHOOK        ;final disconnect
  336.     RET
  337. ;.....
  338. ;
  339. ;
  340. ; ---->    DELAY: Wait for the number of millisecsonds in B,C
  341. ;
  342. DELAY:    PUSH    D        ;save d,e
  343.     INR    B        ;bump b for later dcr
  344. ;
  345. DELAY1    MVI    E,126        ;delay count for 1 millisec (apple z80
  346.                 ;   clock-2.041 mhz.)
  347. DELAY2:    DCR    E        ;count
  348.     JNZ    DELAY2        ;  down
  349.     DCR    C        ;more millisecs?
  350.     JNZ    DELAY1        ;  yes
  351.     DCR    B        ;no - more in hi byte?
  352.     JNZ    DELAY1        ;  yes
  353.     POP    D        ;  no,    restore d,e
  354.     RET
  355. ;.....
  356. ;
  357. ;
  358. ; The following address is used to set data bits, parity, stop bits
  359. ; and baud rate on the Super Serial Card.
  360. ;
  361. MODDLL:    EQU    MODCTL1+2    ;ssc acia control register
  362. ;
  363. ;
  364. ; End of SSC specific equates for initialization.
  365. ; The following is used to initialize the Apple SSC on execution of the
  366. ; program.
  367. ;
  368. INITMOD:MVI    A,1        ;default transfer time to 300
  369.     STA    MSPEED
  370.     MVI    A,DTR
  371.     STA    COMMAND
  372.     LDA    MODDLL        ;current baudrate from moddll
  373.     ANI    0F0H        ;zero the last 4 bits
  374. ;
  375. INITMOD1:
  376.     ORI    06H        ;get default baudrate (300)
  377.     ANI    9FH        ;set 8 data bits
  378.     ANI    7FH        ;set 1 stop bit
  379.     STA    MODDLL        ;store default baudrate
  380.     RET
  381. ;.....
  382. ;
  383. ;
  384. ; Changes the modem baud rate with set command.
  385. ;
  386. SETUPR: JMP    INITMOD
  387. ;
  388. ; J-Cat is 300 baud only -- no need to change
  389. ;
  390. ;
  391. BAUDBUF:DW    10,0        ;tells clearbuf routine it can..
  392.     DS    10        ;..clear next 10 bytes
  393. ;
  394. ;-----------------------------------------------------------------------
  395. ;
  396. ; The following routine can be used to display commands on the screen
  397. ; of interest to users of this equipment.
  398. ;
  399. SPCLMENU: RET
  400. ;
  401. ;-----------------------------------------------------------------------
  402. ;
  403. ;
  404. ; NOTE:  MUST TERMINATE PRIOR TO 0400H (with Smartmodem)
  405. ;                 0C00H (without Smartmodem)
  406. ;
  407. ;-----------------------------------------------------------------------
  408. ;
  409. ; J-Cat Dialing Routines
  410. ;
  411. ; The following patches adapt the exisiting PMMI dialing routines
  412. ; (located at 0400H) in MDM712.COM to dial through the Novation J-Cat
  413. ; modem, if the modem's OHK line is electrically connected to the AN(0)
  414. ; pin of the Apple game I/O port.
  415. ;
  416. ; Sensing of the dial tone and ring signals is not implemented in this
  417. ; version.  In theory, that can be accomplished by connecting the J-Cat
  418. ; PLS line to one of the Apple's button inputs (or possibly the cassette
  419. ; input).
  420. ;
  421. NOCNCT:    EQU    0593H        ;no connection made
  422. CONNCTD:EQU    05F4H        ;phone connected
  423. CKCARR:    EQU    088AH        ;check for carrier
  424. ;
  425. ;
  426. ; Wait for carrier
  427. ;
  428.     ORG    0577H
  429. ;
  430.     MVI    D,20H        ;mask for carrier detected bit
  431.     MVI    C,96H        ;limit time waiting for carrier
  432.     CALL    CKCARR
  433.     JNC    CONNCTD
  434.     CALL    HANGUP
  435.     JMP    NOCNCT
  436. ;
  437. ;
  438. ; Dial a digit
  439. ;
  440.     ORG    0679H
  441. ;
  442. PULSE:    PUSH    B
  443.     STA    ONHOOK
  444.     LXI    B,61        ;pulse
  445.     CALL    DELAY
  446.     STA    OFFHOOK
  447.     LXI    B,39        ;delay between pulses
  448.     CALL    DELAY
  449.     POP    B
  450.     DCR    C        ;any more pulses?
  451.     JNZ    PULSE        ;yes, do them
  452.     LXI    B,300        ;300-millisec delay between digits
  453.     CALL    DELAY
  454.     RET
  455. ;.....
  456. ;
  457. ;
  458. ; Wait 2 seconds for dial tone
  459. ;
  460.     ORG    06F9H    
  461. ;
  462.     MVI    A,DTR
  463.     STA    MODCTL1        ;enable modem
  464.     STA    OFFHOOK        ;connect phone
  465.     LXI    B,2000
  466.     CALL    DELAY
  467.     ORA    A        ;clear carry
  468.     RET
  469. ;.....
  470. ;
  471. ;
  472. ; Hang up phone
  473.  
  474.     ORG    076EH
  475.  
  476. ;
  477. HANGUP:    JMP    GOODBYE
  478. ;
  479. ;    
  480. ; Check for carrier
  481. ;
  482.     ORG    088FH
  483. ;        
  484.     LDA    MODCTL1     ;get modem status
  485. ;    
  486. ;        
  487. ; Patch out PMMI menu
  488. ;
  489.     ORG    08B1H
  490. ;
  491.     RET
  492. ;.....
  493. ;
  494. ;
  495. ; Number library
  496. ;
  497.     ORG    0C00H
  498. ;
  499.     DB    'A=The Source..............292-0600'             
  500.     DB    'B=Compuserve..............890-0232'             
  501.     DB    'C=A.P.P.L.E. Crate..1-206-935-9119'             
  502.     DB    'D=Oxgate............1-804-898-7493'             
  503.     DB    'E=Pirates Harbor..........720-3600'             
  504.     DB    'F=Termexec................863-0282'             
  505.     DB    'G=................................'             
  506.     DB    'H=................................'             
  507.     DB    'I=................................'             
  508.     DB    'J=................................'             
  509.     DB    'K=................................'             
  510.     DB    'L=................................'             
  511.     DB    'M=................................'             
  512.     DB    'N=................................'             
  513.     DB    'O=................................'             
  514.     DB    'P=................................'             
  515.     DB    'Q=................................'             
  516.     DB    'R=................................'             
  517.     DB    'S=................................'             
  518.     DB    'T=................................'             
  519.     DB    'U=................................'             
  520.     DB    'V=................................'             
  521.     DB    'W=................................'             
  522.     DB    'X=................................'             
  523.     DB    'Y=................................'             
  524.     DB    'Z=................................'             
  525. ;
  526. ;
  527. ; Patch out PMMI-specific routines, etc.
  528. ;
  529.     ORG    0FD5H
  530. ;
  531.     CNZ    JMP$INITMOD
  532.     ORG    14EDH
  533.     CALL    JMP$INITMOD
  534.     ORG    18A9H        ;patch call to logon select
  535.     CALL    LOGSELCT
  536.     ORG    1AEAH
  537.     JMP    1807H        ;use break routine from this file
  538. ;.....
  539. ;
  540. ;
  541.     END
  542.  
  543.