comparison frbl/reconst/command.c @ 326:a4b6b4e389b9

frbl/reconst/command.c: second function reconstruction close to perfect
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 06 Mar 2020 04:04:53 +0000
parents 24d7d7875ee9
children b5b8df53aa51
comparison
equal deleted inserted replaced
325:7df08926a4e7 326:a4b6b4e389b9
75 75
76 long 76 long
77 com_build_confirmation(t_com_confirmation *confirmation, 77 com_build_confirmation(t_com_confirmation *confirmation,
78 SYS_UWORD8 *confirmation_to_send) 78 SYS_UWORD8 *confirmation_to_send)
79 { 79 {
80 SYS_WORD32 sp8;
81 long sp12 = COM_SUCCESS;
82 SYS_UWORD8 sp16;
83 SYS_UWORD8 *sp20;
84 SYS_UWORD8 sp24;
85 SYS_UWORD16 *sp28;
86 SYS_UWORD16 sp32;
80 87
81 88 sp20 = confirmation_to_send++;
89 *confirmation_to_send++ = COM_COMMAND_WORD(confirmation);
90 sp16 = 1;
91 *confirmation_to_send++ = COM_RESULT(confirmation);
92 sp16++;
93 switch (COM_COMMAND_WORD(confirmation)) {
94 case COM_GET_MONITOR_ID: /* 0x202 */
95 if (COM_RESULT(confirmation))
96 break;
97 *confirmation_to_send++ = COM_MONITOR_ID(confirmation);
98 *confirmation_to_send++ =
99 COM_MONITOR_VERSION_FIRST_NBR(confirmation);
100 *confirmation_to_send++ =
101 COM_MONITOR_VERSION_SECOND_NBR(confirmation);
102 sp16 += 3;
103 break;
104 case COM_GET_FLASH_ID: /* 0x23c */
105 if (COM_RESULT(confirmation))
106 break;
107 *confirmation_to_send++ = COM_FLASH_ID(confirmation);
108 sp16++;
109 break;
110 case COM_GET_CHIP_ID: /* 0x25a */
111 if (COM_RESULT(confirmation))
112 break;
113 *confirmation_to_send++ = COM_CHIP_ID(confirmation);
114 sp16++;
115 break;
116 case COM_GET_BOARD_ID: /* 0x266 */
117 if (COM_RESULT(confirmation))
118 break;
119 *confirmation_to_send++ = COM_BOARD_ID(confirmation);
120 sp16++;
121 break;
122 case COM_ERASE_FLASH:
123 break;
124 case COM_WRITE_DATA: /* 0x272 */
125 if (COM_RESULT(confirmation))
126 break;
127 sp32 = COM_FILE_CHECKSUM(confirmation);
128 *confirmation_to_send++ = (sp32 & 0xFF00) >> 8;
129 *confirmation_to_send++ = sp32 & 0xFF;
130 sp32 = COM_FLASH_CHECKSUM(confirmation);
131 *confirmation_to_send++ = (sp32 & 0xFF00) >> 8;
132 *confirmation_to_send++ = sp32 & 0xFF;
133 sp16 += 4;
134 break;
135 case COM_START_APPLICATION: /* 0x2dc */
136 if (COM_RESULT(confirmation))
137 break;
138 *confirmation_to_send++ = COM_STARTING_STATE(confirmation);
139 sp16++;
140 break;
141 case COM_READ_PARAMETERS: /* 0x2e8 */
142 if (COM_RESULT(confirmation))
143 break;
144 sp16++;
145 sp24 = COM_NUMBER_OF_PARAMS_READ(confirmation);
146 *confirmation_to_send++ = sp24;
147 if (sp24 > COM_MAX_NUMBER_OF_16BITS_DATA) {
148 sp12 = COM_PARAMETER_ERROR;
149 break;
150 }
151 sp28 = COM_READ_PARAMS_LIST_ADDRESS(confirmation);
152 for (sp8 = 0; sp8 < sp24; sp8++) {
153 *confirmation_to_send++ = (*sp28 & 0xFF00) >> 8;
154 *confirmation_to_send++ = *sp28++ & 0xFF;
155 sp16 += 2;
156 }
157 case COM_WRITE_PARAMETERS:
158 break;
159 case COM_LOAD_APPLICATION: /* 0x374 */
160 if (COM_RESULT(confirmation))
161 break;
162 sp32 = COM_FILE_RAM_CHECKSUM(confirmation);
163 *confirmation_to_send++ = (sp32 & 0xFF00) >> 8;
164 *confirmation_to_send++ = sp32 & 0xFF;
165 sp32 = COM_RAM_CHECKSUM(confirmation);
166 *confirmation_to_send++ = (sp32 & 0xFF00) >> 8;
167 *confirmation_to_send++ = sp32 & 0xFF;
168 sp16 += 4;
169 break;
170 case COM_SEND_RUN_ADDRESS:
171 break;
172 default:
173 sp12 = COM_COMMAND_UNKNOWN;
174 }
175 *sp20 = sp16;
176 return sp12;
82 } 177 }