Author Topic: Serial I/O communications (terminal) code  (Read 1071 times)

jimg

  • Member
  • **
  • Posts: 196
Serial I/O communications (terminal) code
« on: June 02, 2017, 02:18:51 AM »
I've been trying to find some code to write a terminal program to embed in an app I want to write.  After staring at various version of C stuff for a week, I think I'm ready to start.  I read a lot of rhetoric about different ways to implement this.  The problem seems to be that windows nt doesn't have any simple callbacks for i/o routines.  Anyway, I think I'm going to do the 1995 version of things, based upon starting two threads, one to read and one to write (https://msdn.microsoft.com/en-us/library/ms810467.aspx).  It seems the simplest (although, not what I would call simple).

Before I start trying to convert C, I thought I'd see if someone already has masm code for this stashed away somewhere, or if anyone has some other masm code for a terminal program or just some thoughts they would like to share.

anunitu

  • Member
  • ****
  • Posts: 919
Re: Serial I/O communications (terminal) code
« Reply #1 on: June 02, 2017, 04:34:53 AM »
You might try the wayback machine. There is a LOT of data and old sites now gone. If you are lucky,you might find some old code..I think a lot of the old protocols were done in assembly.

Check here.
https://en.wikipedia.org/wiki/List_of_file_transfer_protocols

Wayback is here.
http://archive.org/web/

Siekmanski

  • Member
  • *****
  • Posts: 1145
Re: Serial I/O communications (terminal) code
« Reply #2 on: June 02, 2017, 04:39:28 AM »
Try this one, if it suits your needs then i'll clean up the code and do some dutch english translations.

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #3 on: June 02, 2017, 06:21:32 AM »
Thanks. Looks like it worked :t
I'd love to have the source!

Siekmanski

  • Member
  • *****
  • Posts: 1145
Re: Serial I/O communications (terminal) code
« Reply #4 on: June 02, 2017, 06:27:26 AM »
Found a later version, check if it works for you. Then I'll translate this one for you.

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #5 on: June 02, 2017, 08:52:29 AM »
Works good, I really appreciate it :biggrin:

Siekmanski

  • Member
  • *****
  • Posts: 1145
Re: Serial I/O communications (terminal) code
« Reply #6 on: June 02, 2017, 10:10:22 AM »
Pffff, done translating to english...  :biggrin:
Here are the sources, have fun with it.

Are you going to use this to communicate with the WiFi esp8266 module?

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #7 on: June 02, 2017, 10:25:24 AM »
That's the plan.  Thanks much, I really appreciate it :t

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #8 on: June 02, 2017, 12:56:28 PM »
I put this here rather than the campus since it came from our good friend Siekmanski's code he just gave us.

I've never used RECORD before, so I spent an hour trying to figure this out.  Other than being entered in the reverse order from what I thought it would be, I don't see anything wrong with the code but I'm getting an error.

 DCB_New                 DCB <?>
 ;  this bitrecord def is from windows.inc
; BITRECORD RECORD fBinary:1,fParity:1,fOutxCtsFlow:1,fOutxDsrFlow:1,fDtrControl:2,fDsrSensitivity:1,
;  fTXContinueOnXoff:1,fOutX:1,fInX:1,fErrorChar:1,fNull:1,fRtsControl:2,fAbortOnError:1,fDummy2:17

        mov     DCB_New.fbits,BITRECORD<NULL,FALSE,RTS_CONTROL_HANDSHAKE,FALSE,FALSE,\
                FALSE,FALSE,FALSE,FALSE,DTR_CONTROL_HANDSHAKE,TRUE,TRUE,NULL,TRUE>

 gives:  Error A2150: Missing operator in expression

I've counted 20 times at least, and it looks like the right number of entries.  Anyone see what's wrong with this?  I'm getting the same complaint from all the assemblers from 615 to uasm.

anunitu

  • Member
  • ****
  • Posts: 919
Re: Serial I/O communications (terminal) code
« Reply #9 on: June 02, 2017, 01:04:46 PM »
Wondering if that backslash is supposed to continue to the next line,might it need to be a forward slash? Might need a space before the BS,might be seeing it as a divide because of the comma first.

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #10 on: June 02, 2017, 02:22:11 PM »
Nope.  All on one line made no difference.

Also tried:
xxxttt BITRECORD  < TRUE, NULL, TRUE, TRUE, DTR_CONTROL_HANDSHAKE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, RTS_CONTROL_HANDSHAKE, FALSE, NULL >

        mov     DCB_New.fbits,xxxttt

and got : Error A2049: Invalid instruction operands

I had to reverse the order in this case because it complained about sizes and it was obvious it was just backward.


p.s.

I really don't need to change all this stuff, so I just copied the original DCB and commented this whole section out and it works just fine.   I would, however, like to know the correct way to code this for future reference.  For now, I'm just pressing on.

Siekmanski

  • Member
  • *****
  • Posts: 1145
Re: Serial I/O communications (terminal) code
« Reply #11 on: June 02, 2017, 07:22:21 PM »
Yeah, it's a bit confusing but the BITRECORD in masm needs to be in reversed order as below. ( it's different as in C )

