\ serial 10/18/97 gwj \ serial interface for the Pilot require asciiz require systraputil z" Serial Library" zconstant SerLibz variable SerLib# variable serErr \ initialize the serial library : InitSerLib? ( -- f ) SerLib# >abs SerLibz >abs 41146 SysTrap 4drop d0 drop 0= ; InitSerLib? Drop \ do more when I have conditionals \ utility words to simplify the rest : serSysTrap ( # -- ) SerLib# @ swap SysTrap drop ; : serSysTrap2n ( a b # -- n ) serSysTrap 2drop d0 drop ; : serSysTrap4n ( a b c d # -- n ) serSysTrap 4drop d0 drop ; \ The API starts here : serClearErr ( -- ) 43016 serSysTrap ; : serOpen ( dbaud -- err ) 0 43009 serSysTrap 3drop d0 drop ; : serClose ( -- err ) 43010 serSysTrap d0 drop ; \ OS version 1.0 send routines : serSend10A ( absaddr dcnt -- err ) 2swap 43017 serSysTrap4n ; : serSend10 ( addr cnt -- err ) str>lstr serSend10A ; \ OS version 2.0 send routines : serSendA ( absaddr dcnt -- d# err ) 2swap >r >r serErr >abs 2swap r> r> 43031 serSysTrap 4drop @A d0 -rot ; : serSend ( addr cnt -- d# err ) str>lstr serSendA ; : serSendWait ( -- err ) -1L 43018 serSysTrap2n ; \ set timeout for receive commands 2variable SerRecvTO -1L SerRecvTO 2! : serRecvTO! ( dtimeout -- ) SerRecvTO 2! ; : serRecvTO@ ( -- dtimeout ) SerRecvTO 2@ ; \ OS version 1.0 receive routines : serRecv10A ( absaddr dcnt -- err ) 2swap >r >r serRecvTO@ 2swap r> r> 43021 serSysTrap 6drop d0 drop ; : serRecv10 ( addr cnt -- err ) str>lstr serRecv10A ; \ OS version 2.0 receive routines : serRecvA ( absaddr dcnt -- d# err ) 2swap >r >r >r >r SerErr >abs serRecvTO@ r> r> r> r> 43032 serSysTrap 6drop @A d0 rot ; : serRecv ( addr cnt -- d# err ) str>lstr serRecvA ; 2variable templong 0L templong 2! : serRecvCheck ( -- dBytes err ) tempLong >abs 43023 serSysTrap 2@A d0 drop ; : serRecvFlush ( -- ) serRecvTO@ 43024 serSysTrap 2drop ; : serRecvWaitA ( dnum -- err ) serRecvTO@ 2swap 43023 serSysTrap4n ; : serRecvWait ( dnum -- err ) 0 serRecvWaitA ; \ warning: bug in OS v2.0 : serSetRecvBuffA ( absaddr dcnt -- err ) 2swap 43025 serSysTrap4n ; : serSetRecvBuff ( addr cnt -- err ) str>lstr serSetRecvBuffA ; variable ctsOn variable dsrOn : serGetStatus ( -- cts dsr err ) dsrOn >abs ctsOn >abs 43015 serSysTrap4n ctsOn c@ dsrOn c@ rot ; 12 constant serSettingsSize : serSettings: ( ; name -- ) create serSettingsSize 0allot ; 0 +constant }serSet.baud} 4 +constant }serSet.flags} 8 +constant }serSet.ctsTO} : serGetSettings ( 'settings -- err ) >abs 43013 serSysTrap2n ; : serSetSettings ( 'settings -- err ) >abs 43014 serSysTrap2n ;