Atari XF551 via RS232 mittels winapi unter pb ansprechen
Verfasst: 07.08.2006 00:08
				
				Geschafft!
Es ist mir gelungen die Atari XF551 über RS232 mittels Winapi unter PB anzusprechen.
Ein Projekt nimmt Formen an, dank PB und seiner Transparenz.
Ziel ist es Ataridisketten als Imagedateien auf die PCFestplatte zu kopieren und dazu das Original Ataridrive XF551 (Drive zum 8bit ATARI130XE) zu verwenden.
Der erste Schritt ist getan der Rest ist Fleiß
Einen 8fach Drivesimulator hatte ich schon vor Jahren unter QBX geschrieben. Leider ging er verloren(HD-Crash)
auf ein Neues!
HW besteht aus aus einem Max 232 + Hühnerfutter
RTS simuliert Commandleitung der des seriellen ATARI-Busses
			Es ist mir gelungen die Atari XF551 über RS232 mittels Winapi unter PB anzusprechen.
Ein Projekt nimmt Formen an, dank PB und seiner Transparenz.
Ziel ist es Ataridisketten als Imagedateien auf die PCFestplatte zu kopieren und dazu das Original Ataridrive XF551 (Drive zum 8bit ATARI130XE) zu verwenden.
Der erste Schritt ist getan der Rest ist Fleiß
Einen 8fach Drivesimulator hatte ich schon vor Jahren unter QBX geschrieben. Leider ging er verloren(HD-Crash)
auf ein Neues!
HW besteht aus aus einem Max 232 + Hühnerfutter
RTS simuliert Commandleitung der des seriellen ATARI-Busses
Code: Alles auswählen
Global com1h.l, DCB1.dcb, a.b, outbuffer.s,inbuffer.s, dummy.l
;********************************************************************************************
Procedure open_port() 
 com1h= CreateFile_("COM1:", #GENERIC_READ | #GENERIC_WRITE,0, 0, #OPEN_EXISTING, 0, 0) 
 If handle = #INVALID_HANDLE_VALUE 
  Debug("Couldn't open serial device!") 
 Else 
  
  ct.COMMTIMEOUTS 
  ct\ReadIntervalTimeout = 0 
  ct\ReadTotalTimeoutMultiplier = 0
  ct\ReadTotalTimeoutConstant = 1000
  ct\WriteTotalTimeoutMultiplier = 0 
  ct\WriteTotalTimeoutConstant = 0 
  SetCommTimeouts_(com1h,@ct) 
  DCB1.dcb 
  DCB1\DCBlength=8 
  DCB1\BaudRate=19200 
               ;BPCDD STOIENR AD2345678901234567 
  DCB1\fbits=  %00000100000001000000000000000000 
  DCB1\wReserved=0 
  DCB1\XonLim=2048 
  DCB1\XoffLim=2048 
  DCB1\ByteSize=8 
  DCB1\Parity=#NOPARITY 
  DCB1\StopBits=#ONESTOPBIT 
  DCB1\XonChar=$11 
  DCB1\XoffChar=$13 
  DCB1\ErrorChar=0 
  DCB1\EofChar=0 
  DCB1\EvtChar=0 
  DCB1\wReserved1=0 
  SetCommState_(com1h,@DCB1) 
  PurgeComm_(com1h,#PURGE_TXCLEAR|#PURGE_RXCLEAR) 
  x.l 
  GetCommMask_(com1h,@x) 
  x=0
  SetCommMask_(com1h, 0) 
    Delay(100) 
 EndIf 
EndProcedure 
;********************************************************************************************
Procedure close_port() 
 CloseHandle_(com1h) 
EndProcedure 
; ********************************************************************************************
Procedure.l uns(b.b)
  l.l
  PokeB(@l,PeekB(@b))
  ProcedureReturn l
EndProcedure 
;********************************************************************************************
Procedure main()
open_port()
outbuffer ="abcdef"
PokeB(@outbuffer+0,49)
PokeB(@outbuffer+1,83)
PokeB(@outbuffer+2,0)
PokeB(@outbuffer+3,0)
PokeB(@outbuffer+4,132)
Debug("*******outbuffer**************")
Debug (Str(uns(PeekB(@outbuffer+0))))
Debug (Str(uns(PeekB(@outbuffer+1))))
Debug (Str(uns(PeekB(@outbuffer+2))))
Debug (Str(uns(PeekB(@outbuffer+3))))
Debug (Str(uns(PeekB(@outbuffer+4))))
Debug("******************************")
EscapeCommFunction_(com1h,#SETRTS)
Delay(1)
WriteFile_(com1h,@outbuffer+0,5,@dummy,#Null)
Delay(20)
EscapeCommFunction_(com1h,#CLRRTS)
Delay(10)
EscapeCommFunction_(com1h,#SETRTS)
Delay(1)
WriteFile_(com1h,@outbuffer+0,5,@dummy,#Null)
;WriteFile_(com1h,@outbuffer+1,1,@dummy,#Null)
;WriteFile_(com1h,@outbuffer+2,1,@dummy,#Null)
;WriteFile_(com1h,@outbuffer+3,1,@dummy,#Null)
;WriteFile_(com1h,@outbuffer+4,1,@dummy,#Null)
inbuffer=".............................."
ReadFile_(com1h,@inbuffer,7,@dummy,#Null)  
EscapeCommFunction_(com1h,#CLRRTS)
Debug("*******inbuffer***************")
Debug (Str(uns(PeekB(@inbuffer+0))))
Debug (Str(uns(PeekB(@inbuffer+1))))
Debug (Str(uns(PeekB(@inbuffer+2))))
Debug (Str(uns(PeekB(@inbuffer+3))))
Debug (Str(uns(PeekB(@inbuffer+4))))
Debug (Str(uns(PeekB(@inbuffer+5))))
Debug (Str(uns(PeekB(@inbuffer+6))))
Debug("******************************")
;Debug (Str(uns(PeekB(@inbuffer+7))))
;Debug (Str(uns(PeekB(@inbuffer+8))))
;Debug (Str(uns(PeekB(@inbuffer+9))))
Delay(35)
Close_port()
;MessageRequester("Information", outbuffer +"gesendet"+Chr(13),inbuffer+"empfangen", #PB_MessageRequester_Ok)
EndProcedure
;********************************************************************************************
main()
End