\ is continue on the next line.

; FlowControle == None
        mov     DCB_New.fbits,BITRECORD <\
                NULL,\  ; fDummy2:17
                FALSE,\ ; fAbortOnError:1
                RTS_CONTROL_DISABLE,\   ; fRtsControl:2
                FALSE,\ ; fNull:1
                FALSE,\ ; fErrorChar:1
                FALSE,\ ; fInX:1
                FALSE,\ ; fOutX:1
                FALSE,\ ; fTXContinueOnXoff:1
                FALSE,\ ; fDsrSensitivity:1
                DTR_CONTROL_DISABLE,\   ; fDtrControl:2
                FALSE,\ ; fOutxDsrFlow:1
                FALSE,\ ; fOutxCtsFlow:1
                NULL,\  ; fParity:1
                TRUE>   ; fBinary:1 Always TRUE !!!

        or      DCB_New.fbits,00000000000000000000000000000010b   ; here I set the right bit for: "fParity"

You can set every bit by hand of course...

mineiro

  • Member
  • ***
  • Posts: 365
Re: Serial I/O communications (terminal) code
« Reply #12 on: June 02, 2017, 10:58:46 PM »
I would, however, like to know the correct way to code this for future reference.
I've never used RECORD before,
hello jimg, below is a simple example about how to deal with record, not sure if helps but this is my intention.

descritor RECORD one:1=0,two:3,three:2,four:2      ;0 ??? ?? ??

.data
descr_1 descritor <>            ;0 ??? ?? ??
descr_2 descritor <1,2,3,2>         ;1 010 11 10

.code
or descr_1,( 3 shl two + 1 shl three)      ;0 011 01 ??
mov al,descr_2         ;1 010 11 10
mov bl,width two      ;bits size of field two == 3
and al,mask two         ;mask to deal with that field == 0 111 00 00
mov cl,two         ;displacement of field two inside that record structure == 2+2(four+three) == 4
shr al,cl         ;rotating to get only that value, al=2
I'd rather be this ambulant metamorphosis than to have that old opinion about everything

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #13 on: June 02, 2017, 11:38:31 PM »
Thanks mineiro.

Everyone else, my apologies.   The Record stuff works in ml614 and ml615.  My system for switching between ml and xxwasm was broken, the error is just in wasm and decendants.

jimg

  • Member
  • **
  • Posts: 196
Re: Serial I/O communications (terminal) code
« Reply #14 on: June 03, 2017, 04:40:49 AM »
S-

Using masm 6.15-

 this line is not acceptable, and is the same order as in the program.

yy1 BITRECORD <NULL,FALSE,RTS_CONTROL_HANDSHAKE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,DTR_CONTROL_HANDSHAKE,TRUE,TRUE,NULL,TRUE>

 I get the errors-
 : error A2071:  : fOutxCtsFlow
 : error A2071:  : fErrorChar
   So it knows the sizes are wrong


 this is is accepted, so masm want them specified in the same order as the record definition.

yy4 BITRECORD <TRUE,0,TRUE,TRUE,DTR_CONTROL_HANDSHAKE,0,0,0,0,0,0,RTS_CONTROL_HANDSHAKE,0,0>


   Both of these lines are acceptable to Masm, which means it is a masm bug,
     it should have caught the size error in the first line here also.

mov DCB_New.fbits,BITRECORD<NULL,FALSE,RTS_CONTROL_HANDSHAKE,FALSE,FALSE,\
                FALSE,FALSE,FALSE,FALSE,DTR_CONTROL_HANDSHAKE,TRUE,TRUE,NULL,TRUE>
               
mov DCB_New.fbits,BITRECORD<TRUE,0,TRUE,TRUE,DTR_CONTROL_HANDSHAKE,0,0,0,0,0,0,RTS_CONTROL_HANDSHAKE,0,0>


       In fact, if I try to force an error by entering a value too big, like this-

mov     DCB_New.fbits,BITRECORD<132000,FALSE,RTS_CONTROL_HANDSHAKE,FALSE,FALSE,\
                FALSE,FALSE,FALSE,FALSE,DTR_CONTROL_HANDSHAKE,TRUE,TRUE,NULL,TRUE>
               
mov DCB_New.fbits,BITRECORD<TRUE,0,TRUE,TRUE,DTR_CONTROL_HANDSHAKE,0,0,0,0,0,0,RTS_CONTROL_HANDSHAKE,0,132000>

      Both are still accepted by masm.


   I really think the second one is the correct one, and the ones in the program are incorrectly reversed,
     but I can't get the program to fail either way, so I don't know how to test it.