~psmay/+junk/pk2-piculear-conversion-tools

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#! /usr/bin/perl

use warnings;
use strict;
use 5.010;
use Carp;

use JSON;

my $json = JSON->new->utf8->pretty;

my @codes;

for(<DATA>) {
	chomp;
	my @values = split(/\t/, $_);
	my $opname = shift @values;
	next unless defined $opname;

	my $byte = shift @values;
	$byte =~ s/0[Xx](.*)/hex($1)/esg;
	$byte += 0;

	my @params;
	for(@values) {
		/^(\w+)(.*)$/;
		my $name = $1;
		my $rest = $2;
		my $param = { name => $name, size => 1 };

		for($rest) {
			if(s/[%]//) {
				$param->{meaningOf0} = 256;
			}
			if(s/:(\d+)//) {
				$param->{size} = 0 + $1;
			}
			if(s/[+]//) {
				$param->{signed} = JSON::true;
			}
			if(s/[*](.*)//) {
				$param->{multiplyBy} = $1;
			}

			if(!/^$/) {
				die "Unused suffix $_ for $name under opname";
			}

			push @params, $param;
		}
	}

	my %op = (
		name => $opname,
		byte => $byte,
		params => \@params,
	);
	push @codes, \%op;
}

say $json->encode(\@codes);

__DATA__
VDD_ON	0xFF				
VDD_OFF	0xFE				
VDD_GND_ON	0xFD				
VDD_GND_OFF	0xFC				
VPP_ON	0xFB				
VPP_OFF	0xFA				
VPP_PWM_ON	0xF9				
VPP_PWM_OFF	0xF8				
MCLR_GND_ON	0xF7				
MCLR_GND_OFF	0xF6				
BUSY_LED_ON	0xF5				
BUSY_LED_OFF	0xF4				
SET_ICSP_PINS	0xF3	pinStates			
WRITE_BYTE_LITERAL	0xF2	value			
WRITE_BYTE_BUFFER	0xF1				
READ_BYTE_BUFFER	0xF0				
READ_BYTE	0xEF				
WRITE_BITS_LITERAL	0xEE	bitCount	value		
WRITE_BITS_BUFFER	0xED	bitCount			
READ_BITS_BUFFER	0xEC	bitCount			
READ_BITS	0xEB	bitCount			
SET_ICSP_SPEED	0xEA	clockPeriod*1000ns			
LOOP	0xE9	offsetBackward	repeatCount%		
DELAY_LONG	0xE8	delay*5460000ns			
DELAY_SHORT	0xE7	delay*21300ns			
IF_EQ_GOTO	0xE6	value	offset+		
IF_GT_GOTO	0xE5	value	offset+		
GOTO_INDEX	0xE4	offset+			
EXIT_SCRIPT	0xE3				
PEEK_SFR	0xE2	sfrAddress			
POKE_SFR	0xE1	sfrAddress	value		
ICDSLAVE_RX	0xE0				
ICDSLAVE_TX_LIT	0xDF	value			
ICDSLAVE_TX_BUF	0xDE				
LOOPBUFFER	0xDD	offsetBackward			
ICSP_STATES_BUFFER	0xDC				
POP_DOWNLOAD	0xDB				
COREINST18	0xDA	inst:2
COREINST24	0xD9	inst:3
NOP24	0xD8				
VISI24	0xD7				
RD2_BYTE_BUFFER	0xD6				
RD2_BITS_BUFFER	0xD5	bitCount			
WRITE_BUFWORD_W	0xD4	wNumber			
WRITE_BUFBYTE_W	0xD3	wNumber			
CONST_WRITE_DL	0xD2	value			
WRITE_BITS_LIT_HLD	0xD1	bitCount	value		
WRITE_BITS_BUF_HLD	0xD0	bitCount			
SET_AUX	0xCF	pinStates			
AUX_STATE_BUFFER	0xCE				
I2C_START	0xCD				
I2C_STOP	0xCC				
I2C_WR_BYTE_LIT	0xCB	value			
I2C_WR_BYTE_BUF	0xCA				
I2C_RD_BYTE_ACK	0xC9				
I2C_RD_BYTE_NACK	0xC8				
SPI_WR_BYTE_LIT	0xC7	value			
SPI_WR_BYTE_BUF	0xC6				
SPI_RD_BYTE_BUF	0xC5				
SPI_RDWR_BYTE_LIT	0xC4				
SPI_RDWR_BYTE_BUF	0xC3				
ICDSLAVE_RX_BL	0xC2				
ICDSLAVE_TX_LIT_BL	0xC1	value			
ICDSLAVE_TX_BUF_BL	0xC0				
MEASURE_PULSE	0xBF				
UNIO_TX	0xBE	deviceAddress	byteCount		
UNIO_TX_RX	0xBD	deviceAddress	txByteCount	rxByteCount	
JT2_SETMODE	0xBC	bitCount	tmsValue		
JT2_SENDCMD	0xBB	command			
JT2_XFERDATA8_LIT	0xBA	value			
JT2_XFERDATA32_LIT	0xB9	value:4
JT2_XFRFASTDAT_LIT	0xB8	value:4
JT2_XFRFASTDAT_BUF	0xB7				
JT2_XFERINST_BUF	0xB6				
JT2_GET_PE_RESP	0xB5				
JT2_WAIT_PE_RESP	0xB4				
JT2_PE_PROG_RESP	0xB3