1+ .include "telestrat.inc"
2+
3+ .export close_sockets_by_pid
4+
5+ .import KERNEL_NETWORK_FLAG
6+ .import KERNEL_NETWORK_SOCKET_LIST
7+ .import KERNEL_NETWORK_SOURCE_PORT
8+ .import KERNEL_NETWORK_SOCKET_PID
9+ .import KERNEL_NETWORK_SOCKET_DOMAIN
10+
11+ .import kernel_process
12+
13+ .include "../../kernel8/orixlibs/ch395/usr/include/asm/ch395.inc"
14+ .include "../../include/kernel.inc"
15+ .include "../../include/process.inc"
16+ .include "../../include/network.inc"
17+ .include "../../include/memory.inc"
18+
19+ .import ch395_close_socket_sn
20+
21+ .proc close_sockets_by_pid
22+ ;;@brief Close all sockets for current pid
23+ ;;@modifyMEM_TR1
24+
25+ lda # $ 00 ; First socket
26+ sta TR1
27+
28+ @restart:
29+ lda #<KERNEL_NETWORK_SOCKET_PID
30+ ldy #>KERNEL_NETWORK_SOCKET_PID
31+
32+ sta ADDRESS_READ_BETWEEN_BANK_DOUBLON
33+ sty ADDRESS_READ_BETWEEN_BANK_DOUBLON + 1
34+
35+ ldx TR1
36+ ldy # $ 00
37+ MEMORY_GET_VALUE_FROM_BANK ; A contains the value
38+
39+ cmp kernel_process + kernel_process_struct::kernel_current_process
40+ beq @close_socket
41+
42+ @compute:
43+ inc TR1
44+ lda TR1
45+ cmp # $ 08
46+ beq @exit
47+ bne @restart
48+
49+
50+ @close_socket:
51+ lda TR1 ; Socket ID
52+ jsr ch395_close_socket_sn
53+
54+ ; Set to 0
55+ ldy TR1 ; Get socket id (index)
56+ lda # $ 00 ; clear
57+ ldx # $ 00 ; BANK
58+ MEMORY_PUT_VALUE_TO_BANK KERNEL_NETWORK_SOCKET_LIST ; ADDRESS_READ_BETWEEN_BANK_DOUBLON is already set previously : FIXME
59+
60+ ; Set to 0n
61+ ldy TR1 ; Get socket id (index)
62+ lda # $ 00 ; Domain
63+ ldx # $ 00 ; BANK
64+ MEMORY_PUT_VALUE_TO_BANK KERNEL_NETWORK_SOCKET_DOMAIN ; ADDRESS_READ_BETWEEN_BANK_DOUBLON is already set previously : FIXME
65+
66+ ; Clear PID
67+ ldy TR1 ; Get socket id (index)
68+ lda # $ 00
69+ ldx # $ 00 ; BANK
70+ MEMORY_PUT_VALUE_TO_BANK KERNEL_NETWORK_SOCKET_PID ; ADDRESS_READ_BETWEEN_BANK_DOUBLON is already set previously : FIXME
71+ jmp @compute
72+ @exit:
73+ rts
74+ .endproc
0 commit comments