?login_element?

Subversion Repositories NedoOS

Rev

Rev 1437 | Rev 1754 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. MODULE OS_NETSOCKET
  2. PUBLIC OS_NETSOCKET
  3. #include "sysdefs.asm"
  4. RSEG CODE
  5.  
  6. OS_NETSOCKET:  
  7. ;D - AF_INET
  8. ;E - (0x01 tcp/ip, 0x02 icmp, 0x03 udp/ip
  9. ;------
  10. ;L - SOCKET
  11. ;A - ErrNo
  12.         push bc
  13.         ld l,0x01
  14.         ld c, CMD_WIZNETOPEN
  15.         ex af,af'
  16.         push ix
  17.         push iy
  18.         call BDOS
  19.         pop iy
  20.         pop ix
  21.         pop bc
  22.         ld h, l
  23.         ld l, a
  24.        
  25.         ret
  26. ENDMOD
  27.  
  28. MODULE OS_NETCONNECT
  29. PUBLIC OS_NETCONNECT
  30. #include "sysdefs.asm"
  31. RSEG CODE
  32.  
  33. OS_NETCONNECT: 
  34. ;A  - Socket
  35. ;DE - Pointer to adrstruct
  36. ;------
  37. ;L - <0 err
  38. ;H - ErrNo
  39. ;CMD_WIZNETOPEN=0xdb ;A=SOCKET, L=subfunction (see sys_h.asm)
  40.         push bc
  41.         ld a, e
  42.         ld d, b
  43.         ld e, c
  44.         ex af,af'
  45.         ld c, CMD_WIZNETOPEN
  46.         ld l,0x03
  47.         push ix
  48.         push iy
  49.         call BDOS
  50.         pop iy
  51.         pop ix
  52.         ld h, l
  53.         LD l, a
  54.         pop bc
  55.         ret
  56. ENDMOD
  57.  
  58. MODULE OS_WIZNETREAD
  59. PUBLIC OS_WIZNETREAD
  60. #include "sysdefs.asm"
  61. RSEG CODE
  62. ;if TCP: A=SOCKET, de=buffer_ptr,               HL=sizeof(buffer)
  63. ;else:   A=SOCKET, de=sockaddr_in ptr,  HL=sizeof(buffer), IX=buffer_ptr,
  64. ;out: HL=count if HL < 0 then A=error
  65. OS_WIZNETREAD: 
  66.         push bc
  67. ;       ld b, e
  68. ;       ld a, e
  69. ;       add a, 05       ; protocol
  70. ;       ld e, a        
  71. ;       ld a, (de)      ;(0x01 tcp/ip, 0x02 icmp, 0x03 udp/ip  
  72. ;       cp 01
  73. ;       jp z, tcpread
  74. ;       cp 02
  75. ;       jp z, icmpread
  76. ;       cp 03
  77. ;       jp z, udpread
  78.  
  79.  
  80. tcpread:
  81. ;       ld e, b        
  82.         ex de,hl
  83.         ld a, (hl)      ;socket
  84.         inc hl
  85.         ld e, (hl)      ;buffer L
  86.         inc hl
  87.         ld d, (hl)      ;buffer H
  88.         inc hl
  89.         ld c, (hl)      ;size L
  90.         inc hl
  91.         ld b, (hl)      ;size H
  92.         ld l, c
  93.         ld h, b
  94.         ld c, CMD_WIZNETREAD
  95.         push ix
  96.         push iy
  97.         ex af,af'
  98.         call BDOS
  99.         pop iy
  100.         pop ix
  101.         bit 7, h
  102.         jp z, readok    ;noerror just return
  103.         ld l, a
  104.         jp readnot
  105.  
  106. icmpread:
  107. udpread:
  108. ;       ld e, b        
  109. ;       ex de,hl
  110. ;       ld a, (hl)      ;socket
  111. ;       inc hl
  112. ;       ld (store_ix1), hl
  113. ;       ld IX, (store_ix1)      ; buffer HL
  114. ;       inc hl
  115. ;       inc hl
  116. ;       ld c, (hl)                      ;size L
  117. ;       inc hl
  118. ;       ld b, (hl)                      ;size H
  119. ;       ld l, c
  120. ;       ld h, b
  121. ;       ex af,af'
  122. ;       ld c, CMD_WIZNETREAD
  123. ;       push ix
  124. ;       push iy
  125. ;       call BDOS
  126. ;       pop iy
  127. ;       pop ix
  128. ;       bit 7, h
  129. ;       jp z, readok    ;noerror just return
  130. ;       ld l, a
  131.  
  132. readok:
  133. readnot:
  134.         pop bc
  135.         ret
  136. store_ix1:
  137. defb 0,0,0,0,0,0,0,0
  138. ENDMOD
  139.  
  140. MODULE OS_WIZNETWRITE
  141. PUBLIC OS_WIZNETWRITE
  142. #include "sysdefs.asm"
  143. RSEG CODE
  144. ;if TCP: A=SOCKET, de=buffer_ptr,               HL=sizeof(buffer)
  145. ;else:   A=SOCKET, de=sockaddr_in ptr,  HL=sizeof(buffer), IX=buffer_ptr,
  146. ;out: HL=count if HL < 0 then A=error
  147. OS_WIZNETWRITE 
  148.         push bc
  149. ;       ld b, e
  150. ;       ld a, e
  151. ;       add a, 05       ; protocol
  152. ;       ld e, a        
  153. ;       ld a, (de)      ;(0x01 tcp/ip, 0x02 icmp, 0x03 udp/ip  
  154. ;       cp 01
  155. ;       jp z, tcpsend
  156. ;       cp 02
  157. ;       jp z, icmpsend
  158. ;       cp 03
  159. ;       jp z, udpsend
  160.  
  161. tcpsend:       
  162. ;       ld e, b
  163.         ex de,hl
  164.         ld a, (hl)                      ;socket
  165.         inc hl
  166.         ld e, (hl)                      ;buffer L
  167.         inc hl
  168.         ld d, (hl)                      ;buffer H
  169.         inc hl
  170.         ld c, (hl)                      ;size L
  171.         inc hl
  172.         ld b, (hl)                      ;size H
  173.         ld l, c
  174.         ld h, b
  175.         push ix
  176.         push iy
  177.         ld c, CMD_WIZNETWRITE
  178.         ex af,af'
  179.         call BDOS
  180.         pop iy
  181.         pop ix
  182.         bit 7, h
  183.         jp z, writeok           ;noerror just return
  184.         ld l, a
  185.         jp writenot
  186.        
  187. udpsend:
  188. icmpsend:
  189. ;       ld e, b
  190. ;       ex de,hl
  191. ;       ld a, (hl)                      ; socket
  192. ;       inc hl
  193. ;       ld (store_ix), hl
  194. ;       ld IX, (store_ix)       ; buffer HL
  195. ;       inc hl
  196. ;       inc hl
  197. ;       ld c, (hl)                      ; size L
  198. ;       inc hl
  199. ;       ld b, (hl)                      ; size H
  200. ;       inc hl                          ; protocol
  201. ;       inc hl
  202. ;       ex de,hl                        ; DE-HL now point at sockaddr_in
  203. ;       ex af,af'
  204. ;       ld c, CMD_WIZNETWRITE
  205. ;       push ix
  206. ;       push iy
  207. ;       call BDOS
  208. ;       pop iy
  209. ;       pop ix
  210. ;       bit 7, h
  211. ;       jp z, writeok           ;noerror just return
  212. ;       ld l, a
  213. writeok:
  214. writenot:
  215.         pop bc
  216.         ret
  217. store_ix:
  218. defb 0,0,0,0,0,0,0,0
  219. ENDMOD
  220.  
  221. MODULE OS_BIND
  222. PUBLIC OS_BIND
  223. #include "sysdefs.asm"
  224. RSEG CODE
  225. ;  A - SOCKET
  226. ;  DE - указатель на структуру sockaddr_in содержащую номер исходящего порта.
  227. ;   (остальные поля структуры не используются, но обязаны присутствовать)
  228. ; Возвращаемые значения в регистрах:
  229. ;  L - При отрицательном значении - функция завершилась с ошибкой.
  230. ;  А - errno при ошибке
  231. OS_BIND:       
  232.         push bc
  233.         ld a, e
  234.         ld d, b
  235.         ld e, c
  236.         ld l,0x05
  237.     ld c,CMD_WIZNETOPEN
  238.         push ix
  239.         push iy
  240.         ex af,af'
  241.         call BDOS
  242.         pop iy
  243.         pop ix
  244.         ld h, l
  245.         ld l, a
  246.         pop bc
  247.         ret
  248. ENDMOD
  249.  
  250. MODULE OS_LISTEN
  251. PUBLIC OS_LISTEN
  252. #include "sysdefs.asm"
  253. RSEG CODE
  254. ; A - SOCKET
  255. ; Возвращаемые значения в регистрах:
  256. ; L - При отрицательном значении - функция завершилась с ошибкой.
  257. ; А - errno при ошибке.
  258. OS_LISTEN:     
  259.         push bc
  260.         push de
  261.         ld a, e
  262.         ld l,0x06
  263.    ld c,CMD_WIZNETOPEN
  264.         ex af,af'
  265.         push ix
  266.         push iy
  267.         call BDOS
  268.         pop iy
  269.         pop ix
  270.         pop de
  271.         pop bc
  272.         ld h, l
  273.         ld l, a
  274.         ret
  275. ENDMOD
  276.  
  277.  
  278. MODULE OS_ACCEPT
  279. PUBLIC OS_ACCEPT
  280. #include "sysdefs.asm"
  281. RSEG CODE
  282. ; A - SOCKET
  283. ; Возвращаемые значения в регистрах:
  284. ; L - SOCKET при положительном значении, при отрицательном значении  - функция завершилась с ошибкой.
  285. ; А - errno при ошибке.
  286. OS_ACCEPT:     
  287.         push bc
  288.         push de
  289.         ld a, e
  290.         ld l,0x04
  291.     ld c,CMD_WIZNETOPEN
  292.         ex af,af'
  293.         push ix
  294.         push iy
  295.         call BDOS
  296.         pop iy
  297.         pop ix
  298.         ld h, l
  299.         ld l, a
  300.         pop de
  301.         pop bc
  302.         ret
  303. ENDMOD
  304.  
  305.  
  306.  
  307. MODULE OS_NETSHUTDOWN
  308. PUBLIC OS_NETSHUTDOWN
  309. #include "sysdefs.asm"
  310. RSEG CODE
  311. ; A - SOCKET
  312. ; Возвращаемые значения в регистрах:
  313. ; L - SOCKET при положительном значении, при отрицательном значении  - функция завершилась с ошибкой.
  314. ; А - errno при ошибке.
  315. OS_NETSHUTDOWN:
  316.         push bc
  317.         push de
  318.         ld a, e
  319.         ld l,0x02
  320.    ld c,CMD_WIZNETOPEN
  321.         ex af,af'
  322.         push ix
  323.         push iy
  324.         call BDOS
  325.         pop iy
  326.         pop ix
  327.         ld h, l
  328.         ld l, a
  329.         pop de
  330.         pop bc
  331.         ret
  332. ENDMOD
  333.  
  334. END
  335.