assembler/
inst.rs

1use rfvp::script::parser::Nls;
2
3pub trait Inst {
4    fn address(&self) -> u32;
5    fn set_address(&mut self, address: u32);
6    fn serialize_to_binary(&self) -> Vec<u8>;
7    fn size(&self) -> u32;
8}
9
10#[derive(Default)]
11pub struct NopInst {
12    address: u32,
13}
14
15impl NopInst {
16    pub fn new() -> Self {
17        Self::default()
18    }
19}
20
21impl Inst for NopInst {
22    fn address(&self) -> u32 {
23        self.address
24    }
25
26    fn set_address(&mut self, address: u32) {
27        self.address = address;
28    }
29
30    fn serialize_to_binary(&self) -> Vec<u8> {
31        vec![0x00]
32    }
33
34    fn size(&self) -> u32 {
35        1
36    }
37}
38
39pub struct InitStackInst {
40    address: u32,
41    arg_count: u8,
42    locals_count: u8,
43}
44
45impl InitStackInst {
46    pub fn new(arg_count: u8, locals_count: u8) -> Self {
47        Self {
48            address: 0,
49            arg_count,
50            locals_count,
51        }
52    }
53}
54
55impl Inst for InitStackInst {
56    fn address(&self) -> u32 {
57        self.address
58    }
59
60    fn set_address(&mut self, address: u32) {
61        self.address = address;
62    }
63
64    fn serialize_to_binary(&self) -> Vec<u8> {
65        vec![0x01, self.arg_count, self.locals_count]
66    }
67
68    fn size(&self) -> u32 {
69        3
70    }
71}
72
73pub struct CallInst {
74    address: u32,
75    func_address: u32,
76}
77
78impl CallInst {
79    pub fn new(func_address: u32) -> Self {
80        Self {
81            address: 0,
82            func_address,
83        }
84    }
85
86    pub fn set_func_target(&mut self, target: u32) {
87        self.func_address = target;
88    }
89
90    pub fn get_old_func_target(&self) -> u32 {
91        self.func_address
92    }
93}
94
95impl Inst for CallInst {
96    fn address(&self) -> u32 {
97        self.address
98    }
99
100    fn set_address(&mut self, address: u32) {
101        self.address = address;
102    }
103
104    fn serialize_to_binary(&self) -> Vec<u8> {
105        let mut bytes = vec![0x02];
106        bytes.extend_from_slice(&self.func_address.to_le_bytes());
107        bytes
108    }
109
110    fn size(&self) -> u32 {
111        5
112    }
113}
114
115pub struct SyscallInst {
116    address: u32,
117    syscall_id: u16,
118}
119
120impl SyscallInst {
121    pub fn new(syscall_id: u16) -> Self {
122        Self {
123            address: 0,
124            syscall_id,
125        }
126    }
127}
128
129impl Inst for SyscallInst {
130    fn address(&self) -> u32 {
131        self.address
132    }
133
134    fn set_address(&mut self, address: u32) {
135        self.address = address;
136    }
137
138    fn serialize_to_binary(&self) -> Vec<u8> {
139        let mut bytes = vec![0x03];
140        bytes.extend_from_slice(&self.syscall_id.to_le_bytes());
141        bytes
142    }
143
144    fn size(&self) -> u32 {
145        3
146    }
147}
148
149#[derive(Default)]
150pub struct RetInst {
151    address: u32,
152}
153
154impl RetInst {
155    pub fn new() -> Self {
156        Self::default()
157    }
158}
159
160impl Inst for RetInst {
161    fn address(&self) -> u32 {
162        self.address
163    }
164
165    fn set_address(&mut self, address: u32) {
166        self.address = address;
167    }
168
169    fn serialize_to_binary(&self) -> Vec<u8> {
170        vec![0x04]
171    }
172
173    fn size(&self) -> u32 {
174        1
175    }
176}
177
178#[derive(Default)]
179pub struct RetVInst {
180    address: u32,
181}
182
183impl RetVInst {
184    pub fn new() -> Self {
185        Self::default()
186    }
187}
188
189impl Inst for RetVInst {
190    fn address(&self) -> u32 {
191        self.address
192    }
193
194    fn set_address(&mut self, address: u32) {
195        self.address = address;
196    }
197
198    fn serialize_to_binary(&self) -> Vec<u8> {
199        vec![0x05]
200    }
201
202    fn size(&self) -> u32 {
203        1
204    }
205}
206
207pub struct JmpInst {
208    address: u32,
209    target_address: u32,
210}
211
212impl JmpInst {
213    pub fn new(target_address: u32) -> Self {
214        Self {
215            address: 0,
216            target_address,
217        }
218    }
219
220    pub fn set_target(&mut self, target: u32) {
221        self.target_address = target;
222    }
223
224    pub fn get_old_target(&self) -> u32 {
225        self.target_address
226    }
227}
228
229impl Inst for JmpInst {
230    fn address(&self) -> u32 {
231        self.address
232    }
233
234    fn set_address(&mut self, address: u32) {
235        self.address = address;
236    }
237
238    fn serialize_to_binary(&self) -> Vec<u8> {
239        let mut bytes = vec![0x06];
240        bytes.extend_from_slice(&self.target_address.to_le_bytes());
241        bytes
242    }
243
244    fn size(&self) -> u32 {
245        5
246    }
247}
248
249pub struct JzInst {
250    address: u32,
251    target_address: u32,
252}
253
254impl JzInst {
255    pub fn new(target_address: u32) -> Self {
256        Self {
257            address: 0,
258            target_address,
259        }
260    }
261
262    pub fn set_target(&mut self, target: u32) {
263        self.target_address = target;
264    }
265
266    pub fn get_old_target(&self) -> u32 {
267        self.target_address
268    }
269}
270
271impl Inst for JzInst {
272    fn address(&self) -> u32 {
273        self.address
274    }
275
276    fn set_address(&mut self, address: u32) {
277        self.address = address;
278    }
279
280    fn serialize_to_binary(&self) -> Vec<u8> {
281        let mut bytes = vec![0x07];
282        bytes.extend_from_slice(&self.target_address.to_le_bytes());
283        bytes
284    }
285
286    fn size(&self) -> u32 {
287        5
288    }
289}
290
291#[derive(Default)]
292pub struct PushNilInst {
293    address: u32,
294}
295
296impl PushNilInst {
297    pub fn new() -> Self {
298        Self::default()
299    }
300}
301
302impl Inst for PushNilInst {
303    fn address(&self) -> u32 {
304        self.address
305    }
306
307    fn set_address(&mut self, address: u32) {
308        self.address = address;
309    }
310
311    fn serialize_to_binary(&self) -> Vec<u8> {
312        vec![0x08]
313    }
314
315    fn size(&self) -> u32 {
316        1
317    }
318}
319
320#[derive(Default)]
321pub struct PushTrueInst {
322    address: u32,
323}
324
325impl PushTrueInst {
326    pub fn new() -> Self {
327        Self::default()
328    }
329}
330
331impl Inst for PushTrueInst {
332    fn address(&self) -> u32 {
333        self.address
334    }
335
336    fn set_address(&mut self, address: u32) {
337        self.address = address;
338    }
339
340    fn serialize_to_binary(&self) -> Vec<u8> {
341        vec![0x09]
342    }
343
344    fn size(&self) -> u32 {
345        1
346    }
347}
348
349pub struct PushI32Inst {
350    address: u32,
351    value: i32,
352}
353
354impl PushI32Inst {
355    pub fn new(value: i32) -> Self {
356        Self { address: 0, value }
357    }
358
359    pub fn get_value(&self) -> i32 {
360        self.value
361    }
362
363    pub fn set_value(&mut self, value: i32) {
364        self.value = value;
365    }
366}
367
368impl Inst for PushI32Inst {
369    fn address(&self) -> u32 {
370        self.address
371    }
372
373    fn set_address(&mut self, address: u32) {
374        self.address = address;
375    }
376
377    fn serialize_to_binary(&self) -> Vec<u8> {
378        let mut bytes = vec![0x0A];
379        bytes.extend_from_slice(&self.value.to_le_bytes());
380        bytes
381    }
382
383    fn size(&self) -> u32 {
384        5
385    }
386}
387
388pub struct PushI16Inst {
389    address: u32,
390    value: i16,
391}
392
393impl PushI16Inst {
394    pub fn new(value: i16) -> Self {
395        Self { address: 0, value }
396    }
397
398    pub fn get_value(&self) -> i16 {
399        self.value
400    }
401
402    pub fn set_value(&mut self, value: i16) {
403        self.value = value;
404    }
405}
406
407impl Inst for PushI16Inst {
408    fn address(&self) -> u32 {
409        self.address
410    }
411
412    fn set_address(&mut self, address: u32) {
413        self.address = address;
414    }
415
416    fn serialize_to_binary(&self) -> Vec<u8> {
417        let mut bytes = vec![0x0B];
418        bytes.extend_from_slice(&self.value.to_le_bytes());
419        bytes
420    }
421
422    fn size(&self) -> u32 {
423        3
424    }
425}
426
427pub struct PushI8Inst {
428    address: u32,
429    value: i8,
430}
431
432impl PushI8Inst {
433    pub fn new(value: i8) -> Self {
434        Self { address: 0, value }
435    }
436}
437
438impl Inst for PushI8Inst {
439    fn address(&self) -> u32 {
440        self.address
441    }
442
443    fn set_address(&mut self, address: u32) {
444        self.address = address;
445    }
446
447    fn serialize_to_binary(&self) -> Vec<u8> {
448        vec![0x0C, self.value as u8]
449    }
450
451    fn size(&self) -> u32 {
452        2
453    }
454}
455
456pub struct PushF32Inst {
457    address: u32,
458    value: f32,
459}
460
461impl PushF32Inst {
462    pub fn new(value: f32) -> Self {
463        Self { address: 0, value }
464    }
465}
466
467impl Inst for PushF32Inst {
468    fn address(&self) -> u32 {
469        self.address
470    }
471
472    fn set_address(&mut self, address: u32) {
473        self.address = address;
474    }
475
476    fn serialize_to_binary(&self) -> Vec<u8> {
477        let mut bytes = vec![0x0D];
478        bytes.extend_from_slice(&self.value.to_le_bytes());
479        bytes
480    }
481
482    fn size(&self) -> u32 {
483        5
484    }
485}
486
487pub struct PushStringInst {
488    address: u32,
489    content: String,
490    content_blob: Vec<u8>,
491    nls: Nls,
492}
493
494impl PushStringInst {
495    pub fn new(content: String, nls: Nls) -> Self {
496        Self {
497            address: 0,
498            content: content.clone(),
499            content_blob: Self::string_to_blob(&content, nls.clone()),
500            nls,
501        }
502    }
503
504    fn string_to_blob(content: &str, nls: Nls) -> Vec<u8> {
505        // convert utf-8 string to local string via Nls
506        let mut content_bytes = match nls {
507            Nls::GBK => encoding_rs::GBK.encode(content).0.to_vec(),
508            Nls::ShiftJIS => encoding_rs::SHIFT_JIS.encode(content).0.to_vec(),
509            Nls::UTF8 => content.as_bytes().to_vec(),
510        };
511
512        if !content_bytes.ends_with(&[0]) {
513            content_bytes.push(0);
514        }
515
516        content_bytes
517    }
518}
519
520impl Inst for PushStringInst {
521    fn address(&self) -> u32 {
522        self.address
523    }
524
525    fn set_address(&mut self, address: u32) {
526        self.address = address;
527    }
528
529    fn serialize_to_binary(&self) -> Vec<u8> {
530        let mut bytes = vec![0x0E];
531        if self.content_blob.len() > 0xFF {
532            panic!("String too long");
533        }
534        bytes.push(self.content_blob.len() as u8);
535        bytes.extend_from_slice(&self.content_blob);
536        bytes
537    }
538
539    fn size(&self) -> u32 {
540        self.content_blob.len() as u32 + 2
541    }
542}
543
544pub struct PushGlobalInst {
545    address: u32,
546    idx: u16,
547}
548
549impl PushGlobalInst {
550    pub fn new(idx: u16) -> Self {
551        Self { address: 0, idx }
552    }
553}
554
555impl Inst for PushGlobalInst {
556    fn address(&self) -> u32 {
557        self.address
558    }
559
560    fn set_address(&mut self, address: u32) {
561        self.address = address;
562    }
563
564    fn serialize_to_binary(&self) -> Vec<u8> {
565        let mut bytes = vec![0x0F];
566        bytes.extend_from_slice(&self.idx.to_le_bytes());
567        bytes
568    }
569
570    fn size(&self) -> u32 {
571        3
572    }
573}
574
575pub struct PushStackInst {
576    address: u32,
577    idx: i8,
578}
579
580impl PushStackInst {
581    pub fn new(idx: i8) -> Self {
582        Self { address: 0, idx }
583    }
584}
585
586impl Inst for PushStackInst {
587    fn address(&self) -> u32 {
588        self.address
589    }
590
591    fn set_address(&mut self, address: u32) {
592        self.address = address;
593    }
594
595    fn serialize_to_binary(&self) -> Vec<u8> {
596        vec![0x10, self.idx as u8]
597    }
598
599    fn size(&self) -> u32 {
600        2
601    }
602}
603
604pub struct PushGlobalTableInst {
605    address: u32,
606    idx: u16,
607}
608
609impl PushGlobalTableInst {
610    pub fn new(idx: u16) -> Self {
611        Self { address: 0, idx }
612    }
613}
614
615impl Inst for PushGlobalTableInst {
616    fn address(&self) -> u32 {
617        self.address
618    }
619
620    fn set_address(&mut self, address: u32) {
621        self.address = address;
622    }
623
624    fn serialize_to_binary(&self) -> Vec<u8> {
625        let mut bytes = vec![0x11];
626        bytes.extend_from_slice(&self.idx.to_le_bytes());
627        bytes
628    }
629
630    fn size(&self) -> u32 {
631        3
632    }
633}
634
635pub struct PushLocalTableInst {
636    address: u32,
637    idx: i8,
638}
639
640impl PushLocalTableInst {
641    pub fn new(idx: i8) -> Self {
642        Self { address: 0, idx }
643    }
644}
645
646impl Inst for PushLocalTableInst {
647    fn address(&self) -> u32 {
648        self.address
649    }
650
651    fn set_address(&mut self, address: u32) {
652        self.address = address;
653    }
654
655    fn serialize_to_binary(&self) -> Vec<u8> {
656        vec![0x12, self.idx as u8]
657    }
658
659    fn size(&self) -> u32 {
660        2
661    }
662}
663
664pub struct PushTopInst {
665    address: u32,
666}
667
668impl PushTopInst {
669    pub fn new() -> Self {
670        Self { address: 0 }
671    }
672}
673
674impl Inst for PushTopInst {
675    fn address(&self) -> u32 {
676        self.address
677    }
678
679    fn set_address(&mut self, address: u32) {
680        self.address = address;
681    }
682
683    fn serialize_to_binary(&self) -> Vec<u8> {
684        vec![0x13]
685    }
686
687    fn size(&self) -> u32 {
688        1
689    }
690}
691
692pub struct PushReturnInst {
693    address: u32,
694}
695
696impl PushReturnInst {
697    pub fn new() -> Self {
698        Self { address: 0 }
699    }
700}
701
702impl Inst for PushReturnInst {
703    fn address(&self) -> u32 {
704        self.address
705    }
706
707    fn set_address(&mut self, address: u32) {
708        self.address = address;
709    }
710
711    fn serialize_to_binary(&self) -> Vec<u8> {
712        vec![0x14]
713    }
714
715    fn size(&self) -> u32 {
716        1
717    }
718}
719
720pub struct PopGlobalInst {
721    address: u32,
722    idx: u16,
723}
724
725impl PopGlobalInst {
726    pub fn new(idx: u16) -> Self {
727        Self { address: 0, idx }
728    }
729}
730
731impl Inst for PopGlobalInst {
732    fn address(&self) -> u32 {
733        self.address
734    }
735
736    fn set_address(&mut self, address: u32) {
737        self.address = address;
738    }
739
740    fn serialize_to_binary(&self) -> Vec<u8> {
741        let mut bytes = vec![0x15];
742        bytes.extend_from_slice(&self.idx.to_le_bytes());
743        bytes
744    }
745
746    fn size(&self) -> u32 {
747        3
748    }
749}
750
751pub struct PopStackInst {
752    address: u32,
753    idx: i8,
754}
755
756impl PopStackInst {
757    pub fn new(idx: i8) -> Self {
758        Self { address: 0, idx }
759    }
760}
761
762impl Inst for PopStackInst {
763    fn address(&self) -> u32 {
764        self.address
765    }
766
767    fn set_address(&mut self, address: u32) {
768        self.address = address;
769    }
770
771    fn serialize_to_binary(&self) -> Vec<u8> {
772        vec![0x16, self.idx as u8]
773    }
774
775    fn size(&self) -> u32 {
776        2
777    }
778}
779
780pub struct PopGlobalTableInst {
781    address: u32,
782    idx: u16,
783}
784
785impl PopGlobalTableInst {
786    pub fn new(idx: u16) -> Self {
787        Self { address: 0, idx }
788    }
789}
790
791impl Inst for PopGlobalTableInst {
792    fn address(&self) -> u32 {
793        self.address
794    }
795
796    fn set_address(&mut self, address: u32) {
797        self.address = address;
798    }
799
800    fn serialize_to_binary(&self) -> Vec<u8> {
801        let mut bytes = vec![0x17];
802        bytes.extend_from_slice(&self.idx.to_le_bytes());
803        bytes
804    }
805
806    fn size(&self) -> u32 {
807        3
808    }
809}
810
811pub struct PopLocalTableInst {
812    address: u32,
813    idx: i8,
814}
815
816impl PopLocalTableInst {
817    pub fn new(idx: i8) -> Self {
818        Self { address: 0, idx }
819    }
820}
821
822impl Inst for PopLocalTableInst {
823    fn address(&self) -> u32 {
824        self.address
825    }
826
827    fn set_address(&mut self, address: u32) {
828        self.address = address;
829    }
830
831    fn serialize_to_binary(&self) -> Vec<u8> {
832        vec![0x18, self.idx as u8]
833    }
834
835    fn size(&self) -> u32 {
836        2
837    }
838}
839
840pub struct NegInst {
841    address: u32,
842}
843
844impl NegInst {
845    pub fn new() -> Self {
846        Self { address: 0 }
847    }
848}
849
850impl Inst for NegInst {
851    fn address(&self) -> u32 {
852        self.address
853    }
854
855    fn set_address(&mut self, address: u32) {
856        self.address = address;
857    }
858
859    fn serialize_to_binary(&self) -> Vec<u8> {
860        vec![0x19]
861    }
862
863    fn size(&self) -> u32 {
864        1
865    }
866}
867
868pub struct AddInst {
869    address: u32,
870}
871
872impl AddInst {
873    pub fn new() -> Self {
874        Self { address: 0 }
875    }
876}
877
878impl Inst for AddInst {
879    fn address(&self) -> u32 {
880        self.address
881    }
882
883    fn set_address(&mut self, address: u32) {
884        self.address = address;
885    }
886
887    fn serialize_to_binary(&self) -> Vec<u8> {
888        vec![0x1A]
889    }
890
891    fn size(&self) -> u32 {
892        1
893    }
894}
895
896pub struct SubInst {
897    address: u32,
898}
899
900impl SubInst {
901    pub fn new() -> Self {
902        Self { address: 0 }
903    }
904}
905
906impl Inst for SubInst {
907    fn address(&self) -> u32 {
908        self.address
909    }
910
911    fn set_address(&mut self, address: u32) {
912        self.address = address;
913    }
914
915    fn serialize_to_binary(&self) -> Vec<u8> {
916        vec![0x1B]
917    }
918
919    fn size(&self) -> u32 {
920        1
921    }
922}
923
924pub struct MulInst {
925    address: u32,
926}
927
928impl MulInst {
929    pub fn new() -> Self {
930        Self { address: 0 }
931    }
932}
933
934impl Inst for MulInst {
935    fn address(&self) -> u32 {
936        self.address
937    }
938
939    fn set_address(&mut self, address: u32) {
940        self.address = address;
941    }
942
943    fn serialize_to_binary(&self) -> Vec<u8> {
944        vec![0x1C]
945    }
946
947    fn size(&self) -> u32 {
948        1
949    }
950}
951
952pub struct DivInst {
953    address: u32,
954}
955
956impl DivInst {
957    pub fn new() -> Self {
958        Self { address: 0 }
959    }
960}
961
962impl Inst for DivInst {
963    fn address(&self) -> u32 {
964        self.address
965    }
966
967    fn set_address(&mut self, address: u32) {
968        self.address = address;
969    }
970
971    fn serialize_to_binary(&self) -> Vec<u8> {
972        vec![0x1D]
973    }
974
975    fn size(&self) -> u32 {
976        1
977    }
978}
979
980pub struct ModInst {
981    address: u32,
982}
983
984impl ModInst {
985    pub fn new() -> Self {
986        Self { address: 0 }
987    }
988}
989
990impl Inst for ModInst {
991    fn address(&self) -> u32 {
992        self.address
993    }
994
995    fn set_address(&mut self, address: u32) {
996        self.address = address;
997    }
998
999    fn serialize_to_binary(&self) -> Vec<u8> {
1000        vec![0x1E]
1001    }
1002
1003    fn size(&self) -> u32 {
1004        1
1005    }
1006}
1007
1008pub struct BitTestInst {
1009    address: u32,
1010}
1011
1012impl BitTestInst {
1013    pub fn new() -> Self {
1014        Self { address: 0 }
1015    }
1016}
1017
1018impl Inst for BitTestInst {
1019    fn address(&self) -> u32 {
1020        self.address
1021    }
1022
1023    fn set_address(&mut self, address: u32) {
1024        self.address = address;
1025    }
1026
1027    fn serialize_to_binary(&self) -> Vec<u8> {
1028        vec![0x1F]
1029    }
1030
1031    fn size(&self) -> u32 {
1032        1
1033    }
1034}
1035
1036pub struct AndInst {
1037    address: u32,
1038}
1039
1040impl AndInst {
1041    pub fn new() -> Self {
1042        Self { address: 0 }
1043    }
1044}
1045
1046impl Inst for AndInst {
1047    fn address(&self) -> u32 {
1048        self.address
1049    }
1050
1051    fn set_address(&mut self, address: u32) {
1052        self.address = address;
1053    }
1054
1055    fn serialize_to_binary(&self) -> Vec<u8> {
1056        vec![0x20]
1057    }
1058
1059    fn size(&self) -> u32 {
1060        1
1061    }
1062}
1063
1064pub struct OrInst {
1065    address: u32,
1066}
1067
1068impl OrInst {
1069    pub fn new() -> Self {
1070        Self { address: 0 }
1071    }
1072}
1073
1074impl Inst for OrInst {
1075    fn address(&self) -> u32 {
1076        self.address
1077    }
1078
1079    fn set_address(&mut self, address: u32) {
1080        self.address = address;
1081    }
1082
1083    fn serialize_to_binary(&self) -> Vec<u8> {
1084        vec![0x21]
1085    }
1086
1087    fn size(&self) -> u32 {
1088        1
1089    }
1090}
1091
1092pub struct SetEInst {
1093    address: u32,
1094}
1095
1096impl SetEInst {
1097    pub fn new() -> Self {
1098        Self { address: 0 }
1099    }
1100}
1101
1102impl Inst for SetEInst {
1103    fn address(&self) -> u32 {
1104        self.address
1105    }
1106
1107    fn set_address(&mut self, address: u32) {
1108        self.address = address;
1109    }
1110
1111    fn serialize_to_binary(&self) -> Vec<u8> {
1112        vec![0x22]
1113    }
1114
1115    fn size(&self) -> u32 {
1116        1
1117    }
1118}
1119
1120pub struct SetNEInst {
1121    address: u32,
1122}
1123
1124impl SetNEInst {
1125    pub fn new() -> Self {
1126        Self { address: 0 }
1127    }
1128}
1129
1130impl Inst for SetNEInst {
1131    fn address(&self) -> u32 {
1132        self.address
1133    }
1134
1135    fn set_address(&mut self, address: u32) {
1136        self.address = address;
1137    }
1138
1139    fn serialize_to_binary(&self) -> Vec<u8> {
1140        vec![0x23]
1141    }
1142
1143    fn size(&self) -> u32 {
1144        1
1145    }
1146}
1147
1148pub struct SetGInst {
1149    address: u32,
1150}
1151
1152impl SetGInst {
1153    pub fn new() -> Self {
1154        Self { address: 0 }
1155    }
1156}
1157
1158impl Inst for SetGInst {
1159    fn address(&self) -> u32 {
1160        self.address
1161    }
1162
1163    fn set_address(&mut self, address: u32) {
1164        self.address = address;
1165    }
1166
1167    fn serialize_to_binary(&self) -> Vec<u8> {
1168        vec![0x24]
1169    }
1170
1171    fn size(&self) -> u32 {
1172        1
1173    }
1174}
1175
1176pub struct SetLEInst {
1177    address: u32,
1178}
1179
1180impl SetLEInst {
1181    pub fn new() -> Self {
1182        Self { address: 0 }
1183    }
1184}
1185
1186impl Inst for SetLEInst {
1187    fn address(&self) -> u32 {
1188        self.address
1189    }
1190
1191    fn set_address(&mut self, address: u32) {
1192        self.address = address;
1193    }
1194
1195    fn serialize_to_binary(&self) -> Vec<u8> {
1196        vec![0x25]
1197    }
1198
1199    fn size(&self) -> u32 {
1200        1
1201    }
1202}
1203
1204pub struct SetLInst {
1205    address: u32,
1206}
1207
1208impl SetLInst {
1209    pub fn new() -> Self {
1210        Self { address: 0 }
1211    }
1212}
1213
1214impl Inst for SetLInst {
1215    fn address(&self) -> u32 {
1216        self.address
1217    }
1218
1219    fn set_address(&mut self, address: u32) {
1220        self.address = address;
1221    }
1222
1223    fn serialize_to_binary(&self) -> Vec<u8> {
1224        vec![0x26]
1225    }
1226
1227    fn size(&self) -> u32 {
1228        1
1229    }
1230}
1231
1232pub struct SetGEInst {
1233    address: u32,
1234}
1235
1236impl SetGEInst {
1237    pub fn new() -> Self {
1238        Self { address: 0 }
1239    }
1240}
1241
1242impl Inst for SetGEInst {
1243    fn address(&self) -> u32 {
1244        self.address
1245    }
1246
1247    fn set_address(&mut self, address: u32) {
1248        self.address = address;
1249    }
1250
1251    fn serialize_to_binary(&self) -> Vec<u8> {
1252        vec![0x27]
1253    }
1254
1255    fn size(&self) -> u32 {
1256        1
1257    }
1258}