home *** CD-ROM | disk | FTP | other *** search
/ Sound Sensations! / sound_sensations.iso / midifile / fserial / serial.txt
Text File  |  1989-02-04  |  3KB  |  80 lines

  1.     The follwowing code is written for MaxFORTH and a 68HC11 processor 
  2. connected to a 6552 dual serial port chip.  The 6552 is mapped into the 
  3. address space of the processor.  Similar code is used for a 6551 chip 
  4. although the registers are a bit different.  In fact an 8251 INTEL serial 
  5. chip wowuld be used in about the same manner.  The registers are different, 
  6. but polled operation would be done by monitoring the transmitter ready and 
  7. received data flags.  The handshaking is done in TDRF? and RDRF? ( read data 
  8. ready flag?)
  9.  
  10.  
  11.  
  12. ( Serial port S1                    June 2, 1988
  13. ( modified from code by RANDY DUMSE for 6551 chip by KEN BUTTERFIELD
  14. ( software polled half duplex operation 
  15. ( do not hook int to processor for this example 
  16. ( designed to talk to 1/2 of a 6552 dual serial port adapter
  17. (  second half would use A404, A405, A407 for register addresses
  18. (  register addresses are mapped into the memory address space for 68hc11
  19.  
  20. (  Added keyboard interrupt in S-KEY    7-12-88
  21.  
  22. HEX
  23.  
  24. A403 CONSTANT S-DATA
  25. A400 CONSTANT S-STATUS
  26. A401 CONSTANT S-CONTROL
  27. 40   CONSTANT S-WF
  28. 01   CONSTANT S-RF
  29.  
  30. : S-INIT  ( init davidson port ( s1, or s2 )
  31.    E0 S-CONTROL C! 0C S-CONTROL C! 7F S-STATUS C! ;
  32.                  ( ODD PARITY, DISABLED, ) 
  33.                  ( RTS HI, DTR HI, 7 BITS ) 
  34.                  ( 1 STOP BITS, NO  ECHO )
  35.                  ( 9600 BAUD )
  36.                  ( DISABLE ALL INTERRUPTS AND INIT )
  37.  
  38.  
  39. : TDRF? S-STATUS C@ S-WF AND ;
  40. : RDRF? S-STATUS C@ S-RF AND ;
  41. : S-EMIT BEGIN TDRF? UNTIL S-DATA C! ;
  42. : S-KEY 
  43.    BEGIN 
  44.       ?TERMINAL IF ABORT THEN
  45.       RDRF? 
  46.    UNTIL 
  47.    S-DATA C@ 
  48. ;
  49. : S-?TERMINAL RDRF? ;
  50. : S-TYPE DUP IF OVER + SWAP DO I C@ 7F AND S-EMIT LOOP ELSE 2DROP THEN ;
  51. : S-. S->D SWAP OVER DABS <# #S SIGN #> S-TYPE ;
  52. : S-CR D S-EMIT ;
  53. : S-SPACE 20 S-EMIT ;
  54. : S-EXPECT ( ADDR,COUNT) 
  55. ( FORMS COUNTED STRING AT ADDR, TERMINATED WITH SPACE TO BE USED WITH NUMBER )
  56.    2DUP BLANK
  57.    1 - 1 DO I OVER C!
  58.    S-KEY DUP 0D = IF DROP LEAVE
  59.    ELSE OVER I + C! THEN 
  60.    LOOP DROP ;
  61.  
  62. : BYPASS  ( CONNECT MAIN TERMINAL TO EXTERNAL SERIAL PORT )
  63.     S-INIT BEGIN ?TERMINAL IF KEY S-EMIT THEN
  64.              S-?TERMINAL IF S-KEY EMIT THEN
  65.            AGAIN ;
  66.  
  67.  
  68. : S-ECHO  ( echo the name of word defined by this command to the port )
  69.     <BUILDS LATEST , DOES> 
  70.     @ COUNT 7F AND S-TYPE  S-SPACE 
  71. ;
  72.  
  73.  
  74. : S-DRAIN ( Remove characters from serial stream until CR )
  75.    BEGIN  (  used to help handshaking with remote system )
  76.       S-KEY D = 
  77.    UNTIL
  78. ;
  79.  
  80.