4115 lines
177 KiB
Plaintext
4115 lines
177 KiB
Plaintext
|
|
tama.elf: file format elf32-littleriscv
|
|
|
|
|
|
Disassembly of section .init:
|
|
|
|
00000000 <InterruptVector>:
|
|
void InterruptVectorDefault() __attribute__((naked)) __attribute((section(".init"))) __attribute((naked));
|
|
|
|
void InterruptVectorDefault( void )
|
|
{
|
|
#if !defined(FUNCONF_TINYVECTOR) || !FUNCONF_TINYVECTOR
|
|
asm volatile( DEFAULT_INTERRUPT_VECTOR_CONTENTS );
|
|
0: 3af0006f j bae <handle_reset>
|
|
4: 00000000 .word 0x00000000
|
|
8: 00000c22 .word 0x00000c22
|
|
c: 00000c20 .word 0x00000c20
|
|
...
|
|
30: 00000c20 .word 0x00000c20
|
|
34: 00000000 .word 0x00000000
|
|
38: 00000c20 .word 0x00000c20
|
|
3c: 00000000 .word 0x00000000
|
|
40: 00000c20 .word 0x00000c20
|
|
44: 00000c20 .word 0x00000c20
|
|
48: 00000c20 .word 0x00000c20
|
|
4c: 00000c20 .word 0x00000c20
|
|
50: 00001a9a .word 0x00001a9a
|
|
54: 00000c20 .word 0x00000c20
|
|
58: 00000c20 .word 0x00000c20
|
|
5c: 00000c20 .word 0x00000c20
|
|
60: 00000c20 .word 0x00000c20
|
|
64: 00000c20 .word 0x00000c20
|
|
68: 00000c20 .word 0x00000c20
|
|
6c: 00000c20 .word 0x00000c20
|
|
70: 00000c20 .word 0x00000c20
|
|
74: 00000c20 .word 0x00000c20
|
|
78: 00000c20 .word 0x00000c20
|
|
7c: 00000c20 .word 0x00000c20
|
|
80: 00000c20 .word 0x00000c20
|
|
84: 00000c20 .word 0x00000c20
|
|
88: 00000c20 .word 0x00000c20
|
|
8c: 00000c20 .word 0x00000c20
|
|
90: 00000c20 .word 0x00000c20
|
|
94: 00000c20 .word 0x00000c20
|
|
98: 00001abe .word 0x00001abe
|
|
9c: 0000 unimp
|
|
...
|
|
|
|
Disassembly of section .text:
|
|
|
|
000000a0 <__divsi3>:
|
|
a0: 02054e63 bltz a0,dc <__umodsi3+0x8>
|
|
a4: 0405c363 bltz a1,ea <__umodsi3+0x16>
|
|
|
|
000000a8 <__hidden___udivsi3>:
|
|
a8: 862e mv a2,a1
|
|
aa: 85aa mv a1,a0
|
|
ac: 557d li a0,-1
|
|
ae: c215 beqz a2,d2 <__hidden___udivsi3+0x2a>
|
|
b0: 4685 li a3,1
|
|
b2: 00b67863 bgeu a2,a1,c2 <__hidden___udivsi3+0x1a>
|
|
b6: 00c05663 blez a2,c2 <__hidden___udivsi3+0x1a>
|
|
ba: 0606 slli a2,a2,0x1
|
|
bc: 0686 slli a3,a3,0x1
|
|
be: feb66ce3 bltu a2,a1,b6 <__hidden___udivsi3+0xe>
|
|
c2: 4501 li a0,0
|
|
c4: 00c5e463 bltu a1,a2,cc <__hidden___udivsi3+0x24>
|
|
c8: 8d91 sub a1,a1,a2
|
|
ca: 8d55 or a0,a0,a3
|
|
cc: 8285 srli a3,a3,0x1
|
|
ce: 8205 srli a2,a2,0x1
|
|
d0: faf5 bnez a3,c4 <__hidden___udivsi3+0x1c>
|
|
d2: 8082 ret
|
|
|
|
000000d4 <__umodsi3>:
|
|
d4: 8286 mv t0,ra
|
|
d6: 3fc9 jal a8 <__hidden___udivsi3>
|
|
d8: 852e mv a0,a1
|
|
da: 8282 jr t0
|
|
dc: 40a00533 neg a0,a0
|
|
e0: 00b04763 bgtz a1,ee <__umodsi3+0x1a>
|
|
e4: 40b005b3 neg a1,a1
|
|
e8: b7c1 j a8 <__hidden___udivsi3>
|
|
ea: 40b005b3 neg a1,a1
|
|
ee: 8286 mv t0,ra
|
|
f0: 3f65 jal a8 <__hidden___udivsi3>
|
|
f2: 40a00533 neg a0,a0
|
|
f6: 8282 jr t0
|
|
|
|
000000f8 <__modsi3>:
|
|
f8: 8286 mv t0,ra
|
|
fa: 0005c763 bltz a1,108 <__modsi3+0x10>
|
|
fe: 00054963 bltz a0,110 <__modsi3+0x18>
|
|
102: 375d jal a8 <__hidden___udivsi3>
|
|
104: 852e mv a0,a1
|
|
106: 8282 jr t0
|
|
108: 40b005b3 neg a1,a1
|
|
10c: fe055be3 bgez a0,102 <__modsi3+0xa>
|
|
110: 40a00533 neg a0,a0
|
|
114: 3f51 jal a8 <__hidden___udivsi3>
|
|
116: 40b00533 neg a0,a1
|
|
11a: 8282 jr t0
|
|
...
|
|
|
|
0000011e <DelaySysTick>:
|
|
#endif
|
|
|
|
void DelaySysTick( uint32_t n )
|
|
{
|
|
#if defined(CH32V003) || defined(CH32V00x)
|
|
uint32_t targend = SysTick->CNT + n;
|
|
11e: e000f737 lui a4,0xe000f
|
|
122: 471c lw a5,8(a4)
|
|
124: 953e add a0,a0,a5
|
|
while( ((int32_t)( SysTick->CNT - targend )) < 0 );
|
|
126: 471c lw a5,8(a4)
|
|
128: 8f89 sub a5,a5,a0
|
|
12a: fe07cee3 bltz a5,126 <DelaySysTick+0x8>
|
|
uint64_t targend = SysTick->CNT - n;
|
|
while( ((int64_t)( SysTick->CNT - targend )) > 0 );
|
|
#else
|
|
#error DelaySysTick not defined.
|
|
#endif
|
|
}
|
|
12e: 8082 ret
|
|
|
|
00000130 <ssd1306_i2c_setup>:
|
|
void ssd1306_i2c_setup(void)
|
|
{
|
|
uint16_t tempreg;
|
|
|
|
// Reset I2C1 to init all regs
|
|
RCC->APB1PRSTR |= RCC_APB1Periph_I2C1;
|
|
130: 400217b7 lui a5,0x40021
|
|
134: 4b98 lw a4,16(a5)
|
|
136: 002006b7 lui a3,0x200
|
|
13a: 8f55 or a4,a4,a3
|
|
13c: cb98 sw a4,16(a5)
|
|
RCC->APB1PRSTR &= ~RCC_APB1Periph_I2C1;
|
|
13e: 4b98 lw a4,16(a5)
|
|
140: ffe006b7 lui a3,0xffe00
|
|
144: 16fd addi a3,a3,-1 # ffdfffff <_eusrstack+0xdfdff7ff>
|
|
146: 8f75 and a4,a4,a3
|
|
148: cb98 sw a4,16(a5)
|
|
|
|
// set freq
|
|
tempreg = I2C1->CTLR2;
|
|
14a: 400057b7 lui a5,0x40005
|
|
14e: 4047d703 lhu a4,1028(a5) # 40005404 <_eusrstack+0x20004c04>
|
|
tempreg &= ~I2C_CTLR2_FREQ;
|
|
152: 66c1 lui a3,0x10
|
|
154: fc068693 addi a3,a3,-64 # ffc0 <tama.c.7f472170+0xbf83>
|
|
158: 8f75 and a4,a4,a3
|
|
tempreg |= (FUNCONF_SYSTEM_CORE_CLOCK/SSD1306_I2C_PRERATE)&I2C_CTLR2_FREQ;
|
|
15a: 01876713 ori a4,a4,24
|
|
I2C1->CTLR2 = tempreg;
|
|
15e: 40e79223 sh a4,1028(a5)
|
|
tempreg = (FUNCONF_SYSTEM_CORE_CLOCK/(25*SSD1306_I2C_CLKRATE))&I2C_CKCFGR_CCR;
|
|
tempreg |= I2C_CKCFGR_DUTY;
|
|
#endif
|
|
tempreg |= I2C_CKCFGR_FS;
|
|
#endif
|
|
I2C1->CKCFGR = tempreg;
|
|
162: 7771 lui a4,0xffffc
|
|
164: 0705 addi a4,a4,1 # ffffc001 <_eusrstack+0xdfffb801>
|
|
166: 40e79e23 sh a4,1052(a5)
|
|
// initialize the state
|
|
ssd1306_i2c_irq_state = 0;
|
|
#endif
|
|
|
|
// Enable I2C
|
|
I2C1->CTLR1 |= I2C_CTLR1_PE;
|
|
16a: 4007d703 lhu a4,1024(a5)
|
|
16e: 00176713 ori a4,a4,1
|
|
172: 40e79023 sh a4,1024(a5)
|
|
|
|
// set ACK mode
|
|
I2C1->CTLR1 |= I2C_CTLR1_ACK;
|
|
176: 4007d703 lhu a4,1024(a5)
|
|
17a: 40076713 ori a4,a4,1024
|
|
17e: 40e79023 sh a4,1024(a5)
|
|
}
|
|
182: 8082 ret
|
|
|
|
00000184 <ssd1306_drawPixel>:
|
|
void ssd1306_drawPixel(uint32_t x, uint32_t y, int color)
|
|
{
|
|
uint32_t addr;
|
|
|
|
/* clip */
|
|
if(x >= SSD1306_W)
|
|
184: 07f00793 li a5,127
|
|
188: 02a7e763 bltu a5,a0,1b6 <ssd1306_drawPixel+0x32>
|
|
return;
|
|
if(y >= SSD1306_H)
|
|
18c: 03f00793 li a5,63
|
|
190: 02b7e363 bltu a5,a1,1b6 <ssd1306_drawPixel+0x32>
|
|
return;
|
|
|
|
/* compute buffer address */
|
|
addr = x + SSD1306_W*(y/8);
|
|
194: 0035d793 srli a5,a1,0x3
|
|
198: 079e slli a5,a5,0x7
|
|
19a: 97aa add a5,a5,a0
|
|
|
|
/* set/clear bit in buffer */
|
|
if(color)
|
|
ssd1306_buffer[addr] |= (1<<(y&7));
|
|
19c: c5c18513 addi a0,gp,-932 # 20000058 <ssd1306_buffer>
|
|
1a0: 953e add a0,a0,a5
|
|
1a2: 899d andi a1,a1,7
|
|
1a4: 4705 li a4,1
|
|
1a6: 00054783 lbu a5,0(a0)
|
|
1aa: 00b715b3 sll a1,a4,a1
|
|
if(color)
|
|
1ae: c609 beqz a2,1b8 <ssd1306_drawPixel+0x34>
|
|
ssd1306_buffer[addr] |= (1<<(y&7));
|
|
1b0: 8fcd or a5,a5,a1
|
|
else
|
|
ssd1306_buffer[addr] &= ~(1<<(y&7));
|
|
1b2: 00f50023 sb a5,0(a0)
|
|
}
|
|
1b6: 8082 ret
|
|
ssd1306_buffer[addr] &= ~(1<<(y&7));
|
|
1b8: fff5c593 not a1,a1
|
|
1bc: 8fed and a5,a5,a1
|
|
1be: bfd5 j 1b2 <ssd1306_drawPixel+0x2e>
|
|
|
|
000001c0 <ssd1306_fillRect>:
|
|
|
|
/*
|
|
* fill a rectangle
|
|
*/
|
|
void ssd1306_fillRect(uint32_t x, uint32_t y, uint8_t w, uint32_t h, uint32_t color)
|
|
{
|
|
1c0: 1101 addi sp,sp,-32
|
|
1c2: 8332 mv t1,a2
|
|
1c4: cc22 sw s0,24(sp)
|
|
1c6: ca26 sw s1,20(sp)
|
|
1c8: ce06 sw ra,28(sp)
|
|
1ca: 84aa mv s1,a0
|
|
1cc: 863a mv a2,a4
|
|
1ce: 96ae add a3,a3,a1
|
|
|
|
/* scan vertical */
|
|
while(h--)
|
|
{
|
|
m=x;
|
|
w=iw;
|
|
1d0: 841a mv s0,t1
|
|
/* scan horizontal */
|
|
while(w--)
|
|
1d2: 147d addi s0,s0,-1
|
|
1d4: 0ff47413 zext.b s0,s0
|
|
1d8: 0ff00713 li a4,255
|
|
1dc: 00e41a63 bne s0,a4,1f0 <ssd1306_fillRect+0x30>
|
|
{
|
|
/* invert pixels */
|
|
ssd1306_drawPixel(m++, n, color);
|
|
}
|
|
n++;
|
|
1e0: 0585 addi a1,a1,1
|
|
while(h--)
|
|
1e2: 02d58663 beq a1,a3,20e <ssd1306_fillRect+0x4e>
|
|
while(w--)
|
|
1e6: fff30413 addi s0,t1,-1
|
|
1ea: 0ff47413 zext.b s0,s0
|
|
m=x;
|
|
1ee: 8526 mv a0,s1
|
|
ssd1306_drawPixel(m++, n, color);
|
|
1f0: 00150713 addi a4,a0,1
|
|
1f4: c81a sw t1,16(sp)
|
|
1f6: c636 sw a3,12(sp)
|
|
1f8: c43a sw a4,8(sp)
|
|
1fa: c232 sw a2,4(sp)
|
|
1fc: c02e sw a1,0(sp)
|
|
1fe: 3759 jal 184 <ssd1306_drawPixel>
|
|
200: 4722 lw a4,8(sp)
|
|
202: 4342 lw t1,16(sp)
|
|
204: 46b2 lw a3,12(sp)
|
|
206: 4612 lw a2,4(sp)
|
|
208: 4582 lw a1,0(sp)
|
|
20a: 853a mv a0,a4
|
|
20c: b7d9 j 1d2 <ssd1306_fillRect+0x12>
|
|
}
|
|
}
|
|
20e: 40f2 lw ra,28(sp)
|
|
210: 4462 lw s0,24(sp)
|
|
212: 44d2 lw s1,20(sp)
|
|
214: 6105 addi sp,sp,32
|
|
216: 8082 ret
|
|
|
|
00000218 <ssd1306_drawstr>:
|
|
|
|
/*
|
|
* draw a string to the display
|
|
*/
|
|
void ssd1306_drawstr(int x, int y, const char *str, uint8_t color)
|
|
{
|
|
218: fdc10113 addi sp,sp,-36
|
|
21c: ce22 sw s0,28(sp)
|
|
21e: cc26 sw s1,24(sp)
|
|
220: d006 sw ra,32(sp)
|
|
222: 842a mv s0,a0
|
|
224: 82ae mv t0,a1
|
|
226: 84b2 mv s1,a2
|
|
uint8_t c;
|
|
|
|
while((c=*str++))
|
|
228: 0004c383 lbu t2,0(s1)
|
|
22c: 0485 addi s1,s1,1
|
|
22e: 06038563 beqz t2,298 <ssd1306_drawstr+0x80>
|
|
232: 4701 li a4,0
|
|
d = fontdata[(chr<<3)+i];
|
|
234: 00339793 slli a5,t2,0x3
|
|
238: 6609 lui a2,0x2
|
|
23a: 97ba add a5,a5,a4
|
|
23c: 7f060613 addi a2,a2,2032 # 27f0 <fontdata>
|
|
240: 97b2 add a5,a5,a2
|
|
242: 0007c303 lbu t1,0(a5)
|
|
246: 4781 li a5,0
|
|
if(d&0x80)
|
|
248: 01831593 slli a1,t1,0x18
|
|
24c: 85e1 srai a1,a1,0x18
|
|
24e: 8636 mv a2,a3
|
|
250: 0005c463 bltz a1,258 <ssd1306_drawstr+0x40>
|
|
col = (~color)&1;
|
|
254: 0016c613 xori a2,a3,1
|
|
ssd1306_drawPixel(x+j, y+i, col);
|
|
258: 00e285b3 add a1,t0,a4
|
|
25c: 00f40533 add a0,s0,a5
|
|
260: ca36 sw a3,20(sp)
|
|
262: c81a sw t1,16(sp)
|
|
264: c61e sw t2,12(sp)
|
|
266: c43a sw a4,8(sp)
|
|
268: c216 sw t0,4(sp)
|
|
26a: c03e sw a5,0(sp)
|
|
26c: 3f21 jal 184 <ssd1306_drawPixel>
|
|
d <<= 1;
|
|
26e: 4342 lw t1,16(sp)
|
|
for(j=0;j<8;j++)
|
|
270: 4782 lw a5,0(sp)
|
|
272: 4621 li a2,8
|
|
d <<= 1;
|
|
274: 0306 slli t1,t1,0x1
|
|
for(j=0;j<8;j++)
|
|
276: 0785 addi a5,a5,1
|
|
278: 4292 lw t0,4(sp)
|
|
27a: 4722 lw a4,8(sp)
|
|
27c: 43b2 lw t2,12(sp)
|
|
27e: 46d2 lw a3,20(sp)
|
|
d <<= 1;
|
|
280: 0ff37313 zext.b t1,t1
|
|
for(j=0;j<8;j++)
|
|
284: fcc792e3 bne a5,a2,248 <ssd1306_drawstr+0x30>
|
|
for(i=0;i<8;i++)
|
|
288: 0705 addi a4,a4,1
|
|
28a: faf715e3 bne a4,a5,234 <ssd1306_drawstr+0x1c>
|
|
{
|
|
ssd1306_drawchar(x, y, c, color);
|
|
x += 8;
|
|
28e: 9432 add s0,s0,a2
|
|
if(x>120)
|
|
290: 07800793 li a5,120
|
|
294: f887dae3 bge a5,s0,228 <ssd1306_drawstr+0x10>
|
|
break;
|
|
}
|
|
}
|
|
298: 5082 lw ra,32(sp)
|
|
29a: 4472 lw s0,28(sp)
|
|
29c: 44e2 lw s1,24(sp)
|
|
29e: 02410113 addi sp,sp,36
|
|
2a2: 8082 ret
|
|
|
|
000002a4 <s_cat>:
|
|
|
|
// Tiny string builders used instead of snprintf: we only ever paste short
|
|
// strings and small unsigned ints, and avoiding <stdio.h> keeps the whole
|
|
// printf machinery (~1 KB) out of the image. Each returns the new end pointer
|
|
// so calls chain; remember to NUL-terminate the final buffer yourself.
|
|
static char *s_cat(char *p, const char *s) { while (*s) *p++ = *s++; return p; }
|
|
2a4: 0005c783 lbu a5,0(a1)
|
|
2a8: e391 bnez a5,2ac <s_cat+0x8>
|
|
2aa: 8082 ret
|
|
2ac: 0505 addi a0,a0,1
|
|
2ae: 0585 addi a1,a1,1
|
|
2b0: fef50fa3 sb a5,-1(a0)
|
|
2b4: bfc5 j 2a4 <s_cat>
|
|
|
|
000002b6 <u_cat>:
|
|
static char *u_cat(char *p, unsigned v)
|
|
{
|
|
2b6: 1111 addi sp,sp,-28
|
|
2b8: ca22 sw s0,20(sp)
|
|
2ba: c826 sw s1,16(sp)
|
|
2bc: cc06 sw ra,24(sp)
|
|
2be: 87aa mv a5,a0
|
|
2c0: 872e mv a4,a1
|
|
2c2: 0020 addi s0,sp,8
|
|
char tmp[5];
|
|
int n = 0;
|
|
2c4: 4481 li s1,0
|
|
do { tmp[n++] = '0' + v % 10; v /= 10; } while (v);
|
|
2c6: 45a9 li a1,10
|
|
2c8: 853a mv a0,a4
|
|
2ca: c23e sw a5,4(sp)
|
|
2cc: c03a sw a4,0(sp)
|
|
2ce: 3519 jal d4 <__umodsi3>
|
|
2d0: 4702 lw a4,0(sp)
|
|
2d2: 03050513 addi a0,a0,48
|
|
2d6: 00a40023 sb a0,0(s0)
|
|
2da: 45a9 li a1,10
|
|
2dc: 853a mv a0,a4
|
|
2de: 33e9 jal a8 <__hidden___udivsi3>
|
|
2e0: 4302 lw t1,0(sp)
|
|
2e2: 46a5 li a3,9
|
|
2e4: 4792 lw a5,4(sp)
|
|
2e6: 0485 addi s1,s1,1
|
|
2e8: 872a mv a4,a0
|
|
2ea: 0405 addi s0,s0,1
|
|
2ec: 0030 addi a2,sp,8
|
|
2ee: fc66ece3 bltu a3,t1,2c6 <u_cat+0x10>
|
|
2f2: 8726 mv a4,s1
|
|
2f4: 86be mv a3,a5
|
|
while (n) *p++ = tmp[--n];
|
|
2f6: 177d addi a4,a4,-1
|
|
2f8: 00e605b3 add a1,a2,a4
|
|
2fc: 0005c583 lbu a1,0(a1)
|
|
300: 0685 addi a3,a3,1
|
|
302: feb68fa3 sb a1,-1(a3)
|
|
306: fb65 bnez a4,2f6 <u_cat+0x40>
|
|
return p;
|
|
}
|
|
308: 40e2 lw ra,24(sp)
|
|
30a: 4452 lw s0,20(sp)
|
|
30c: 00978533 add a0,a5,s1
|
|
310: 44c2 lw s1,16(sp)
|
|
312: 0171 addi sp,sp,28
|
|
314: 8082 ret
|
|
|
|
00000316 <beep>:
|
|
|
|
// short square-wave beep on the passive piezo (blocking, ms-scale only)
|
|
static void beep(uint16_t freq, uint16_t ms)
|
|
{
|
|
if (!sound_on) return;
|
|
316: c061c783 lbu a5,-1018(gp) # 20000002 <sound_on>
|
|
31a: c7ad beqz a5,384 <beep+0x6e>
|
|
{
|
|
31c: 1131 addi sp,sp,-20
|
|
31e: c622 sw s0,12(sp)
|
|
320: 842e mv s0,a1
|
|
if (freq == 0) { Delay_Ms(ms); return; }
|
|
uint32_t half = 500000u / freq; // half-period in us
|
|
322: 85aa mv a1,a0
|
|
324: 0007a537 lui a0,0x7a
|
|
328: 12050513 addi a0,a0,288 # 7a120 <tama.c.7f472170+0x760e3>
|
|
{
|
|
32c: c806 sw ra,16(sp)
|
|
32e: c426 sw s1,8(sp)
|
|
uint32_t half = 500000u / freq; // half-period in us
|
|
330: 3ba5 jal a8 <__hidden___udivsi3>
|
|
uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u);
|
|
332: 00541793 slli a5,s0,0x5
|
|
336: 8f81 sub a5,a5,s0
|
|
338: 078a slli a5,a5,0x2
|
|
33a: 97a2 add a5,a5,s0
|
|
33c: 00151413 slli s0,a0,0x1
|
|
uint32_t half = 500000u / freq; // half-period in us
|
|
340: 84aa mv s1,a0
|
|
uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u);
|
|
342: 85a2 mv a1,s0
|
|
344: 00379513 slli a0,a5,0x3
|
|
348: 3385 jal a8 <__hidden___udivsi3>
|
|
for (uint32_t i = 0; i < cycles; i++) {
|
|
funDigitalWrite(BUZZER, FUN_HIGH);
|
|
Delay_Us(half);
|
|
34a: 9426 add s0,s0,s1
|
|
34c: 00141793 slli a5,s0,0x1
|
|
uint32_t cycles = ((uint32_t)ms * 1000u) / (half * 2u);
|
|
350: 872a mv a4,a0
|
|
Delay_Us(half);
|
|
352: c03e sw a5,0(sp)
|
|
for (uint32_t i = 0; i < cycles; i++) {
|
|
354: 4401 li s0,0
|
|
Delay_Us(half);
|
|
356: 4502 lw a0,0(sp)
|
|
funDigitalWrite(BUZZER, FUN_HIGH);
|
|
358: 400114b7 lui s1,0x40011
|
|
35c: c23a sw a4,4(sp)
|
|
35e: 4691 li a3,4
|
|
360: 40048493 addi s1,s1,1024 # 40011400 <_eusrstack+0x20010c00>
|
|
364: c894 sw a3,16(s1)
|
|
Delay_Us(half);
|
|
366: 3b65 jal 11e <DelaySysTick>
|
|
funDigitalWrite(BUZZER, FUN_LOW);
|
|
Delay_Us(half);
|
|
368: 4502 lw a0,0(sp)
|
|
funDigitalWrite(BUZZER, FUN_LOW);
|
|
36a: 000406b7 lui a3,0x40
|
|
36e: c894 sw a3,16(s1)
|
|
Delay_Us(half);
|
|
370: 337d jal 11e <DelaySysTick>
|
|
for (uint32_t i = 0; i < cycles; i++) {
|
|
372: 4712 lw a4,4(sp)
|
|
374: 0405 addi s0,s0,1
|
|
376: fe8710e3 bne a4,s0,356 <beep+0x40>
|
|
}
|
|
}
|
|
37a: 40c2 lw ra,16(sp)
|
|
37c: 4432 lw s0,12(sp)
|
|
37e: 44a2 lw s1,8(sp)
|
|
380: 0151 addi sp,sp,20
|
|
382: 8082 ret
|
|
384: 8082 ret
|
|
|
|
00000386 <led_blink>:
|
|
|
|
static void led_blink(void)
|
|
{
|
|
386: 1161 addi sp,sp,-8
|
|
388: c022 sw s0,0(sp)
|
|
funDigitalWrite(LED_PIN, FUN_HIGH);
|
|
38a: 40011437 lui s0,0x40011
|
|
{
|
|
38e: c206 sw ra,4(sp)
|
|
funDigitalWrite(LED_PIN, FUN_HIGH);
|
|
390: 80040413 addi s0,s0,-2048 # 40010800 <_eusrstack+0x20010000>
|
|
394: 4789 li a5,2
|
|
Delay_Ms(30);
|
|
396: 0002c537 lui a0,0x2c
|
|
funDigitalWrite(LED_PIN, FUN_HIGH);
|
|
39a: c81c sw a5,16(s0)
|
|
Delay_Ms(30);
|
|
39c: f2050513 addi a0,a0,-224 # 2bf20 <tama.c.7f472170+0x27ee3>
|
|
3a0: 3bbd jal 11e <DelaySysTick>
|
|
funDigitalWrite(LED_PIN, FUN_LOW);
|
|
3a2: 000207b7 lui a5,0x20
|
|
}
|
|
3a6: 4092 lw ra,4(sp)
|
|
funDigitalWrite(LED_PIN, FUN_LOW);
|
|
3a8: c81c sw a5,16(s0)
|
|
}
|
|
3aa: 4402 lw s0,0(sp)
|
|
3ac: 0121 addi sp,sp,8
|
|
3ae: 8082 ret
|
|
|
|
000003b0 <add_xp>:
|
|
}
|
|
|
|
// Award XP; promote (and trigger the evolution banner) when a tier is reached.
|
|
static void add_xp(uint8_t n)
|
|
{
|
|
if (!pet.alive) return;
|
|
3b0: c4818713 addi a4,gp,-952 # 20000044 <pet>
|
|
3b4: 01074703 lbu a4,16(a4)
|
|
3b8: c371 beqz a4,47c <add_xp+0xcc>
|
|
3ba: c4818793 addi a5,gp,-952 # 20000044 <pet>
|
|
if (pet.xp < 60000) pet.xp += n;
|
|
3be: 0087d683 lhu a3,8(a5) # 20008 <tama.c.7f472170+0x1bfcb>
|
|
3c2: 673d lui a4,0xf
|
|
3c4: a5f70713 addi a4,a4,-1441 # ea5f <tama.c.7f472170+0xaa22>
|
|
3c8: 02d76663 bltu a4,a3,3f4 <add_xp+0x44>
|
|
3cc: 9536 add a0,a0,a3
|
|
3ce: 0542 slli a0,a0,0x10
|
|
3d0: 8141 srli a0,a0,0x10
|
|
3d2: 00a79423 sh a0,8(a5)
|
|
|
|
uint8_t nl = 1;
|
|
for (uint8_t i = 1; i < MAX_LEVEL; i++)
|
|
if (pet.xp >= level_xp[i]) nl = i + 1;
|
|
3d6: 02c00693 li a3,44
|
|
uint8_t nl = 1;
|
|
3da: 4705 li a4,1
|
|
if (pet.xp >= level_xp[i]) nl = i + 1;
|
|
3dc: 00a6fd63 bgeu a3,a0,3f6 <add_xp+0x46>
|
|
3e0: 07700693 li a3,119
|
|
3e4: 4709 li a4,2
|
|
3e6: 00a6f863 bgeu a3,a0,3f6 <add_xp+0x46>
|
|
3ea: 0ef00693 li a3,239
|
|
3ee: 470d li a4,3
|
|
3f0: 00a6f363 bgeu a3,a0,3f6 <add_xp+0x46>
|
|
3f4: 4711 li a4,4
|
|
|
|
if (nl > pet.level) {
|
|
3f6: 00b7c683 lbu a3,11(a5)
|
|
3fa: 08e6f163 bgeu a3,a4,47c <add_xp+0xcc>
|
|
{
|
|
3fe: 1171 addi sp,sp,-4
|
|
400: c006 sw ra,0(sp)
|
|
pet.level = nl;
|
|
402: 00e785a3 sb a4,11(a5)
|
|
switch (pet.level) {
|
|
406: 4589 li a1,2
|
|
408: 4685 li a3,1
|
|
40a: 02b70663 beq a4,a1,436 <add_xp+0x86>
|
|
40e: 460d li a2,3
|
|
410: 86ae mv a3,a1
|
|
412: 02c70263 beq a4,a2,436 <add_xp+0x86>
|
|
416: 4605 li a2,1
|
|
418: 4681 li a3,0
|
|
41a: 00c70e63 beq a4,a2,436 <add_xp+0x86>
|
|
if (!pet.ascend) pet.ascend = (pet.health >= 60) ? 1 : 2;
|
|
41e: 00d7c703 lbu a4,13(a5)
|
|
422: eb31 bnez a4,476 <add_xp+0xc6>
|
|
424: 00478683 lb a3,4(a5)
|
|
428: 03b00713 li a4,59
|
|
42c: 04d74163 blt a4,a3,46e <add_xp+0xbe>
|
|
430: 00b786a3 sb a1,13(a5)
|
|
pet.form = (pet.ascend == 1) ? FORM_CLAUDE : FORM_GLITCH;
|
|
434: 4691 li a3,4
|
|
case 1: pet.form = FORM_PROC; break;
|
|
436: 00d78623 sb a3,12(a5)
|
|
compute_form();
|
|
evo_anim = 30; // ~1.8 s celebratory banner
|
|
43a: 4779 li a4,30
|
|
beep(784, 60); beep(988, 60); beep(1175, 60); beep(1568, 140);
|
|
43c: 03c00593 li a1,60
|
|
440: 31000513 li a0,784
|
|
evo_anim = 30; // ~1.8 s celebratory banner
|
|
444: c4e18223 sb a4,-956(gp) # 20000040 <evo_anim>
|
|
beep(784, 60); beep(988, 60); beep(1175, 60); beep(1568, 140);
|
|
448: 35f9 jal 316 <beep>
|
|
44a: 03c00593 li a1,60
|
|
44e: 3dc00513 li a0,988
|
|
452: 35d1 jal 316 <beep>
|
|
454: 03c00593 li a1,60
|
|
458: 49700513 li a0,1175
|
|
45c: 3d6d jal 316 <beep>
|
|
45e: 08c00593 li a1,140
|
|
462: 62000513 li a0,1568
|
|
466: 3d45 jal 316 <beep>
|
|
led_blink();
|
|
}
|
|
}
|
|
468: 4082 lw ra,0(sp)
|
|
46a: 0111 addi sp,sp,4
|
|
led_blink();
|
|
46c: bf29 j 386 <led_blink>
|
|
if (!pet.ascend) pet.ascend = (pet.health >= 60) ? 1 : 2;
|
|
46e: 00c786a3 sb a2,13(a5)
|
|
pet.form = (pet.ascend == 1) ? FORM_CLAUDE : FORM_GLITCH;
|
|
472: 468d li a3,3
|
|
break;
|
|
474: b7c9 j 436 <add_xp+0x86>
|
|
pet.form = (pet.ascend == 1) ? FORM_CLAUDE : FORM_GLITCH;
|
|
476: fac71fe3 bne a4,a2,434 <add_xp+0x84>
|
|
47a: bfe5 j 472 <add_xp+0xc2>
|
|
47c: 8082 ret
|
|
|
|
0000047e <notify>:
|
|
|
|
// Chirp once when a need first drops below 50% (gentle) or 20% (urgent),
|
|
// re-arming only after it recovers. Audible even while the screen is off,
|
|
// so it works as a "tend to me" reminder.
|
|
static void notify(uint8_t idx, int8_t val)
|
|
{
|
|
47e: 1141 addi sp,sp,-16
|
|
480: c422 sw s0,8(sp)
|
|
482: c606 sw ra,12(sp)
|
|
484: c226 sw s1,4(sp)
|
|
if (val < 20) {
|
|
486: 474d li a4,19
|
|
{
|
|
488: 87aa mv a5,a0
|
|
if (val < 20) {
|
|
48a: c4018413 addi s0,gp,-960 # 2000003c <crit_flag>
|
|
48e: 04b74463 blt a4,a1,4d6 <notify+0x58>
|
|
if (!crit_flag[idx]) { // urgent: descending triple
|
|
492: 942a add s0,s0,a0
|
|
494: 00044703 lbu a4,0(s0)
|
|
498: eb15 bnez a4,4cc <notify+0x4e>
|
|
49a: c02a sw a0,0(sp)
|
|
beep(1568, 60); beep(1175, 60); beep(880, 90);
|
|
49c: 03c00593 li a1,60
|
|
4a0: 62000513 li a0,1568
|
|
4a4: 3d8d jal 316 <beep>
|
|
4a6: 03c00593 li a1,60
|
|
4aa: 49700513 li a0,1175
|
|
4ae: 35a5 jal 316 <beep>
|
|
4b0: 05a00593 li a1,90
|
|
4b4: 37000513 li a0,880
|
|
4b8: 3db9 jal 316 <beep>
|
|
crit_flag[idx] = 1; warn_flag[idx] = 1;
|
|
4ba: 4782 lw a5,0(sp)
|
|
4bc: c3c18713 addi a4,gp,-964 # 20000038 <warn_flag>
|
|
4c0: 4685 li a3,1
|
|
4c2: 97ba add a5,a5,a4
|
|
4c4: 00d40023 sb a3,0(s0)
|
|
4c8: 00d78023 sb a3,0(a5)
|
|
}
|
|
crit_flag[idx] = 0;
|
|
} else {
|
|
warn_flag[idx] = 0; crit_flag[idx] = 0;
|
|
}
|
|
}
|
|
4cc: 40b2 lw ra,12(sp)
|
|
4ce: 4422 lw s0,8(sp)
|
|
4d0: 4492 lw s1,4(sp)
|
|
4d2: 0141 addi sp,sp,16
|
|
4d4: 8082 ret
|
|
} else if (val < 50) {
|
|
4d6: c3c18493 addi s1,gp,-964 # 20000038 <warn_flag>
|
|
4da: 03100713 li a4,49
|
|
if (!warn_flag[idx]) { // gentle: single chirp
|
|
4de: 94aa add s1,s1,a0
|
|
} else if (val < 50) {
|
|
4e0: 02b74363 blt a4,a1,506 <notify+0x88>
|
|
if (!warn_flag[idx]) { // gentle: single chirp
|
|
4e4: 0004c703 lbu a4,0(s1)
|
|
4e8: eb19 bnez a4,4fe <notify+0x80>
|
|
4ea: c02a sw a0,0(sp)
|
|
beep(1568, 50);
|
|
4ec: 03200593 li a1,50
|
|
4f0: 62000513 li a0,1568
|
|
4f4: 350d jal 316 <beep>
|
|
warn_flag[idx] = 1;
|
|
4f6: 4782 lw a5,0(sp)
|
|
4f8: 4705 li a4,1
|
|
4fa: 00e48023 sb a4,0(s1)
|
|
warn_flag[idx] = 0; crit_flag[idx] = 0;
|
|
4fe: 943e add s0,s0,a5
|
|
500: 00040023 sb zero,0(s0)
|
|
}
|
|
504: b7e1 j 4cc <notify+0x4e>
|
|
warn_flag[idx] = 0; crit_flag[idx] = 0;
|
|
506: 00048023 sb zero,0(s1)
|
|
50a: bfd5 j 4fe <notify+0x80>
|
|
|
|
0000050c <game_tick>:
|
|
}
|
|
|
|
// ----------------------------------------------------------------- game tick
|
|
static void game_tick(void)
|
|
{
|
|
pet.age_min++;
|
|
50c: c4818793 addi a5,gp,-952 # 20000044 <pet>
|
|
510: 0067d583 lhu a1,6(a5)
|
|
{
|
|
514: 1161 addi sp,sp,-8
|
|
516: c022 sw s0,0(sp)
|
|
518: c206 sw ra,4(sp)
|
|
|
|
if (pet.sleeping) {
|
|
pet.energy = clamp100(pet.energy + 6);
|
|
// needs still drift down slowly even while asleep
|
|
pet.satiety = clamp100(pet.satiety - 1);
|
|
51a: 00078703 lb a4,0(a5)
|
|
pet.age_min++;
|
|
51e: 0585 addi a1,a1,1
|
|
520: 05c2 slli a1,a1,0x10
|
|
522: 81c1 srli a1,a1,0x10
|
|
if (pet.sleeping) {
|
|
524: 00f7c603 lbu a2,15(a5)
|
|
pet.energy = clamp100(pet.energy + 6);
|
|
528: 00278683 lb a3,2(a5)
|
|
pet.age_min++;
|
|
52c: 00b79323 sh a1,6(a5)
|
|
pet.satiety = clamp100(pet.satiety - 1);
|
|
530: 177d addi a4,a4,-1
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
532: 06400793 li a5,100
|
|
536: c4818413 addi s0,gp,-952 # 20000044 <pet>
|
|
53a: 08e7d663 bge a5,a4,5c6 <game_tick+0xba>
|
|
53e: 873e mv a4,a5
|
|
540: 0762 slli a4,a4,0x18
|
|
542: 8761 srai a4,a4,0x18
|
|
if (pet.sleeping) {
|
|
544: ca59 beqz a2,5da <game_tick+0xce>
|
|
pet.energy = clamp100(pet.energy + 6);
|
|
546: 00668793 addi a5,a3,6 # 40006 <tama.c.7f472170+0x3bfc9>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
54a: 06400513 li a0,100
|
|
54e: 08f55163 bge a0,a5,5d0 <game_tick+0xc4>
|
|
552: 87aa mv a5,a0
|
|
554: 07e2 slli a5,a5,0x18
|
|
556: 87e1 srai a5,a5,0x18
|
|
pet.energy = clamp100(pet.energy + 6);
|
|
558: 00f40123 sb a5,2(s0)
|
|
pet.satiety = clamp100(pet.satiety - 1);
|
|
55c: 00e40023 sb a4,0(s0)
|
|
if (pet.energy >= 100) pet.sleeping = 0; // wakes when rested
|
|
560: 05d00513 li a0,93
|
|
564: 00d55763 bge a0,a3,572 <game_tick+0x66>
|
|
568: 000407a3 sb zero,15(s0)
|
|
56c: 06400793 li a5,100
|
|
570: 4601 li a2,0
|
|
pet.energy = clamp100(pet.energy - 1);
|
|
pet.happy = clamp100(pet.happy - 1);
|
|
}
|
|
|
|
// hygiene drifts every other tick
|
|
if (pet.age_min & 1) pet.hygiene = clamp100(pet.hygiene - 1);
|
|
572: 0015f513 andi a0,a1,1
|
|
576: c919 beqz a0,58c <game_tick+0x80>
|
|
578: 00340683 lb a3,3(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
57c: 06400313 li t1,100
|
|
if (pet.age_min & 1) pet.hygiene = clamp100(pet.hygiene - 1);
|
|
580: 16fd addi a3,a3,-1
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
582: 0ad35163 bge t1,a3,624 <game_tick+0x118>
|
|
586: 869a mv a3,t1
|
|
588: 00d401a3 sb a3,3(s0)
|
|
|
|
// occasional bowel movements (derived from counters, no RNG needed)
|
|
if (!pet.sleeping && pet.poop < 3 &&
|
|
58c: 00e44303 lbu t1,14(s0)
|
|
590: e24d bnez a2,632 <game_tick+0x126>
|
|
592: 4689 li a3,2
|
|
594: 0066ed63 bltu a3,t1,5ae <game_tick+0xa2>
|
|
((pet.age_min * 7u + frame) & 0x1F) == 0)
|
|
598: 00359693 slli a3,a1,0x3
|
|
59c: 8e8d sub a3,a3,a1
|
|
59e: c381a583 lw a1,-968(gp) # 20000034 <frame>
|
|
5a2: 96ae add a3,a3,a1
|
|
5a4: 8afd andi a3,a3,31
|
|
if (!pet.sleeping && pet.poop < 3 &&
|
|
5a6: e6d1 bnez a3,632 <game_tick+0x126>
|
|
pet.poop++;
|
|
5a8: 0305 addi t1,t1,1
|
|
5aa: 00640723 sb t1,14(s0)
|
|
|
|
// being dirty / full of poop slowly saps happiness
|
|
if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
|
|
5ae: c541 beqz a0,636 <game_tick+0x12a>
|
|
5b0: 00140683 lb a3,1(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
5b4: 06400593 li a1,100
|
|
if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
|
|
5b8: 16fd addi a3,a3,-1
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
5ba: 12d5de63 bge a1,a3,6f6 <game_tick+0x1ea>
|
|
5be: 86ae mv a3,a1
|
|
5c0: 00d400a3 sb a3,1(s0)
|
|
5c4: a88d j 636 <game_tick+0x12a>
|
|
5c6: fff74793 not a5,a4
|
|
5ca: 87fd srai a5,a5,0x1f
|
|
5cc: 8f7d and a4,a4,a5
|
|
5ce: bf8d j 540 <game_tick+0x34>
|
|
5d0: fff7c513 not a0,a5
|
|
5d4: 857d srai a0,a0,0x1f
|
|
5d6: 8fe9 and a5,a5,a0
|
|
5d8: bfb5 j 554 <game_tick+0x48>
|
|
pet.energy = clamp100(pet.energy - 1);
|
|
5da: fff68793 addi a5,a3,-1
|
|
pet.satiety = clamp100(pet.satiety - 1);
|
|
5de: 00e40023 sb a4,0(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
5e2: 06400693 li a3,100
|
|
pet.happy = clamp100(pet.happy - 1);
|
|
5e6: 00140503 lb a0,1(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
5ea: 02f6d363 bge a3,a5,610 <game_tick+0x104>
|
|
5ee: 87b6 mv a5,a3
|
|
5f0: 07e2 slli a5,a5,0x18
|
|
5f2: 87e1 srai a5,a5,0x18
|
|
pet.happy = clamp100(pet.happy - 1);
|
|
5f4: fff50693 addi a3,a0,-1
|
|
pet.energy = clamp100(pet.energy - 1);
|
|
5f8: 00f40123 sb a5,2(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
5fc: 06400513 li a0,100
|
|
pet.happy = clamp100(pet.happy - 1);
|
|
600: c4818313 addi t1,gp,-952 # 20000044 <pet>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
604: 00d55b63 bge a0,a3,61a <game_tick+0x10e>
|
|
608: 86aa mv a3,a0
|
|
60a: 00d300a3 sb a3,1(t1)
|
|
60e: b795 j 572 <game_tick+0x66>
|
|
610: fff7c693 not a3,a5
|
|
614: 86fd srai a3,a3,0x1f
|
|
616: 8ff5 and a5,a5,a3
|
|
618: bfe1 j 5f0 <game_tick+0xe4>
|
|
61a: fff6c513 not a0,a3
|
|
61e: 857d srai a0,a0,0x1f
|
|
620: 8ee9 and a3,a3,a0
|
|
622: b7e5 j 60a <game_tick+0xfe>
|
|
624: fff6c313 not t1,a3
|
|
628: 41f35313 srai t1,t1,0x1f
|
|
62c: 0066f6b3 and a3,a3,t1
|
|
630: bfa1 j 588 <game_tick+0x7c>
|
|
if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
|
|
632: f6031ee3 bnez t1,5ae <game_tick+0xa2>
|
|
if (pet.hygiene < 20 && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
|
|
636: 00340303 lb t1,3(s0)
|
|
63a: 46cd li a3,19
|
|
63c: 0066cd63 blt a3,t1,656 <game_tick+0x14a>
|
|
640: c919 beqz a0,656 <game_tick+0x14a>
|
|
642: 00140683 lb a3,1(s0)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
646: 06400593 li a1,100
|
|
if (pet.hygiene < 20 && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1);
|
|
64a: 16fd addi a3,a3,-1
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
64c: 0ad5da63 bge a1,a3,700 <game_tick+0x1f4>
|
|
650: 86ae mv a3,a1
|
|
652: 00d400a3 sb a3,1(s0)
|
|
|
|
// health responds to overall wellbeing
|
|
int8_t lo = pet.satiety;
|
|
if (pet.happy < lo) lo = pet.happy;
|
|
if (pet.energy < lo) lo = pet.energy;
|
|
if (pet.hygiene < lo) lo = pet.hygiene;
|
|
656: 00144583 lbu a1,1(s0)
|
|
65a: 86ae mv a3,a1
|
|
65c: 05e2 slli a1,a1,0x18
|
|
65e: 85e1 srai a1,a1,0x18
|
|
660: 00b35363 bge t1,a1,666 <game_tick+0x15a>
|
|
664: 869a mv a3,t1
|
|
666: 01869593 slli a1,a3,0x18
|
|
66a: 85e1 srai a1,a1,0x18
|
|
66c: 00b7d363 bge a5,a1,672 <game_tick+0x166>
|
|
670: 86be mv a3,a5
|
|
672: 87b6 mv a5,a3
|
|
674: 01879693 slli a3,a5,0x18
|
|
678: 86e1 srai a3,a3,0x18
|
|
67a: 00d75363 bge a4,a3,680 <game_tick+0x174>
|
|
67e: 87ba mv a5,a4
|
|
680: 01879713 slli a4,a5,0x18
|
|
684: 8761 srai a4,a4,0x18
|
|
if (lo < 15) pet.health = clamp100(pet.health - 3);
|
|
686: 46b9 li a3,14
|
|
688: 00440783 lb a5,4(s0)
|
|
68c: 08e6c463 blt a3,a4,714 <game_tick+0x208>
|
|
690: 17f5 addi a5,a5,-3
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
692: 06400713 li a4,100
|
|
696: 06f75a63 bge a4,a5,70a <game_tick+0x1fe>
|
|
69a: 87ba mv a5,a4
|
|
69c: 00f40223 sb a5,4(s0)
|
|
notify(N_FOOD, pet.satiety);
|
|
6a0: 00040583 lb a1,0(s0)
|
|
6a4: 4501 li a0,0
|
|
6a6: 3be1 jal 47e <notify>
|
|
notify(N_FUN, pet.happy);
|
|
6a8: 00140583 lb a1,1(s0)
|
|
6ac: 4505 li a0,1
|
|
6ae: 3bc1 jal 47e <notify>
|
|
notify(N_ENGY, pet.energy);
|
|
6b0: 00240583 lb a1,2(s0)
|
|
6b4: 4509 li a0,2
|
|
6b6: 33e1 jal 47e <notify>
|
|
notify(N_WASH, pet.hygiene);
|
|
6b8: 00340583 lb a1,3(s0)
|
|
6bc: 450d li a0,3
|
|
6be: 33c1 jal 47e <notify>
|
|
// a well-kept pet matures: passive XP while every need stays healthy
|
|
if (lo > 50 && !pet.sleeping) add_xp(3);
|
|
|
|
check_notifications();
|
|
|
|
if (pet.health <= 0) {
|
|
6c0: 00440783 lb a5,4(s0)
|
|
6c4: 06f04d63 bgtz a5,73e <game_tick+0x232>
|
|
pet.alive = 0;
|
|
screen = SCR_DEAD;
|
|
6c8: 470d li a4,3
|
|
beep(330, 200); beep(247, 200); beep(165, 400);
|
|
6ca: 0c800593 li a1,200
|
|
6ce: 14a00513 li a0,330
|
|
pet.alive = 0;
|
|
6d2: 00040823 sb zero,16(s0)
|
|
screen = SCR_DEAD;
|
|
6d6: c2e18b23 sb a4,-970(gp) # 20000032 <screen>
|
|
beep(330, 200); beep(247, 200); beep(165, 400);
|
|
6da: 3935 jal 316 <beep>
|
|
6dc: 0c800593 li a1,200
|
|
6e0: 0f700513 li a0,247
|
|
6e4: 390d jal 316 <beep>
|
|
}
|
|
}
|
|
6e6: 4402 lw s0,0(sp)
|
|
6e8: 4092 lw ra,4(sp)
|
|
beep(330, 200); beep(247, 200); beep(165, 400);
|
|
6ea: 19000593 li a1,400
|
|
6ee: 0a500513 li a0,165
|
|
}
|
|
6f2: 0121 addi sp,sp,8
|
|
beep(330, 200); beep(247, 200); beep(165, 400);
|
|
6f4: b10d j 316 <beep>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
6f6: fff6c593 not a1,a3
|
|
6fa: 85fd srai a1,a1,0x1f
|
|
6fc: 8eed and a3,a3,a1
|
|
6fe: b5c9 j 5c0 <game_tick+0xb4>
|
|
700: fff6c593 not a1,a3
|
|
704: 85fd srai a1,a1,0x1f
|
|
706: 8eed and a3,a3,a1
|
|
708: b7a9 j 652 <game_tick+0x146>
|
|
70a: fff7c713 not a4,a5
|
|
70e: 877d srai a4,a4,0x1f
|
|
710: 8ff9 and a5,a5,a4
|
|
712: b769 j 69c <game_tick+0x190>
|
|
else if (lo > 50) pet.health = clamp100(pet.health + 2);
|
|
714: 03200693 li a3,50
|
|
718: f8e6d4e3 bge a3,a4,6a0 <game_tick+0x194>
|
|
71c: 0789 addi a5,a5,2
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
71e: 06400713 li a4,100
|
|
722: 00f75963 bge a4,a5,734 <game_tick+0x228>
|
|
726: 87ba mv a5,a4
|
|
728: 00f40223 sb a5,4(s0)
|
|
if (lo > 50 && !pet.sleeping) add_xp(3);
|
|
72c: fa35 bnez a2,6a0 <game_tick+0x194>
|
|
72e: 450d li a0,3
|
|
730: 3141 jal 3b0 <add_xp>
|
|
732: b7bd j 6a0 <game_tick+0x194>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
734: fff7c713 not a4,a5
|
|
738: 877d srai a4,a4,0x1f
|
|
73a: 8ff9 and a5,a5,a4
|
|
73c: b7f5 j 728 <game_tick+0x21c>
|
|
}
|
|
73e: 4092 lw ra,4(sp)
|
|
740: 4402 lw s0,0(sp)
|
|
742: 0121 addi sp,sp,8
|
|
744: 8082 ret
|
|
|
|
00000746 <draw_center_str>:
|
|
|
|
// ----------------------------------------------------------------- drawing
|
|
static void draw_center_str(int y, const char *s)
|
|
{
|
|
746: 862e mv a2,a1
|
|
int len = 0;
|
|
748: 4701 li a4,0
|
|
while (s[len]) len++;
|
|
74a: 00e607b3 add a5,a2,a4
|
|
74e: 0007c783 lbu a5,0(a5)
|
|
752: ef81 bnez a5,76a <draw_center_str+0x24>
|
|
int x = (SSD1306_W - len * 8) / 2;
|
|
754: 47c1 li a5,16
|
|
756: 8f99 sub a5,a5,a4
|
|
758: 078a slli a5,a5,0x2
|
|
if (x < 0) x = 0;
|
|
75a: fff7c713 not a4,a5
|
|
75e: 877d srai a4,a4,0x1f
|
|
ssd1306_drawstr(x, y, s, 1);
|
|
760: 85aa mv a1,a0
|
|
762: 4685 li a3,1
|
|
764: 00e7f533 and a0,a5,a4
|
|
768: bc45 j 218 <ssd1306_drawstr>
|
|
while (s[len]) len++;
|
|
76a: 0705 addi a4,a4,1
|
|
76c: bff9 j 74a <draw_center_str+0x4>
|
|
|
|
0000076e <read_buttons>:
|
|
|
|
static Buttons read_buttons(void)
|
|
{
|
|
// active-low: pressed reads 0
|
|
Buttons b;
|
|
b.ok = !funDigitalRead(BTN_OK);
|
|
76e: 400117b7 lui a5,0x40011
|
|
772: 4788 lw a0,8(a5)
|
|
b.left = !funDigitalRead(BTN_LEFT);
|
|
774: 40078793 addi a5,a5,1024 # 40011400 <_eusrstack+0x20010c00>
|
|
778: 4798 lw a4,8(a5)
|
|
b.right = !funDigitalRead(BTN_RIGHT);
|
|
77a: 479c lw a5,8(a5)
|
|
b.ok = !funDigitalRead(BTN_OK);
|
|
77c: fff54513 not a0,a0
|
|
b.left = !funDigitalRead(BTN_LEFT);
|
|
780: 8319 srli a4,a4,0x6
|
|
782: fff74713 not a4,a4
|
|
b.right = !funDigitalRead(BTN_RIGHT);
|
|
786: 8395 srli a5,a5,0x5
|
|
788: fff7c793 not a5,a5
|
|
return b;
|
|
78c: 8b05 andi a4,a4,1
|
|
78e: 8905 andi a0,a0,1
|
|
790: 0722 slli a4,a4,0x8
|
|
792: 8b85 andi a5,a5,1
|
|
{
|
|
794: 1171 addi sp,sp,-4
|
|
return b;
|
|
796: 07c2 slli a5,a5,0x10
|
|
798: 8d59 or a0,a0,a4
|
|
}
|
|
79a: 8d5d or a0,a0,a5
|
|
79c: 0111 addi sp,sp,4
|
|
79e: 8082 ret
|
|
|
|
000007a0 <ssd1306_drawFastHLine.part.0>:
|
|
void ssd1306_drawFastHLine(uint32_t x, uint32_t y, uint32_t w, uint32_t color)
|
|
7a0: 87b2 mv a5,a2
|
|
7a2: 1131 addi sp,sp,-20
|
|
if((x+w-1) >= SSD1306_W) w = SSD1306_W-x;
|
|
7a4: fff78713 addi a4,a5,-1
|
|
void ssd1306_drawFastHLine(uint32_t x, uint32_t y, uint32_t w, uint32_t color)
|
|
7a8: 8636 mv a2,a3
|
|
7aa: c806 sw ra,16(sp)
|
|
7ac: c622 sw s0,12(sp)
|
|
7ae: c426 sw s1,8(sp)
|
|
if((x+w-1) >= SSD1306_W) w = SSD1306_W-x;
|
|
7b0: 972a add a4,a4,a0
|
|
7b2: 07f00693 li a3,127
|
|
7b6: 00e6f563 bgeu a3,a4,7c0 <ssd1306_drawFastHLine.part.0+0x20>
|
|
7ba: 08000793 li a5,128
|
|
7be: 8f89 sub a5,a5,a0
|
|
7c0: 00f50433 add s0,a0,a5
|
|
while (w--)
|
|
7c4: 00851763 bne a0,s0,7d2 <ssd1306_drawFastHLine.part.0+0x32>
|
|
}
|
|
7c8: 40c2 lw ra,16(sp)
|
|
7ca: 4432 lw s0,12(sp)
|
|
7cc: 44a2 lw s1,8(sp)
|
|
7ce: 0151 addi sp,sp,20
|
|
7d0: 8082 ret
|
|
ssd1306_drawPixel(x++, y, color);
|
|
7d2: 00150493 addi s1,a0,1
|
|
7d6: c232 sw a2,4(sp)
|
|
7d8: c02e sw a1,0(sp)
|
|
7da: 326d jal 184 <ssd1306_drawPixel>
|
|
7dc: 4612 lw a2,4(sp)
|
|
7de: 4582 lw a1,0(sp)
|
|
7e0: 8526 mv a0,s1
|
|
7e2: b7cd j 7c4 <ssd1306_drawFastHLine.part.0+0x24>
|
|
|
|
000007e4 <ssd1306_drawLine.constprop.0>:
|
|
void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color)
|
|
7e4: fd810113 addi sp,sp,-40
|
|
steep = (gfx_abs(y1 - y0) > gfx_abs(x1 - x0));
|
|
7e8: 40b68333 sub t1,a3,a1
|
|
void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color)
|
|
7ec: d022 sw s0,32(sp)
|
|
7ee: 8436 mv s0,a3
|
|
return (x<0) ? -x : x;
|
|
7f0: 41f35693 srai a3,t1,0x1f
|
|
7f4: 0066c333 xor t1,a3,t1
|
|
steep = (gfx_abs(y1 - y0) > gfx_abs(x1 - x0));
|
|
7f8: 40a602b3 sub t0,a2,a0
|
|
return (x<0) ? -x : x;
|
|
7fc: 40d30333 sub t1,t1,a3
|
|
800: 41f2d693 srai a3,t0,0x1f
|
|
804: 0056c2b3 xor t0,a3,t0
|
|
void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color)
|
|
808: ce26 sw s1,28(sp)
|
|
80a: d206 sw ra,36(sp)
|
|
return (x<0) ? -x : x;
|
|
80c: 40d282b3 sub t0,t0,a3
|
|
void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color)
|
|
810: 84ae mv s1,a1
|
|
812: 87b2 mv a5,a2
|
|
if(steep)
|
|
814: 0062c763 blt t0,t1,822 <ssd1306_drawLine.constprop.0+0x3e>
|
|
818: 86a2 mv a3,s0
|
|
81a: 84aa mv s1,a0
|
|
81c: 8432 mv s0,a2
|
|
81e: 87b6 mv a5,a3
|
|
820: 852e mv a0,a1
|
|
if(x0 > x1)
|
|
822: 00944863 blt s0,s1,832 <ssd1306_drawLine.constprop.0+0x4e>
|
|
826: 86be mv a3,a5
|
|
828: 87aa mv a5,a0
|
|
82a: 8536 mv a0,a3
|
|
82c: 86a2 mv a3,s0
|
|
82e: 8426 mv s0,s1
|
|
830: 84b6 mv s1,a3
|
|
deltay = gfx_abs(y1 - y0);
|
|
832: 40f503b3 sub t2,a0,a5
|
|
return (x<0) ? -x : x;
|
|
836: 41f3d693 srai a3,t2,0x1f
|
|
deltax = x1 - x0;
|
|
83a: 40848733 sub a4,s1,s0
|
|
return (x<0) ? -x : x;
|
|
83e: 0076c3b3 xor t2,a3,t2
|
|
842: 40d383b3 sub t2,t2,a3
|
|
error = deltax/2;
|
|
846: 01f75693 srli a3,a4,0x1f
|
|
84a: 96ba add a3,a3,a4
|
|
deltax = x1 - x0;
|
|
84c: c23a sw a4,4(sp)
|
|
ystep = -1;
|
|
84e: 577d li a4,-1
|
|
850: c03a sw a4,0(sp)
|
|
error = deltax/2;
|
|
852: 8685 srai a3,a3,0x1
|
|
if(y0 < y1)
|
|
854: 00a7d463 bge a5,a0,85c <ssd1306_drawLine.constprop.0+0x78>
|
|
ystep = 1;
|
|
858: 4705 li a4,1
|
|
85a: c03a sw a4,0(sp)
|
|
for(x=x0;x<=x1;x++)
|
|
85c: 0084d863 bge s1,s0,86c <ssd1306_drawLine.constprop.0+0x88>
|
|
}
|
|
860: 5092 lw ra,36(sp)
|
|
862: 5402 lw s0,32(sp)
|
|
864: 44f2 lw s1,28(sp)
|
|
866: 02810113 addi sp,sp,40
|
|
86a: 8082 ret
|
|
86c: cc36 sw a3,24(sp)
|
|
86e: ca1e sw t2,20(sp)
|
|
870: c816 sw t0,16(sp)
|
|
872: c61a sw t1,12(sp)
|
|
ssd1306_drawPixel(y, x, color);
|
|
874: 4601 li a2,0
|
|
if(steep)
|
|
876: 0262d563 bge t0,t1,8a0 <ssd1306_drawLine.constprop.0+0xbc>
|
|
ssd1306_drawPixel(y, x, color);
|
|
87a: 853e mv a0,a5
|
|
87c: 85a2 mv a1,s0
|
|
87e: c43e sw a5,8(sp)
|
|
880: 3211 jal 184 <ssd1306_drawPixel>
|
|
882: 47a2 lw a5,8(sp)
|
|
884: 4332 lw t1,12(sp)
|
|
886: 42c2 lw t0,16(sp)
|
|
888: 43d2 lw t2,20(sp)
|
|
88a: 46e2 lw a3,24(sp)
|
|
error = error - deltay;
|
|
88c: 407686b3 sub a3,a3,t2
|
|
if(error < 0)
|
|
890: 0006d663 bgez a3,89c <ssd1306_drawLine.constprop.0+0xb8>
|
|
y = y + ystep;
|
|
894: 4702 lw a4,0(sp)
|
|
896: 97ba add a5,a5,a4
|
|
error = error + deltax;
|
|
898: 4712 lw a4,4(sp)
|
|
89a: 96ba add a3,a3,a4
|
|
for(x=x0;x<=x1;x++)
|
|
89c: 0405 addi s0,s0,1
|
|
89e: bf7d j 85c <ssd1306_drawLine.constprop.0+0x78>
|
|
ssd1306_drawPixel(x, y, color);
|
|
8a0: 85be mv a1,a5
|
|
8a2: 8522 mv a0,s0
|
|
8a4: c43e sw a5,8(sp)
|
|
8a6: 38f9 jal 184 <ssd1306_drawPixel>
|
|
8a8: 46e2 lw a3,24(sp)
|
|
8aa: 43d2 lw t2,20(sp)
|
|
8ac: 42c2 lw t0,16(sp)
|
|
8ae: 4332 lw t1,12(sp)
|
|
8b0: 47a2 lw a5,8(sp)
|
|
8b2: bfe9 j 88c <ssd1306_drawLine.constprop.0+0xa8>
|
|
|
|
000008b4 <ssd1306_drawFastVLine.constprop.0>:
|
|
if((x >= SSD1306_W) || (y >= SSD1306_H)) return;
|
|
8b4: 07f00793 li a5,127
|
|
8b8: 04a7c063 blt a5,a0,8f8 <ssd1306_drawFastVLine.constprop.0+0x44>
|
|
void ssd1306_drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color)
|
|
8bc: 1141 addi sp,sp,-16
|
|
8be: c422 sw s0,8(sp)
|
|
8c0: c606 sw ra,12(sp)
|
|
8c2: c226 sw s1,4(sp)
|
|
if((y+h-1) >= SSD1306_H) h = SSD1306_H-y;
|
|
8c4: 00c587b3 add a5,a1,a2
|
|
8c8: 04000713 li a4,64
|
|
8cc: 842e mv s0,a1
|
|
8ce: 00f75463 bge a4,a5,8d6 <ssd1306_drawFastVLine.constprop.0+0x22>
|
|
8d2: 40b70633 sub a2,a4,a1
|
|
8d6: 008604b3 add s1,a2,s0
|
|
while(h--)
|
|
8da: 00941763 bne s0,s1,8e8 <ssd1306_drawFastVLine.constprop.0+0x34>
|
|
}
|
|
8de: 40b2 lw ra,12(sp)
|
|
8e0: 4422 lw s0,8(sp)
|
|
8e2: 4492 lw s1,4(sp)
|
|
8e4: 0141 addi sp,sp,16
|
|
8e6: 8082 ret
|
|
ssd1306_drawPixel(x, y++, color);
|
|
8e8: 85a2 mv a1,s0
|
|
8ea: 4605 li a2,1
|
|
8ec: c02a sw a0,0(sp)
|
|
8ee: 897ff0ef jal 184 <ssd1306_drawPixel>
|
|
8f2: 4502 lw a0,0(sp)
|
|
8f4: 0405 addi s0,s0,1
|
|
8f6: b7d5 j 8da <ssd1306_drawFastVLine.constprop.0+0x26>
|
|
8f8: 8082 ret
|
|
|
|
000008fa <ssd1306_drawRect.constprop.0>:
|
|
void ssd1306_drawRect(int32_t x, int32_t y, uint32_t w, uint32_t h, uint32_t color)
|
|
8fa: 1131 addi sp,sp,-20
|
|
8fc: c426 sw s1,8(sp)
|
|
8fe: 84b2 mv s1,a2
|
|
ssd1306_drawFastVLine(x, y, h, color);
|
|
900: 8636 mv a2,a3
|
|
void ssd1306_drawRect(int32_t x, int32_t y, uint32_t w, uint32_t h, uint32_t color)
|
|
902: c806 sw ra,16(sp)
|
|
904: c236 sw a3,4(sp)
|
|
906: c622 sw s0,12(sp)
|
|
908: c02e sw a1,0(sp)
|
|
90a: 842a mv s0,a0
|
|
ssd1306_drawFastVLine(x, y, h, color);
|
|
90c: 3765 jal 8b4 <ssd1306_drawFastVLine.constprop.0>
|
|
ssd1306_drawFastVLine(x+w-1, y, h, color);
|
|
90e: 4612 lw a2,4(sp)
|
|
910: 4582 lw a1,0(sp)
|
|
912: fff48513 addi a0,s1,-1
|
|
916: 9522 add a0,a0,s0
|
|
918: 3f71 jal 8b4 <ssd1306_drawFastVLine.constprop.0>
|
|
91a: 4582 lw a1,0(sp)
|
|
91c: 4685 li a3,1
|
|
91e: 8626 mv a2,s1
|
|
920: 8522 mv a0,s0
|
|
922: 3dbd jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
ssd1306_drawFastHLine(x, y+h-1, w, color);
|
|
924: 4782 lw a5,0(sp)
|
|
926: fff78593 addi a1,a5,-1
|
|
92a: 4792 lw a5,4(sp)
|
|
92c: 95be add a1,a1,a5
|
|
if((x >= SSD1306_W) || (y >= SSD1306_H)) return;
|
|
92e: 03f00793 li a5,63
|
|
932: 00b7ea63 bltu a5,a1,946 <ssd1306_drawRect.constprop.0+0x4c>
|
|
936: 8522 mv a0,s0
|
|
}
|
|
938: 4432 lw s0,12(sp)
|
|
93a: 40c2 lw ra,16(sp)
|
|
93c: 8626 mv a2,s1
|
|
93e: 44a2 lw s1,8(sp)
|
|
940: 4685 li a3,1
|
|
942: 0151 addi sp,sp,20
|
|
944: bdb1 j 7a0 <ssd1306_drawFastHLine.part.0>
|
|
946: 40c2 lw ra,16(sp)
|
|
948: 4432 lw s0,12(sp)
|
|
94a: 44a2 lw s1,8(sp)
|
|
94c: 0151 addi sp,sp,20
|
|
94e: 8082 ret
|
|
|
|
00000950 <draw_bar>:
|
|
{
|
|
950: 1151 addi sp,sp,-12
|
|
952: c222 sw s0,4(sp)
|
|
954: c026 sw s1,0(sp)
|
|
956: 842a mv s0,a0
|
|
958: 84b2 mv s1,a2
|
|
ssd1306_drawstr(0, y, label, 1);
|
|
95a: 4685 li a3,1
|
|
95c: 862e mv a2,a1
|
|
95e: 85aa mv a1,a0
|
|
960: 4501 li a0,0
|
|
{
|
|
962: c406 sw ra,8(sp)
|
|
ssd1306_drawstr(0, y, label, 1);
|
|
964: 8b5ff0ef jal 218 <ssd1306_drawstr>
|
|
ssd1306_drawRect(bx, y, bw, 7, 1);
|
|
968: 03000513 li a0,48
|
|
96c: 469d li a3,7
|
|
96e: 04c00613 li a2,76
|
|
972: 85a2 mv a1,s0
|
|
974: 3759 jal 8fa <ssd1306_drawRect.constprop.0>
|
|
int fill = (val * (bw - 2)) / 100;
|
|
976: 00349513 slli a0,s1,0x3
|
|
97a: 9526 add a0,a0,s1
|
|
97c: 050a slli a0,a0,0x2
|
|
97e: 9526 add a0,a0,s1
|
|
980: 0506 slli a0,a0,0x1
|
|
if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1);
|
|
982: 06300793 li a5,99
|
|
986: 02a7d463 bge a5,a0,9ae <draw_bar+0x5e>
|
|
int fill = (val * (bw - 2)) / 100;
|
|
98a: 06400593 li a1,100
|
|
98e: f12ff0ef jal a0 <__divsi3>
|
|
if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1);
|
|
992: 4705 li a4,1
|
|
994: 00e405b3 add a1,s0,a4
|
|
}
|
|
998: 4412 lw s0,4(sp)
|
|
99a: 40a2 lw ra,8(sp)
|
|
99c: 4482 lw s1,0(sp)
|
|
if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1);
|
|
99e: 0ff57613 zext.b a2,a0
|
|
9a2: 4695 li a3,5
|
|
9a4: 03100513 li a0,49
|
|
}
|
|
9a8: 0131 addi sp,sp,12
|
|
if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1);
|
|
9aa: 817ff06f j 1c0 <ssd1306_fillRect>
|
|
}
|
|
9ae: 40a2 lw ra,8(sp)
|
|
9b0: 4412 lw s0,4(sp)
|
|
9b2: 4482 lw s1,0(sp)
|
|
9b4: 0131 addi sp,sp,12
|
|
9b6: 8082 ret
|
|
|
|
000009b8 <ssd1306_drawImage.constprop.0>:
|
|
void ssd1306_drawImage(uint32_t x, uint32_t y, const unsigned char* input, uint32_t width, uint32_t height, uint32_t color_mode) {
|
|
9b8: fd810113 addi sp,sp,-40
|
|
9bc: 00e587b3 add a5,a1,a4
|
|
9c0: d222 sw s0,36(sp)
|
|
9c2: d026 sw s1,32(sp)
|
|
9c4: c82a sw a0,16(sp)
|
|
9c6: ca32 sw a2,20(sp)
|
|
uint32_t bytes_to_draw = width / 8;
|
|
9c8: 0036d413 srli s0,a3,0x3
|
|
9cc: c63e sw a5,12(sp)
|
|
9ce: 4381 li t2,0
|
|
if (y_absolute >= SSD1306_H) {
|
|
9d0: 03f00793 li a5,63
|
|
9d4: 08b7ed63 bltu a5,a1,a6e <ssd1306_drawImage.constprop.0+0xb6>
|
|
uint32_t v_mask = 1 << (y_absolute & 7);
|
|
9d8: 0075f793 andi a5,a1,7
|
|
9dc: 4705 li a4,1
|
|
9de: 00f717b3 sll a5,a4,a5
|
|
9e2: c03e sw a5,0(sp)
|
|
uint32_t input_byte = input[byte + line * bytes_to_draw];
|
|
9e4: 47d2 lw a5,20(sp)
|
|
for (uint32_t byte = 0; byte < bytes_to_draw; byte++) {
|
|
9e6: 4681 li a3,0
|
|
uint32_t input_byte = input[byte + line * bytes_to_draw];
|
|
9e8: 979e add a5,a5,t2
|
|
9ea: cc3e sw a5,24(sp)
|
|
buffer_addr = x_absolute + SSD1306_W * (y_absolute / 8);
|
|
9ec: 0035d793 srli a5,a1,0x3
|
|
9f0: 079e slli a5,a5,0x7
|
|
9f2: ce3e sw a5,28(sp)
|
|
uint32_t input_byte = input[byte + line * bytes_to_draw];
|
|
9f4: 47e2 lw a5,24(sp)
|
|
x_absolute = x + 8 * byte + pixel;
|
|
9f6: 00369293 slli t0,a3,0x3
|
|
for (pixel = 0; pixel < 8; pixel++) {
|
|
9fa: 4701 li a4,0
|
|
uint32_t input_byte = input[byte + line * bytes_to_draw];
|
|
9fc: 97b6 add a5,a5,a3
|
|
9fe: 0007c783 lbu a5,0(a5)
|
|
a02: c23e sw a5,4(sp)
|
|
x_absolute = x + 8 * byte + pixel;
|
|
a04: 47c2 lw a5,16(sp)
|
|
a06: 92be add t0,t0,a5
|
|
buffer_addr = x_absolute + SSD1306_W * (y_absolute / 8);
|
|
a08: 47f2 lw a5,28(sp)
|
|
a0a: 005784b3 add s1,a5,t0
|
|
if (x_absolute >= SSD1306_W) {
|
|
a0e: 00e287b3 add a5,t0,a4
|
|
a12: 07f00613 li a2,127
|
|
a16: 04f66463 bltu a2,a5,a5e <ssd1306_drawImage.constprop.0+0xa6>
|
|
uint8_t input_pixel = input_byte & (0x80 >> pixel); // MSB first (default)
|
|
a1a: 4512 lw a0,4(sp)
|
|
a1c: 08000793 li a5,128
|
|
a20: 40e7d7b3 sra a5,a5,a4
|
|
a24: 8fe9 and a5,a5,a0
|
|
buffer_addr = x_absolute + SSD1306_W * (y_absolute / 8);
|
|
a26: 00e48633 add a2,s1,a4
|
|
ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0);
|
|
a2a: c5c18513 addi a0,gp,-932 # 20000058 <ssd1306_buffer>
|
|
a2e: 9532 add a0,a0,a2
|
|
a30: 00014303 lbu t1,0(sp)
|
|
uint8_t input_pixel = input_byte & (0x80 >> pixel); // MSB first (default)
|
|
a34: c43e sw a5,8(sp)
|
|
ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0);
|
|
a36: 00054783 lbu a5,0(a0)
|
|
a3a: fff34613 not a2,t1
|
|
for (pixel = 0; pixel < 8; pixel++) {
|
|
a3e: 0705 addi a4,a4,1
|
|
ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0);
|
|
a40: 8e7d and a2,a2,a5
|
|
a42: 47a2 lw a5,8(sp)
|
|
a44: 00f037b3 snez a5,a5
|
|
a48: 40f007b3 neg a5,a5
|
|
a4c: 00f37333 and t1,t1,a5
|
|
a50: 00666633 or a2,a2,t1
|
|
a54: 00c50023 sb a2,0(a0)
|
|
for (pixel = 0; pixel < 8; pixel++) {
|
|
a58: 47a1 li a5,8
|
|
a5a: faf71ae3 bne a4,a5,a0e <ssd1306_drawImage.constprop.0+0x56>
|
|
for (uint32_t byte = 0; byte < bytes_to_draw; byte++) {
|
|
a5e: 0685 addi a3,a3,1
|
|
a60: f8d41ae3 bne s0,a3,9f4 <ssd1306_drawImage.constprop.0+0x3c>
|
|
for (uint32_t line = 0; line < height; line++) {
|
|
a64: 47b2 lw a5,12(sp)
|
|
a66: 0585 addi a1,a1,1
|
|
a68: 93a2 add t2,t2,s0
|
|
a6a: f6b793e3 bne a5,a1,9d0 <ssd1306_drawImage.constprop.0+0x18>
|
|
}
|
|
a6e: 5412 lw s0,36(sp)
|
|
a70: 5482 lw s1,32(sp)
|
|
a72: 02810113 addi sp,sp,40
|
|
a76: 8082 ret
|
|
|
|
00000a78 <ssd1306_i2c_send.constprop.0>:
|
|
uint8_t ssd1306_i2c_send(uint8_t addr, const uint8_t *data, int sz)
|
|
{
|
|
int32_t timeout;
|
|
|
|
// wait for not busy
|
|
timeout = TIMEOUT_MAX;
|
|
a78: 6761 lui a4,0x18
|
|
while((I2C1->STAR2 & I2C_STAR2_BUSY) && (timeout--));
|
|
a7a: 400057b7 lui a5,0x40005
|
|
timeout = TIMEOUT_MAX;
|
|
a7e: 6a070713 addi a4,a4,1696 # 186a0 <tama.c.7f472170+0x14663>
|
|
while((I2C1->STAR2 & I2C_STAR2_BUSY) && (timeout--));
|
|
a82: 40078793 addi a5,a5,1024 # 40005400 <_eusrstack+0x20004c00>
|
|
a86: 567d li a2,-1
|
|
a88: 0187d683 lhu a3,24(a5)
|
|
a8c: 8a89 andi a3,a3,2
|
|
a8e: c2f9 beqz a3,b54 <ssd1306_i2c_send.constprop.0+0xdc>
|
|
a90: 177d addi a4,a4,-1
|
|
a92: fec71be3 bne a4,a2,a88 <ssd1306_i2c_send.constprop.0+0x10>
|
|
uint8_t ssd1306_i2c_send(uint8_t addr, const uint8_t *data, int sz)
|
|
a96: 1171 addi sp,sp,-4
|
|
a98: c006 sw ra,0(sp)
|
|
ssd1306_i2c_setup();
|
|
a9a: e96ff0ef jal 130 <ssd1306_i2c_setup>
|
|
// set STOP condition
|
|
I2C1->CTLR1 |= I2C_CTLR1_STOP;
|
|
|
|
// we're happy
|
|
return 0;
|
|
}
|
|
a9e: 4082 lw ra,0(sp)
|
|
return ssd1306_i2c_error(0);
|
|
aa0: 4505 li a0,1
|
|
}
|
|
aa2: 0111 addi sp,sp,4
|
|
aa4: 8082 ret
|
|
aa6: 67e1 lui a5,0x18
|
|
aa8: 6a178793 addi a5,a5,1697 # 186a1 <tama.c.7f472170+0x14664>
|
|
while(!(I2C1->STAR1 & I2C_STAR1_TXE) && (timeout--));
|
|
aac: 01475683 lhu a3,20(a4)
|
|
ab0: 0806f693 andi a3,a3,128
|
|
ab4: e681 bnez a3,abc <ssd1306_i2c_send.constprop.0+0x44>
|
|
ab6: 17fd addi a5,a5,-1
|
|
ab8: fbf5 bnez a5,aac <ssd1306_i2c_send.constprop.0+0x34>
|
|
aba: bff1 j a96 <ssd1306_i2c_send.constprop.0+0x1e>
|
|
I2C1->DATAR = *data++;
|
|
abc: 00054783 lbu a5,0(a0)
|
|
ac0: 0505 addi a0,a0,1
|
|
ac2: 00f71823 sh a5,16(a4)
|
|
while(sz--)
|
|
ac6: feb510e3 bne a0,a1,aa6 <ssd1306_i2c_send.constprop.0+0x2e>
|
|
timeout = TIMEOUT_MAX;
|
|
aca: 66e1 lui a3,0x18
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
acc: 40005737 lui a4,0x40005
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (timeout--));
|
|
ad0: 00070637 lui a2,0x70
|
|
timeout = TIMEOUT_MAX;
|
|
ad4: 6a068693 addi a3,a3,1696 # 186a0 <tama.c.7f472170+0x14663>
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
ad8: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00>
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (timeout--));
|
|
adc: 08460613 addi a2,a2,132 # 70084 <tama.c.7f472170+0x6c047>
|
|
ae0: 55fd li a1,-1
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
ae2: 01475503 lhu a0,20(a4)
|
|
ae6: 01875783 lhu a5,24(a4)
|
|
aea: 07c2 slli a5,a5,0x10
|
|
aec: 8fc9 or a5,a5,a0
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (timeout--));
|
|
aee: 8ff1 and a5,a5,a2
|
|
af0: 00c78663 beq a5,a2,afc <ssd1306_i2c_send.constprop.0+0x84>
|
|
af4: 16fd addi a3,a3,-1
|
|
af6: feb696e3 bne a3,a1,ae2 <ssd1306_i2c_send.constprop.0+0x6a>
|
|
afa: bf71 j a96 <ssd1306_i2c_send.constprop.0+0x1e>
|
|
I2C1->CTLR1 |= I2C_CTLR1_STOP;
|
|
afc: 00075783 lhu a5,0(a4)
|
|
return 0;
|
|
b00: 4501 li a0,0
|
|
I2C1->CTLR1 |= I2C_CTLR1_STOP;
|
|
b02: 2007e793 ori a5,a5,512
|
|
b06: 00f71023 sh a5,0(a4)
|
|
}
|
|
b0a: 8082 ret
|
|
while(!(I2C1->STAR1 & I2C_STAR1_TXE) && (timeout--));
|
|
b0c: 40005737 lui a4,0x40005
|
|
b10: 95aa add a1,a1,a0
|
|
b12: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00>
|
|
b16: bf45 j ac6 <ssd1306_i2c_send.constprop.0+0x4e>
|
|
I2C1->DATAR = addr<<1;
|
|
b18: 07800793 li a5,120
|
|
b1c: 00f71823 sh a5,16(a4)
|
|
timeout = TIMEOUT_MAX;
|
|
b20: 6661 lui a2,0x18
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b22: 400056b7 lui a3,0x40005
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (timeout--));
|
|
b26: 00070737 lui a4,0x70
|
|
timeout = TIMEOUT_MAX;
|
|
b2a: 6a060613 addi a2,a2,1696 # 186a0 <tama.c.7f472170+0x14663>
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b2e: 40068693 addi a3,a3,1024 # 40005400 <_eusrstack+0x20004c00>
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (timeout--));
|
|
b32: 08270713 addi a4,a4,130 # 70082 <tama.c.7f472170+0x6c045>
|
|
b36: 537d li t1,-1
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b38: 0146d283 lhu t0,20(a3)
|
|
b3c: 0186d783 lhu a5,24(a3)
|
|
b40: 07c2 slli a5,a5,0x10
|
|
b42: 0057e7b3 or a5,a5,t0
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (timeout--));
|
|
b46: 8ff9 and a5,a5,a4
|
|
b48: fce782e3 beq a5,a4,b0c <ssd1306_i2c_send.constprop.0+0x94>
|
|
b4c: 167d addi a2,a2,-1
|
|
b4e: fe6615e3 bne a2,t1,b38 <ssd1306_i2c_send.constprop.0+0xc0>
|
|
b52: b791 j a96 <ssd1306_i2c_send.constprop.0+0x1e>
|
|
I2C1->CTLR1 |= I2C_CTLR1_START;
|
|
b54: 0007d703 lhu a4,0(a5)
|
|
timeout = TIMEOUT_MAX;
|
|
b58: 66e1 lui a3,0x18
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_MODE_SELECT)) && (timeout--));
|
|
b5a: 00030637 lui a2,0x30
|
|
I2C1->CTLR1 |= I2C_CTLR1_START;
|
|
b5e: 10076713 ori a4,a4,256
|
|
b62: 00e79023 sh a4,0(a5)
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b66: 40005737 lui a4,0x40005
|
|
timeout = TIMEOUT_MAX;
|
|
b6a: 6a068693 addi a3,a3,1696 # 186a0 <tama.c.7f472170+0x14663>
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b6e: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00>
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_MODE_SELECT)) && (timeout--));
|
|
b72: 0605 addi a2,a2,1 # 30001 <tama.c.7f472170+0x2bfc4>
|
|
b74: 537d li t1,-1
|
|
uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16);
|
|
b76: 01475283 lhu t0,20(a4)
|
|
b7a: 01875783 lhu a5,24(a4)
|
|
b7e: 07c2 slli a5,a5,0x10
|
|
b80: 0057e7b3 or a5,a5,t0
|
|
while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_MODE_SELECT)) && (timeout--));
|
|
b84: 8ff1 and a5,a5,a2
|
|
b86: f8c789e3 beq a5,a2,b18 <ssd1306_i2c_send.constprop.0+0xa0>
|
|
b8a: 16fd addi a3,a3,-1
|
|
b8c: fe6695e3 bne a3,t1,b76 <ssd1306_i2c_send.constprop.0+0xfe>
|
|
b90: b719 j a96 <ssd1306_i2c_send.constprop.0+0x1e>
|
|
|
|
00000b92 <ssd1306_cmd>:
|
|
{
|
|
b92: fd810113 addi sp,sp,-40
|
|
|
|
/* build command or data packets */
|
|
if(cmd)
|
|
{
|
|
pkt[0] = 0;
|
|
pkt[1] = *data;
|
|
b96: 00a100a3 sb a0,1(sp)
|
|
else
|
|
{
|
|
pkt[0] = 0x40;
|
|
memcpy(&pkt[1], data, sz);
|
|
}
|
|
return ssd1306_i2c_send(SSD1306_I2C_ADDR, pkt, sz+1);
|
|
b9a: 4589 li a1,2
|
|
b9c: 850a mv a0,sp
|
|
b9e: d206 sw ra,36(sp)
|
|
pkt[0] = 0;
|
|
ba0: 00010023 sb zero,0(sp)
|
|
return ssd1306_i2c_send(SSD1306_I2C_ADDR, pkt, sz+1);
|
|
ba4: 3dd1 jal a78 <ssd1306_i2c_send.constprop.0>
|
|
}
|
|
ba6: 5092 lw ra,36(sp)
|
|
ba8: 02810113 addi sp,sp,40
|
|
bac: 8082 ret
|
|
|
|
00000bae <handle_reset>:
|
|
asm volatile( "\n\
|
|
bae: 20000197 auipc gp,0x20000
|
|
bb2: 84e18193 addi gp,gp,-1970 # 200003fc <__global_pointer$>
|
|
bb6: 40418113 addi sp,gp,1028 # 20000800 <_eusrstack>
|
|
bba: 6509 lui a0,0x2
|
|
bbc: 88050513 addi a0,a0,-1920 # 1880 <main+0xb76>
|
|
bc0: 30051073 csrw mstatus,a0
|
|
bc4: fffff697 auipc a3,0xfffff
|
|
bc8: 43c68693 addi a3,a3,1084 # 0 <InterruptVector>
|
|
bcc: 0036e693 ori a3,a3,3
|
|
bd0: 30569073 csrw mtvec,a3
|
|
asm volatile(
|
|
bd4: c2818513 addi a0,gp,-984 # 20000024 <anim_exp>
|
|
bd8: 05c18593 addi a1,gp,92 # 20000458 <_ebss>
|
|
bdc: 4601 li a2,0
|
|
bde: 00b55663 bge a0,a1,bea <handle_reset+0x3c>
|
|
be2: c110 sw a2,0(a0)
|
|
be4: 0511 addi a0,a0,4
|
|
be6: feb54ee3 blt a0,a1,be2 <handle_reset+0x34>
|
|
bea: 00002517 auipc a0,0x2
|
|
bee: 40650513 addi a0,a0,1030 # 2ff0 <_data_lma>
|
|
bf2: c0418593 addi a1,gp,-1020 # 20000000 <timeout_idx>
|
|
bf6: c2818613 addi a2,gp,-984 # 20000024 <anim_exp>
|
|
bfa: 00c58863 beq a1,a2,c0a <handle_reset+0x5c>
|
|
bfe: 4114 lw a3,0(a0)
|
|
c00: c194 sw a3,0(a1)
|
|
c02: 0511 addi a0,a0,4
|
|
c04: 0591 addi a1,a1,4
|
|
c06: fec59ae3 bne a1,a2,bfa <handle_reset+0x4c>
|
|
SysTick->CTLR = 1;
|
|
c0a: e000f7b7 lui a5,0xe000f
|
|
c0e: 4705 li a4,1
|
|
c10: c398 sw a4,0(a5)
|
|
asm volatile(
|
|
c12: 6785 lui a5,0x1
|
|
c14: d0a78793 addi a5,a5,-758 # d0a <main>
|
|
c18: 34179073 csrw mepc,a5
|
|
c1c: 30200073 mret
|
|
|
|
00000c20 <ADC1_2_IRQHandler>:
|
|
asm volatile( "1: j 1b" );
|
|
c20: a001 j c20 <ADC1_2_IRQHandler>
|
|
|
|
00000c22 <NMI_Handler>:
|
|
RCC->INTR |= RCC_CSSC; // clear the clock security int flag
|
|
c22: 40021737 lui a4,0x40021
|
|
c26: 471c lw a5,8(a4)
|
|
c28: 008006b7 lui a3,0x800
|
|
c2c: 8fd5 or a5,a5,a3
|
|
c2e: c71c sw a5,8(a4)
|
|
|
|
00000c30 <memset>:
|
|
WEAK void *memset(void *dest, int c, size_t n) { unsigned char *s = dest; for (; n; n--, s++) *s = c; return dest; }
|
|
c30: 962a add a2,a2,a0
|
|
c32: 87aa mv a5,a0
|
|
c34: 00c79363 bne a5,a2,c3a <memset+0xa>
|
|
c38: 8082 ret
|
|
c3a: 00b78023 sb a1,0(a5)
|
|
c3e: 0785 addi a5,a5,1
|
|
c40: bfd5 j c34 <memset+0x4>
|
|
|
|
00000c42 <ssd1306_setbuf.constprop.0>:
|
|
memset(ssd1306_buffer, color ? 0xFF : 0x00, sizeof(ssd1306_buffer));
|
|
c42: 40000613 li a2,1024
|
|
c46: 4581 li a1,0
|
|
c48: c5c18513 addi a0,gp,-932 # 20000058 <ssd1306_buffer>
|
|
c4c: b7d5 j c30 <memset>
|
|
|
|
00000c4e <memcpy>:
|
|
for (; n; n--) *d++ = *s++;
|
|
c4e: 4781 li a5,0
|
|
c50: 00f61363 bne a2,a5,c56 <memcpy+0x8>
|
|
}
|
|
c54: 8082 ret
|
|
for (; n; n--) *d++ = *s++;
|
|
c56: 00f58733 add a4,a1,a5
|
|
c5a: 00074683 lbu a3,0(a4) # 40021000 <_eusrstack+0x20020800>
|
|
c5e: 00f50733 add a4,a0,a5
|
|
c62: 0785 addi a5,a5,1
|
|
c64: 00d70023 sb a3,0(a4)
|
|
c68: b7e5 j c50 <memcpy+0x2>
|
|
|
|
00000c6a <ssd1306_refresh>:
|
|
{
|
|
c6a: 7179 addi sp,sp,-48
|
|
ssd1306_cmd(SSD1306_COLUMNADDR);
|
|
c6c: 02100513 li a0,33
|
|
{
|
|
c70: d606 sw ra,44(sp)
|
|
c72: d422 sw s0,40(sp)
|
|
c74: d226 sw s1,36(sp)
|
|
ssd1306_cmd(SSD1306_COLUMNADDR);
|
|
c76: 3f31 jal b92 <ssd1306_cmd>
|
|
ssd1306_cmd(SSD1306_OFFSET); // Column start address (0 = reset)
|
|
c78: 4501 li a0,0
|
|
c7a: 3f21 jal b92 <ssd1306_cmd>
|
|
ssd1306_cmd(SSD1306_OFFSET+SSD1306_W-1); // Column end address (127 = reset)
|
|
c7c: 07f00513 li a0,127
|
|
c80: 3f09 jal b92 <ssd1306_cmd>
|
|
ssd1306_cmd(SSD1306_PAGEADDR);
|
|
c82: 02200513 li a0,34
|
|
c86: 3731 jal b92 <ssd1306_cmd>
|
|
ssd1306_cmd(0); // Page start address (0 = reset)
|
|
c88: 4501 li a0,0
|
|
c8a: 3721 jal b92 <ssd1306_cmd>
|
|
ssd1306_cmd(7); // Page end address
|
|
c8c: 451d li a0,7
|
|
c8e: c5c18413 addi s0,gp,-932 # 20000058 <ssd1306_buffer>
|
|
c92: 3701 jal b92 <ssd1306_cmd>
|
|
for(i=0;i<sizeof(ssd1306_buffer);i+=SSD1306_PSZ)
|
|
c94: 40040493 addi s1,s0,1024
|
|
pkt[0] = 0x40;
|
|
c98: 04000793 li a5,64
|
|
memcpy(&pkt[1], data, sz);
|
|
c9c: 85a2 mv a1,s0
|
|
c9e: 02000613 li a2,32
|
|
ca2: 00110513 addi a0,sp,1
|
|
pkt[0] = 0x40;
|
|
ca6: 00f10023 sb a5,0(sp)
|
|
memcpy(&pkt[1], data, sz);
|
|
caa: 3755 jal c4e <memcpy>
|
|
return ssd1306_i2c_send(SSD1306_I2C_ADDR, pkt, sz+1);
|
|
cac: 02100593 li a1,33
|
|
cb0: 850a mv a0,sp
|
|
cb2: 02040413 addi s0,s0,32
|
|
cb6: 33c9 jal a78 <ssd1306_i2c_send.constprop.0>
|
|
cb8: fe9410e3 bne s0,s1,c98 <ssd1306_refresh+0x2e>
|
|
}
|
|
cbc: 50b2 lw ra,44(sp)
|
|
cbe: 5422 lw s0,40(sp)
|
|
cc0: 5492 lw s1,36(sp)
|
|
cc2: 6145 addi sp,sp,48
|
|
cc4: 8082 ret
|
|
|
|
00000cc6 <SystemInit>:
|
|
//#define BASE_CTLR (((FUNCONF_HSITRIM) << 3) | HSEBYP | RCC_CSS) // disable HSI in HSE modes
|
|
|
|
// Flash latency settings.
|
|
#if defined(CH32V003)
|
|
#if FUNCONF_SYSTEM_CORE_CLOCK > 25000000
|
|
FLASH->ACTLR = FLASH_ACTLR_LATENCY_1; // +1 Cycle Latency
|
|
cc6: 400227b7 lui a5,0x40022
|
|
cca: 4705 li a4,1
|
|
ccc: c398 sw a4,0(a5)
|
|
#elif defined(FUNCONF_USE_HSI) && FUNCONF_USE_HSI
|
|
#if defined(CH32V30x) || defined(CH32V20x) || defined(CH32L103) || defined(CH32V10x)
|
|
EXTEN->EXTEN_CTR |= EXTEN_PLL_HSI_PRE;
|
|
#endif
|
|
#if defined(FUNCONF_USE_PLL) && FUNCONF_USE_PLL
|
|
RCC->CFGR0 = BASE_CFGR0;
|
|
cce: 400217b7 lui a5,0x40021
|
|
RCC->CTLR = BASE_CTLR | RCC_HSION | RCC_PLLON; // Use HSI, enable PLL.
|
|
cd2: 01080737 lui a4,0x1080
|
|
RCC->CFGR0 = BASE_CFGR0;
|
|
cd6: 0007a223 sw zero,4(a5) # 40021004 <_eusrstack+0x20020804>
|
|
RCC->CTLR = BASE_CTLR | RCC_HSION | RCC_PLLON; // Use HSI, enable PLL.
|
|
cda: 08170713 addi a4,a4,129 # 1080081 <tama.c.7f472170+0x107c044>
|
|
cde: c398 sw a4,0(a5)
|
|
FLASH->ACTLR = FLASH_ACTLR_LATENCY_0;
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef CH5xx
|
|
RCC->INTR = 0x009F0000; // Clear PLL, CSSC, HSE, HSI and LSI ready flags.
|
|
ce0: 009f0737 lui a4,0x9f0
|
|
ce4: c798 sw a4,8(a5)
|
|
#endif
|
|
|
|
#if defined(FUNCONF_USE_PLL) && FUNCONF_USE_PLL && !defined(CH5xx)
|
|
while((RCC->CTLR & RCC_PLLRDY) == 0) {}; // Wait till PLL is ready
|
|
ce6: 4398 lw a4,0(a5)
|
|
ce8: 00671693 slli a3,a4,0x6
|
|
cec: fe06dde3 bgez a3,ce6 <SystemInit+0x20>
|
|
#if defined(CH32H41x)
|
|
RCC->PLLCFGR |= RCC_SYSPLL_GATE;
|
|
#endif
|
|
uint32_t tmp32 = RCC->CFGR0 & ~(0x03); // clr the SW
|
|
cf0: 43d8 lw a4,4(a5)
|
|
RCC->CFGR0 = tmp32 | RCC_SW_PLL; // Select PLL as system clock source
|
|
while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08); // Wait till PLL is used as system clock source
|
|
cf2: 400216b7 lui a3,0x40021
|
|
uint32_t tmp32 = RCC->CFGR0 & ~(0x03); // clr the SW
|
|
cf6: 9b71 andi a4,a4,-4
|
|
RCC->CFGR0 = tmp32 | RCC_SW_PLL; // Select PLL as system clock source
|
|
cf8: 00276713 ori a4,a4,2
|
|
cfc: c3d8 sw a4,4(a5)
|
|
while ((RCC->CFGR0 & (uint32_t)RCC_SWS) != (uint32_t)0x08); // Wait till PLL is used as system clock source
|
|
cfe: 4721 li a4,8
|
|
d00: 42dc lw a5,4(a3)
|
|
d02: 8bb1 andi a5,a5,12
|
|
d04: fee79ee3 bne a5,a4,d00 <SystemInit+0x3a>
|
|
SetupDebugPrintf();
|
|
#endif
|
|
#if defined(FUNCONF_SUPPORT_CONSTRUCTORS) && FUNCONF_SUPPORT_CONSTRUCTORS
|
|
CallConstructors();
|
|
#endif
|
|
}
|
|
d08: 8082 ret
|
|
|
|
00000d0a <main>:
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------- main
|
|
int main(void)
|
|
{
|
|
d0a: 7119 addi sp,sp,-128
|
|
d0c: de86 sw ra,124(sp)
|
|
d0e: dca2 sw s0,120(sp)
|
|
d10: daa6 sw s1,116(sp)
|
|
SystemInit();
|
|
d12: 3f55 jal cc6 <SystemInit>
|
|
funGpioInitAll();
|
|
d14: 400214b7 lui s1,0x40021
|
|
d18: 4c9c lw a5,24(s1)
|
|
funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d1a: 40011437 lui s0,0x40011
|
|
funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d1e: 76fd lui a3,0xfffff
|
|
funGpioInitAll();
|
|
d20: 0357e793 ori a5,a5,53
|
|
d24: cc9c sw a5,24(s1)
|
|
funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d26: 80040793 addi a5,s0,-2048 # 40010800 <_eusrstack+0x20010000>
|
|
d2a: 4398 lw a4,0(a5)
|
|
funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d2c: 0ff68693 addi a3,a3,255 # fffff0ff <_eusrstack+0xdfffe8ff>
|
|
funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD);
|
|
d30: f1000637 lui a2,0xf1000
|
|
funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d34: f0f77713 andi a4,a4,-241
|
|
d38: 01076713 ori a4,a4,16
|
|
d3c: c398 sw a4,0(a5)
|
|
funDigitalWrite(LED_PIN, FUN_LOW);
|
|
d3e: 00020737 lui a4,0x20
|
|
d42: cb98 sw a4,16(a5)
|
|
funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d44: 40040793 addi a5,s0,1024
|
|
d48: 4398 lw a4,0(a5)
|
|
funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD);
|
|
d4a: 167d addi a2,a2,-1 # f0ffffff <_eusrstack+0xd0fff7ff>
|
|
funDigitalWrite(BTN_OK, FUN_HIGH);
|
|
d4c: 4585 li a1,1
|
|
funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP);
|
|
d4e: 8f75 and a4,a4,a3
|
|
d50: 10076713 ori a4,a4,256
|
|
d54: c398 sw a4,0(a5)
|
|
funDigitalWrite(BUZZER, FUN_LOW);
|
|
d56: 00040737 lui a4,0x40
|
|
d5a: cb98 sw a4,16(a5)
|
|
funPinMode(BTN_OK, GPIO_CNF_IN_PUPD);
|
|
d5c: 4018 lw a4,0(s0)
|
|
AFIO->EXTICR |= AFIO_EXTICR_EXTI0_PC | // OK on PC0
|
|
d5e: 40010537 lui a0,0x40010
|
|
funPinMode(BTN_OK, GPIO_CNF_IN_PUPD);
|
|
d62: 9b41 andi a4,a4,-16
|
|
d64: 00876713 ori a4,a4,8
|
|
d68: c018 sw a4,0(s0)
|
|
funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD);
|
|
d6a: 4398 lw a4,0(a5)
|
|
d6c: 8f71 and a4,a4,a2
|
|
d6e: 08000637 lui a2,0x8000
|
|
d72: 8f51 or a4,a4,a2
|
|
d74: c398 sw a4,0(a5)
|
|
funPinMode(BTN_RIGHT, GPIO_CNF_IN_PUPD);
|
|
d76: 4398 lw a4,0(a5)
|
|
d78: ff100637 lui a2,0xff100
|
|
d7c: 167d addi a2,a2,-1 # ff0fffff <_eusrstack+0xdf0ff7ff>
|
|
d7e: 8f71 and a4,a4,a2
|
|
d80: 00800637 lui a2,0x800
|
|
d84: 8f51 or a4,a4,a2
|
|
d86: c398 sw a4,0(a5)
|
|
funDigitalWrite(BTN_OK, FUN_HIGH);
|
|
d88: c80c sw a1,16(s0)
|
|
funDigitalWrite(BTN_LEFT, FUN_HIGH);
|
|
d8a: 04000613 li a2,64
|
|
d8e: cb90 sw a2,16(a5)
|
|
funDigitalWrite(BTN_RIGHT, FUN_HIGH);
|
|
d90: 02000713 li a4,32
|
|
d94: cb98 sw a4,16(a5)
|
|
AFIO->EXTICR |= AFIO_EXTICR_EXTI0_PC | // OK on PC0
|
|
d96: 451c lw a5,8(a0)
|
|
d98: 6711 lui a4,0x4
|
|
d9a: c0270713 addi a4,a4,-1022 # 3c02 <ch32fun.c.c0bc4b2f+0xab3>
|
|
d9e: 8fd9 or a5,a5,a4
|
|
da0: c51c sw a5,8(a0)
|
|
EXTI->INTENR |= EXTI_Line0 | EXTI_Line5 | EXTI_Line6;
|
|
da2: 40050793 addi a5,a0,1024 # 40010400 <_eusrstack+0x2000fc00>
|
|
da6: 4398 lw a4,0(a5)
|
|
}
|
|
|
|
// Enable Interrupt (by interrupt number)
|
|
RV_STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
|
|
{
|
|
NVIC->IENR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));
|
|
da8: e000e537 lui a0,0xe000e
|
|
dac: 06176713 ori a4,a4,97
|
|
db0: c398 sw a4,0(a5)
|
|
EXTI->FTENR |= EXTI_Line0 | EXTI_Line5 | EXTI_Line6; // press == falling edge
|
|
db2: 47d8 lw a4,12(a5)
|
|
db4: 06176713 ori a4,a4,97
|
|
db8: c7d8 sw a4,12(a5)
|
|
dba: 001007b7 lui a5,0x100
|
|
dbe: 10f52023 sw a5,256(a0) # e000e100 <_eusrstack+0xc000d900>
|
|
RCC->APB1PCENR |= RCC_APB1Periph_TIM2;
|
|
dc2: 4cdc lw a5,28(s1)
|
|
TIM2->PSC = 23999; // 24 MHz / 24000 = 1 kHz (1 ms/count)
|
|
dc4: 6719 lui a4,0x6
|
|
dc6: dbf70713 addi a4,a4,-577 # 5dbf <tama.c.7f472170+0x1d82>
|
|
RCC->APB1PCENR |= RCC_APB1Periph_TIM2;
|
|
dca: 8fcd or a5,a5,a1
|
|
dcc: ccdc sw a5,28(s1)
|
|
TIM2->PSC = 23999; // 24 MHz / 24000 = 1 kHz (1 ms/count)
|
|
dce: 400007b7 lui a5,0x40000
|
|
dd2: 02e79423 sh a4,40(a5) # 40000028 <_eusrstack+0x1ffff828>
|
|
TIM2->ATRLR = TICK_MS - 1; // overflow once per game tick
|
|
dd6: 6711 lui a4,0x4
|
|
dd8: a9770713 addi a4,a4,-1385 # 3a97 <ch32fun.c.c0bc4b2f+0x948>
|
|
ddc: 02e79623 sh a4,44(a5)
|
|
TIM2->SWEVGR = TIM_PSCReloadMode_Immediate; // latch PSC/ARR now
|
|
de0: 00b79a23 sh a1,20(a5)
|
|
TIM2->INTFR = (uint16_t)~TIM_FLAG_Update;
|
|
de4: 5779 li a4,-2
|
|
de6: 00e79823 sh a4,16(a5)
|
|
TIM2->DMAINTENR |= TIM_UIE; // enable update interrupt
|
|
dea: 00c7d703 lhu a4,12(a5)
|
|
dee: 8f4d or a4,a4,a1
|
|
df0: 00e79623 sh a4,12(a5)
|
|
df4: 10c52223 sw a2,260(a0)
|
|
gpio_setup();
|
|
lowpower_setup(); // button-wake EXTI + periodic-check timer
|
|
|
|
Delay_Ms(120); // let the OLED rail settle
|
|
df8: 000b0537 lui a0,0xb0
|
|
dfc: c8050513 addi a0,a0,-896 # afc80 <tama.c.7f472170+0xabc43>
|
|
e00: b1eff0ef jal 11e <DelaySysTick>
|
|
* init I2C and GPIO
|
|
*/
|
|
uint8_t ssd1306_i2c_init(void)
|
|
{
|
|
// Enable GPIOC and I2C
|
|
RCC->APB1PCENR |= RCC_APB1Periph_I2C1;
|
|
e04: 4cdc lw a5,28(s1)
|
|
e06: 00200737 lui a4,0x200
|
|
e0a: 8fd9 or a5,a5,a4
|
|
e0c: ccdc sw a5,28(s1)
|
|
funPinMode( PB6, GPIO_CFGLR_OUT_10Mhz_AF_OD );
|
|
funPinMode( PB7, GPIO_CFGLR_OUT_10Mhz_AF_OD );
|
|
#endif
|
|
|
|
#else
|
|
RCC->APB2PCENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO;
|
|
e0e: 4c9c lw a5,24(s1)
|
|
// PC1 is SDA, 10MHz Output, alt func, open-drain
|
|
GPIOC->CFGLR &= ~(0xf<<(4*1));
|
|
GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*1);
|
|
|
|
// PC2 is SCL, 10MHz Output, alt func, open-drain
|
|
GPIOC->CFGLR &= ~(0xf<<(4*2));
|
|
e10: 777d lui a4,0xfffff
|
|
e12: 0ff70693 addi a3,a4,255 # fffff0ff <_eusrstack+0xdfffe8ff>
|
|
RCC->APB2PCENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO;
|
|
e16: 0117e793 ori a5,a5,17
|
|
e1a: cc9c sw a5,24(s1)
|
|
GPIOC->CFGLR &= ~(0xf<<(4*1));
|
|
e1c: 401c lw a5,0(s0)
|
|
GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*2);
|
|
e1e: 6705 lui a4,0x1
|
|
e20: d0070713 addi a4,a4,-768 # d00 <SystemInit+0x3a>
|
|
GPIOC->CFGLR &= ~(0xf<<(4*1));
|
|
e24: f0f7f793 andi a5,a5,-241
|
|
e28: c01c sw a5,0(s0)
|
|
GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*1);
|
|
e2a: 401c lw a5,0(s0)
|
|
e2c: 0d07e793 ori a5,a5,208
|
|
e30: c01c sw a5,0(s0)
|
|
GPIOC->CFGLR &= ~(0xf<<(4*2));
|
|
e32: 401c lw a5,0(s0)
|
|
e34: 8ff5 and a5,a5,a3
|
|
e36: c01c sw a5,0(s0)
|
|
GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*2);
|
|
e38: 401c lw a5,0(s0)
|
|
e3a: 8fd9 or a5,a5,a4
|
|
e3c: c01c sw a5,0(s0)
|
|
|
|
ssd1306_setbuf(0);
|
|
|
|
// initialize OLED
|
|
#if !defined(SSD1306_CUSTOM_INIT_ARRAY) || !SSD1306_CUSTOM_INIT_ARRAY
|
|
uint8_t *cmd_list = (uint8_t *)ssd1306_init_array;
|
|
e3e: 6409 lui s0,0x2
|
|
GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*4);
|
|
GPIOC->BSHR = (1<<(16+4));
|
|
#endif
|
|
|
|
// load I2C regs
|
|
ssd1306_i2c_setup();
|
|
e40: af0ff0ef jal 130 <ssd1306_i2c_setup>
|
|
e44: 57040413 addi s0,s0,1392 # 2570 <ssd1306_init_array>
|
|
ssd1306_setbuf(0);
|
|
e48: 3bed jal c42 <ssd1306_setbuf.constprop.0>
|
|
while(*cmd_list != SSD1306_TERMINATE_CMDS)
|
|
e4a: 00044503 lbu a0,0(s0)
|
|
e4e: 0ff00793 li a5,255
|
|
e52: 00f51463 bne a0,a5,e5a <main+0x150>
|
|
{
|
|
if(ssd1306_cmd(*cmd_list++))
|
|
return 1;
|
|
}
|
|
|
|
ssd1306_refresh();
|
|
e56: 3d11 jal c6a <ssd1306_refresh>
|
|
#endif
|
|
|
|
return 0;
|
|
e58: a021 j e60 <main+0x156>
|
|
if(ssd1306_cmd(*cmd_list++))
|
|
e5a: 0405 addi s0,s0,1
|
|
e5c: 3b1d jal b92 <ssd1306_cmd>
|
|
e5e: d575 beqz a0,e4a <main+0x140>
|
|
ssd1306_setbuf(0);
|
|
e60: 6489 lui s1,0x2
|
|
e62: 33c5 jal c42 <ssd1306_setbuf.constprop.0>
|
|
for (uint8_t i = 0; i < 5; i++) {
|
|
e64: 58c48493 addi s1,s1,1420 # 258c <boot.0>
|
|
ssd1306_setbuf(0);
|
|
e68: 4401 li s0,0
|
|
ssd1306_drawstr(0, i * 10, boot[i], 1);
|
|
e6a: 4090 lw a2,0(s1)
|
|
e6c: 4685 li a3,1
|
|
e6e: 85a2 mv a1,s0
|
|
e70: 4501 li a0,0
|
|
e72: ba6ff0ef jal 218 <ssd1306_drawstr>
|
|
ssd1306_refresh();
|
|
e76: 3bd5 jal c6a <ssd1306_refresh>
|
|
beep(1200 + i * 120, 25);
|
|
e78: 00141513 slli a0,s0,0x1
|
|
e7c: 9522 add a0,a0,s0
|
|
e7e: 050a slli a0,a0,0x2
|
|
e80: 4b050513 addi a0,a0,1200
|
|
e84: 0542 slli a0,a0,0x10
|
|
e86: 8141 srli a0,a0,0x10
|
|
e88: 45e5 li a1,25
|
|
e8a: c8cff0ef jal 316 <beep>
|
|
Delay_Ms(220);
|
|
e8e: 00142537 lui a0,0x142
|
|
e92: 44050513 addi a0,a0,1088 # 142440 <tama.c.7f472170+0x13e403>
|
|
e96: a88ff0ef jal 11e <DelaySysTick>
|
|
for (uint8_t i = 0; i < 5; i++) {
|
|
e9a: 0429 addi s0,s0,10
|
|
e9c: 03200793 li a5,50
|
|
ea0: 0491 addi s1,s1,4
|
|
ea2: fcf414e3 bne s0,a5,e6a <main+0x160>
|
|
draw_center_str(54, "press any key");
|
|
ea6: 6589 lui a1,0x2
|
|
ea8: b0c58593 addi a1,a1,-1268 # 1b0c <TIM2_IRQHandler+0x4e>
|
|
eac: 03600513 li a0,54
|
|
eb0: 897ff0ef jal 746 <draw_center_str>
|
|
ssd1306_refresh();
|
|
eb4: 3b5d jal c6a <ssd1306_refresh>
|
|
beep(988, 120);
|
|
eb6: 07800593 li a1,120
|
|
eba: 3dc00513 li a0,988
|
|
ebe: c58ff0ef jal 316 <beep>
|
|
ec2: 0c800413 li s0,200
|
|
Buttons b = read_buttons();
|
|
ec6: 8a9ff0ef jal 76e <read_buttons>
|
|
eca: 00855713 srli a4,a0,0x8
|
|
ece: 01055793 srli a5,a0,0x10
|
|
ed2: 04e100a3 sb a4,65(sp)
|
|
if (b.ok || b.left || b.right) break;
|
|
ed6: 8f49 or a4,a4,a0
|
|
Buttons b = read_buttons();
|
|
ed8: 04f10123 sb a5,66(sp)
|
|
if (b.ok || b.left || b.right) break;
|
|
edc: 8fd9 or a5,a5,a4
|
|
Buttons b = read_buttons();
|
|
ede: 04a10023 sb a0,64(sp)
|
|
if (b.ok || b.left || b.right) break;
|
|
ee2: 0ff7f793 zext.b a5,a5
|
|
ee6: eb81 bnez a5,ef6 <main+0x1ec>
|
|
Delay_Ms(20);
|
|
ee8: 6575 lui a0,0x1d
|
|
eea: 4c050513 addi a0,a0,1216 # 1d4c0 <tama.c.7f472170+0x19483>
|
|
for (int i = 0; i < 200; i++) {
|
|
eee: 147d addi s0,s0,-1
|
|
Delay_Ms(20);
|
|
ef0: a2eff0ef jal 11e <DelaySysTick>
|
|
for (int i = 0; i < 200; i++) {
|
|
ef4: f869 bnez s0,ec6 <main+0x1bc>
|
|
while (1) { led_blink(); Delay_Ms(700); }
|
|
}
|
|
ssd1306_init();
|
|
|
|
splash();
|
|
screen = SCR_SELECT; // pick a species before a pet is born
|
|
ef6: c2018b23 sb zero,-970(gp) # 20000032 <screen>
|
|
|
|
Buttons prev = {0, 0, 0};
|
|
efa: 4481 li s1,0
|
|
efc: 4701 li a4,0
|
|
efe: 4781 li a5,0
|
|
|
|
while (1) {
|
|
if (!disp_on) {
|
|
f00: c051c683 lbu a3,-1019(gp) # 20000001 <disp_on>
|
|
f04: eadd bnez a3,fba <main+0x2b0>
|
|
TIM2->CNT = 0;
|
|
f06: 400007b7 lui a5,0x40000
|
|
TIM2->INTFR = (uint16_t)~TIM_FLAG_Update;
|
|
f0a: 52f9 li t0,-2
|
|
}
|
|
|
|
// WFI - wait for interrupt (like a light sleep)
|
|
__attribute__( ( always_inline ) ) RV_STATIC_INLINE void __WFI(void)
|
|
{
|
|
NVIC->SCTLR &= ~(1<<3); // wfi
|
|
f0c: e000f5b7 lui a1,0xe000f
|
|
exti_wake = 0;
|
|
f10: c2018aa3 sb zero,-971(gp) # 20000031 <exti_wake>
|
|
tick_wake = 0;
|
|
f14: c2018a23 sb zero,-972(gp) # 20000030 <tick_wake>
|
|
TIM2->CNT = 0;
|
|
f18: 02079223 sh zero,36(a5) # 40000024 <_eusrstack+0x1ffff824>
|
|
TIM2->INTFR = (uint16_t)~TIM_FLAG_Update;
|
|
f1c: 00579823 sh t0,16(a5)
|
|
TIM2->CTLR1 |= TIM_CEN; // arm the periodic wake
|
|
f20: 0007d703 lhu a4,0(a5)
|
|
f24: 00176713 ori a4,a4,1
|
|
f28: 00e79023 sh a4,0(a5)
|
|
f2c: d105a703 lw a4,-752(a1) # e000ed10 <_eusrstack+0xc000e510>
|
|
f30: 9b5d andi a4,a4,-9
|
|
f32: d0e5a823 sw a4,-752(a1)
|
|
__ASM volatile ("wfi");
|
|
f36: 10500073 wfi
|
|
TIM2->CTLR1 &= ~TIM_CEN; // halt it while we're awake
|
|
f3a: 0007d703 lhu a4,0(a5)
|
|
f3e: 66c1 lui a3,0x10
|
|
f40: 16f9 addi a3,a3,-2 # fffe <tama.c.7f472170+0xbfc1>
|
|
f42: 8f75 and a4,a4,a3
|
|
f44: 00e79023 sh a4,0(a5)
|
|
if (exti_wake) { // a button: bring the screen back
|
|
f48: c351c703 lbu a4,-971(gp) # 20000031 <exti_wake>
|
|
f4c: c721 beqz a4,f94 <main+0x28a>
|
|
ssd1306_cmd(SSD1306_DISPLAYON);
|
|
f4e: 0af00513 li a0,175
|
|
f52: 3181 jal b92 <ssd1306_cmd>
|
|
disp_on = 1;
|
|
f54: 4785 li a5,1
|
|
f56: c0f182a3 sb a5,-1019(gp) # 20000001 <disp_on>
|
|
idle_frames = 0;
|
|
f5a: c201a823 sw zero,-976(gp) # 2000002c <idle_frames>
|
|
tick_acc = 0;
|
|
f5e: c2019523 sh zero,-982(gp) # 20000026 <tick_acc>
|
|
// Display is off: hand the core to WFI light-sleep, waking only
|
|
// for button presses or the periodic background check. It returns
|
|
// once the screen is lit again; swallow whatever press woke us so
|
|
// it just wakes the display rather than also firing an action.
|
|
enter_low_power();
|
|
prev = read_buttons();
|
|
f62: 80dff0ef jal 76e <read_buttons>
|
|
f66: 00855713 srli a4,a0,0x8
|
|
f6a: 01055793 srli a5,a0,0x10
|
|
f6e: 02e108a3 sb a4,49(sp)
|
|
f72: 02f10923 sb a5,50(sp)
|
|
f76: 0ff57693 zext.b a3,a0
|
|
f7a: 0ff77713 zext.b a4,a4
|
|
f7e: 0ff7f793 zext.b a5,a5
|
|
f82: 02a10823 sb a0,48(sp)
|
|
f86: ca36 sw a3,20(sp)
|
|
f88: cc3a sw a4,24(sp)
|
|
f8a: ce3e sw a5,28(sp)
|
|
beep(988, 120);
|
|
f8c: 44f2 lw s1,28(sp)
|
|
f8e: 4762 lw a4,24(sp)
|
|
f90: 47d2 lw a5,20(sp)
|
|
f92: b7bd j f00 <main+0x1f6>
|
|
if (pet.alive) {
|
|
f94: c4818493 addi s1,gp,-952 # 20000044 <pet>
|
|
f98: 0104c703 lbu a4,16(s1)
|
|
f9c: db35 beqz a4,f10 <main+0x206>
|
|
game_tick();
|
|
f9e: d6eff0ef jal 50c <game_tick>
|
|
if (!pet.alive) { // it died in its sleep: show the grave
|
|
fa2: 0104c783 lbu a5,16(s1)
|
|
fa6: f3a5 bnez a5,f06 <main+0x1fc>
|
|
ssd1306_cmd(SSD1306_DISPLAYON);
|
|
fa8: 0af00513 li a0,175
|
|
fac: 36dd jal b92 <ssd1306_cmd>
|
|
disp_on = 1;
|
|
fae: 4785 li a5,1
|
|
fb0: c0f182a3 sb a5,-1019(gp) # 20000001 <disp_on>
|
|
idle_frames = 0;
|
|
fb4: c201a823 sw zero,-976(gp) # 2000002c <idle_frames>
|
|
return;
|
|
fb8: b76d j f62 <main+0x258>
|
|
fba: c43e sw a5,8(sp)
|
|
fbc: c23a sw a4,4(sp)
|
|
continue;
|
|
}
|
|
|
|
Buttons b = read_buttons();
|
|
fbe: fb0ff0ef jal 76e <read_buttons>
|
|
fc2: 00855613 srli a2,a0,0x8
|
|
fc6: 0ff57793 zext.b a5,a0
|
|
fca: 01055693 srli a3,a0,0x10
|
|
fce: ca3e sw a5,20(sp)
|
|
fd0: 0ff67793 zext.b a5,a2
|
|
fd4: cc3e sw a5,24(sp)
|
|
fd6: 0ff6f793 zext.b a5,a3
|
|
fda: ce3e sw a5,28(sp)
|
|
uint8_t ok_edge = b.ok && !prev.ok;
|
|
fdc: 47d2 lw a5,20(sp)
|
|
Buttons b = read_buttons();
|
|
fde: 02a10a23 sb a0,52(sp)
|
|
fe2: 02c10aa3 sb a2,53(sp)
|
|
fe6: 02d10b23 sb a3,54(sp)
|
|
uint8_t ok_edge = b.ok && !prev.ok;
|
|
fea: c002 sw zero,0(sp)
|
|
fec: 4712 lw a4,4(sp)
|
|
fee: c789 beqz a5,ff8 <main+0x2ee>
|
|
ff0: 47a2 lw a5,8(sp)
|
|
ff2: 0017b793 seqz a5,a5
|
|
ff6: c03e sw a5,0(sp)
|
|
uint8_t left_edge = b.left && !prev.left;
|
|
ff8: 46e2 lw a3,24(sp)
|
|
uint8_t ok_edge = b.ok && !prev.ok;
|
|
ffa: 00014783 lbu a5,0(sp)
|
|
uint8_t left_edge = b.left && !prev.left;
|
|
ffe: 4581 li a1,0
|
|
1000: c299 beqz a3,1006 <main+0x2fc>
|
|
1002: 00173593 seqz a1,a4
|
|
uint8_t right_edge = b.right && !prev.right;
|
|
1006: 4672 lw a2,28(sp)
|
|
uint8_t left_edge = b.left && !prev.left;
|
|
1008: 0ff5f713 zext.b a4,a1
|
|
uint8_t right_edge = b.right && !prev.right;
|
|
100c: 4681 li a3,0
|
|
100e: c219 beqz a2,1014 <main+0x30a>
|
|
1010: 0014b693 seqz a3,s1
|
|
uint8_t any_edge = ok_edge | left_edge | right_edge;
|
|
1014: 8fd9 or a5,a5,a4
|
|
1016: 8fd5 or a5,a5,a3
|
|
prev = b;
|
|
|
|
if (any_edge) idle_frames = 0;
|
|
1018: c399 beqz a5,101e <main+0x314>
|
|
101a: c201a823 sw zero,-976(gp) # 2000002c <idle_frames>
|
|
|
|
{
|
|
switch (screen) {
|
|
101e: c361c703 lbu a4,-970(gp) # 20000032 <screen>
|
|
1022: 4611 li a2,4
|
|
1024: 7ee66963 bltu a2,a4,1816 <main+0xb0c>
|
|
1028: 6609 lui a2,0x2
|
|
102a: 070a slli a4,a4,0x2
|
|
102c: ce060613 addi a2,a2,-800 # 1ce0 <TIM2_IRQHandler+0x222>
|
|
1030: 9732 add a4,a4,a2
|
|
1032: 4318 lw a4,0(a4)
|
|
1034: 8702 jr a4
|
|
case SCR_SELECT:
|
|
if (left_edge) {
|
|
1036: c185 beqz a1,1056 <main+0x34c>
|
|
sel_species = (sel_species + SPECIES_COUNT - 1) % SPECIES_COUNT;
|
|
1038: c2f1c503 lbu a0,-977(gp) # 2000002b <sel_species>
|
|
103c: 458d li a1,3
|
|
103e: c236 sw a3,4(sp)
|
|
1040: 0509 addi a0,a0,2
|
|
1042: 8b6ff0ef jal f8 <__modsi3>
|
|
1046: c2a187a3 sb a0,-977(gp) # 2000002b <sel_species>
|
|
beep(1047, 25);
|
|
104a: 45e5 li a1,25
|
|
104c: 41700513 li a0,1047
|
|
1050: ac6ff0ef jal 316 <beep>
|
|
1054: 4692 lw a3,4(sp)
|
|
}
|
|
if (right_edge) {
|
|
1056: ce91 beqz a3,1072 <main+0x368>
|
|
sel_species = (sel_species + 1) % SPECIES_COUNT;
|
|
1058: c2f1c503 lbu a0,-977(gp) # 2000002b <sel_species>
|
|
105c: 458d li a1,3
|
|
105e: 0505 addi a0,a0,1
|
|
1060: 898ff0ef jal f8 <__modsi3>
|
|
1064: c2a187a3 sb a0,-977(gp) # 2000002b <sel_species>
|
|
beep(1047, 25);
|
|
1068: 45e5 li a1,25
|
|
106a: 41700513 li a0,1047
|
|
106e: aa8ff0ef jal 316 <beep>
|
|
}
|
|
if (ok_edge) { // born! boot the chosen species
|
|
1072: 4782 lw a5,0(sp)
|
|
1074: c3b5 beqz a5,10d8 <main+0x3ce>
|
|
pet.satiety = 80;
|
|
1076: 645a5737 lui a4,0x645a5
|
|
107a: 05070713 addi a4,a4,80 # 645a5050 <_eusrstack+0x445a4850>
|
|
107e: c4e1a423 sw a4,-952(gp) # 20000044 <pet>
|
|
pet.health = 100;
|
|
1082: c4818793 addi a5,gp,-952 # 20000044 <pet>
|
|
1086: 06400713 li a4,100
|
|
108a: 00e78223 sb a4,4(a5)
|
|
pet.species = sel_species;
|
|
108e: c2f1c703 lbu a4,-977(gp) # 2000002b <sel_species>
|
|
pet.age_min = 0;
|
|
1092: 00079323 sh zero,6(a5)
|
|
pet.xp = 0;
|
|
1096: 00079423 sh zero,8(a5)
|
|
pet.species = sel_species;
|
|
109a: 00e78523 sb a4,10(a5)
|
|
pet.level = 1;
|
|
109e: 4705 li a4,1
|
|
10a0: 00e785a3 sb a4,11(a5)
|
|
pet.form = FORM_PROC;
|
|
10a4: 0007a623 sw zero,12(a5)
|
|
pet.alive = 1;
|
|
10a8: 00e78823 sb a4,16(a5)
|
|
cursor = 0;
|
|
10ac: c2018723 sb zero,-978(gp) # 2000002a <cursor>
|
|
evo_anim = 0;
|
|
10b0: c4018223 sb zero,-956(gp) # 20000040 <evo_anim>
|
|
for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; }
|
|
10b4: c201ae23 sw zero,-964(gp) # 20000038 <warn_flag>
|
|
pet_reset(); // sets screen = SCR_MAIN, species = sel_species
|
|
beep(659, 80); beep(988, 120);
|
|
10b8: 05000593 li a1,80
|
|
10bc: 29300513 li a0,659
|
|
screen = SCR_MAIN;
|
|
10c0: c2e18b23 sb a4,-970(gp) # 20000032 <screen>
|
|
for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; }
|
|
10c4: c401a023 sw zero,-960(gp) # 2000003c <crit_flag>
|
|
beep(659, 80); beep(988, 120);
|
|
10c8: a4eff0ef jal 316 <beep>
|
|
10cc: 07800593 li a1,120
|
|
10d0: 3dc00513 li a0,988
|
|
10d4: a42ff0ef jal 316 <beep>
|
|
ssd1306_setbuf(0);
|
|
10d8: 36ad jal c42 <ssd1306_setbuf.constprop.0>
|
|
draw_center_str(0, "~ $ adopt --pet");
|
|
10da: 6589 lui a1,0x2
|
|
10dc: b1c58593 addi a1,a1,-1252 # 1b1c <TIM2_IRQHandler+0x5e>
|
|
10e0: 4501 li a0,0
|
|
10e2: e64ff0ef jal 746 <draw_center_str>
|
|
if((x >= SSD1306_W) || (y >= SSD1306_H)) return;
|
|
10e6: 4685 li a3,1
|
|
10e8: 08000613 li a2,128
|
|
10ec: 45a9 li a1,10
|
|
10ee: 4501 li a0,0
|
|
10f0: eb0ff0ef jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
ssd1306_drawImage(48, 13, species_frames[sel_species][EXP_IDLE],
|
|
10f4: c2f1c403 lbu s0,-977(gp) # 2000002b <sel_species>
|
|
10f8: 6789 lui a5,0x2
|
|
10fa: 6ac78793 addi a5,a5,1708 # 26ac <species_frames>
|
|
10fe: 00341713 slli a4,s0,0x3
|
|
1102: 8f01 sub a4,a4,s0
|
|
1104: 070a slli a4,a4,0x2
|
|
1106: 97ba add a5,a5,a4
|
|
1108: 4390 lw a2,0(a5)
|
|
110a: 02000713 li a4,32
|
|
110e: 86ba mv a3,a4
|
|
1110: 45b5 li a1,13
|
|
1112: 03000513 li a0,48
|
|
1116: 8a3ff0ef jal 9b8 <ssd1306_drawImage.constprop.0>
|
|
p = s_cat(p, "< ");
|
|
111a: 6589 lui a1,0x2
|
|
111c: b2c58593 addi a1,a1,-1236 # 1b2c <TIM2_IRQHandler+0x6e>
|
|
1120: 0088 addi a0,sp,64
|
|
1122: 982ff0ef jal 2a4 <s_cat>
|
|
p = s_cat(p, species_names[sel_species]);
|
|
1126: 6789 lui a5,0x2
|
|
1128: 040a slli s0,s0,0x2
|
|
112a: 5a078793 addi a5,a5,1440 # 25a0 <species_names>
|
|
112e: 97a2 add a5,a5,s0
|
|
1130: 438c lw a1,0(a5)
|
|
1132: 972ff0ef jal 2a4 <s_cat>
|
|
p = s_cat(p, " >");
|
|
1136: 6589 lui a1,0x2
|
|
1138: b3058593 addi a1,a1,-1232 # 1b30 <TIM2_IRQHandler+0x72>
|
|
113c: 968ff0ef jal 2a4 <s_cat>
|
|
*p = 0;
|
|
1140: 00050023 sb zero,0(a0)
|
|
draw_center_str(47, line);
|
|
1144: 008c addi a1,sp,64
|
|
1146: 02f00513 li a0,47
|
|
114a: dfcff0ef jal 746 <draw_center_str>
|
|
draw_center_str(56, "L/R pick OK go");
|
|
114e: 6589 lui a1,0x2
|
|
1150: b3458593 addi a1,a1,-1228 # 1b34 <TIM2_IRQHandler+0x76>
|
|
draw_center_str(56, "OK: respawn");
|
|
1154: 03800513 li a0,56
|
|
1158: a98d j 15ca <main+0x8c0>
|
|
}
|
|
draw_select();
|
|
break;
|
|
|
|
case SCR_MAIN:
|
|
if (left_edge) {
|
|
115a: c185 beqz a1,117a <main+0x470>
|
|
cursor = (cursor + ICON_COUNT - 1) % ICON_COUNT;
|
|
115c: c2e1c503 lbu a0,-978(gp) # 2000002a <cursor>
|
|
1160: 459d li a1,7
|
|
1162: c236 sw a3,4(sp)
|
|
1164: 0519 addi a0,a0,6
|
|
1166: f93fe0ef jal f8 <__modsi3>
|
|
116a: c2a18723 sb a0,-978(gp) # 2000002a <cursor>
|
|
beep(1047, 25);
|
|
116e: 45e5 li a1,25
|
|
1170: 41700513 li a0,1047
|
|
1174: 9a2ff0ef jal 316 <beep>
|
|
1178: 4692 lw a3,4(sp)
|
|
}
|
|
if (right_edge) {
|
|
117a: ce91 beqz a3,1196 <main+0x48c>
|
|
cursor = (cursor + 1) % ICON_COUNT;
|
|
117c: c2e1c503 lbu a0,-978(gp) # 2000002a <cursor>
|
|
1180: 459d li a1,7
|
|
1182: 0505 addi a0,a0,1
|
|
1184: f75fe0ef jal f8 <__modsi3>
|
|
1188: c2a18723 sb a0,-978(gp) # 2000002a <cursor>
|
|
beep(1047, 25);
|
|
118c: 45e5 li a1,25
|
|
118e: 41700513 li a0,1047
|
|
1192: 984ff0ef jal 316 <beep>
|
|
}
|
|
if (ok_edge) do_action(cursor);
|
|
1196: 4782 lw a5,0(sp)
|
|
1198: c4818493 addi s1,gp,-952 # 20000044 <pet>
|
|
119c: 0e078e63 beqz a5,1298 <main+0x58e>
|
|
switch (act) {
|
|
11a0: c2e1c783 lbu a5,-978(gp) # 2000002a <cursor>
|
|
11a4: 4699 li a3,6
|
|
11a6: 0ef6e963 bltu a3,a5,1298 <main+0x58e>
|
|
11aa: 6689 lui a3,0x2
|
|
11ac: 078a slli a5,a5,0x2
|
|
11ae: cf468693 addi a3,a3,-780 # 1cf4 <TIM2_IRQHandler+0x236>
|
|
11b2: 97b6 add a5,a5,a3
|
|
11b4: 439c lw a5,0(a5)
|
|
11b6: 8782 jr a5
|
|
pet.satiety = clamp100(pet.satiety + 30);
|
|
11b8: 00048783 lb a5,0(s1)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
11bc: 06400713 li a4,100
|
|
pet.satiety = clamp100(pet.satiety + 30);
|
|
11c0: 07f9 addi a5,a5,30
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
11c2: 04f75563 bge a4,a5,120c <main+0x502>
|
|
11c6: 87ba mv a5,a4
|
|
11c8: 00f48023 sb a5,0(s1)
|
|
pet.hygiene = clamp100(pet.hygiene - 5);
|
|
11cc: 00348783 lb a5,3(s1)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
11d0: 06400713 li a4,100
|
|
pet.hygiene = clamp100(pet.hygiene - 5);
|
|
11d4: 17ed addi a5,a5,-5
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
11d6: 04f75063 bge a4,a5,1216 <main+0x50c>
|
|
11da: 87ba mv a5,a4
|
|
11dc: 00f481a3 sb a5,3(s1)
|
|
static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; }
|
|
11e0: 4411 li s0,4
|
|
11e2: c2818423 sb s0,-984(gp) # 20000024 <anim_exp>
|
|
11e6: 4731 li a4,12
|
|
beep(880, 60); beep(1175, 80);
|
|
11e8: 03c00593 li a1,60
|
|
11ec: 37000513 li a0,880
|
|
static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; }
|
|
11f0: c2e18623 sb a4,-980(gp) # 20000028 <anim_timer>
|
|
beep(880, 60); beep(1175, 80);
|
|
11f4: 922ff0ef jal 316 <beep>
|
|
11f8: 05000593 li a1,80
|
|
11fc: 49700513 li a0,1175
|
|
beep(784, 60); beep(1047, 60); beep(1319, 90);
|
|
1200: 916ff0ef jal 316 <beep>
|
|
led_blink();
|
|
1204: 982ff0ef jal 386 <led_blink>
|
|
add_xp(4);
|
|
1208: 4511 li a0,4
|
|
120a: a069 j 1294 <main+0x58a>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
120c: fff7c713 not a4,a5
|
|
1210: 877d srai a4,a4,0x1f
|
|
1212: 8ff9 and a5,a5,a4
|
|
1214: bf55 j 11c8 <main+0x4be>
|
|
1216: fff7c713 not a4,a5
|
|
121a: 877d srai a4,a4,0x1f
|
|
121c: 8ff9 and a5,a5,a4
|
|
121e: bf7d j 11dc <main+0x4d2>
|
|
if (pet.energy < 15) { beep(220, 120); break; } // too tired
|
|
1220: 00248703 lb a4,2(s1)
|
|
1224: 47b9 li a5,14
|
|
1226: 00e7c963 blt a5,a4,1238 <main+0x52e>
|
|
122a: 07800593 li a1,120
|
|
122e: 0dc00513 li a0,220
|
|
beep(659, 40);
|
|
1232: 8e4ff0ef jal 316 <beep>
|
|
break;
|
|
1236: a08d j 1298 <main+0x58e>
|
|
pet.happy = clamp100(pet.happy + 25);
|
|
1238: 00148783 lb a5,1(s1)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
123c: 06400693 li a3,100
|
|
pet.happy = clamp100(pet.happy + 25);
|
|
1240: 07e5 addi a5,a5,25
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1242: 38f6d763 bge a3,a5,15d0 <main+0x8c6>
|
|
1246: 87b6 mv a5,a3
|
|
1248: 00f480a3 sb a5,1(s1)
|
|
pet.energy = clamp100(pet.energy - 12);
|
|
124c: ff470793 addi a5,a4,-12
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1250: 06400713 li a4,100
|
|
1254: 00f75363 bge a4,a5,125a <main+0x550>
|
|
1258: 87ba mv a5,a4
|
|
125a: 00f48123 sb a5,2(s1)
|
|
static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; }
|
|
125e: 4709 li a4,2
|
|
1260: c2e18423 sb a4,-984(gp) # 20000024 <anim_exp>
|
|
beep(988, 60); beep(1319, 60); beep(1568, 90);
|
|
1264: 03c00593 li a1,60
|
|
static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; }
|
|
1268: 4731 li a4,12
|
|
beep(988, 60); beep(1319, 60); beep(1568, 90);
|
|
126a: 3dc00513 li a0,988
|
|
static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; }
|
|
126e: c2e18623 sb a4,-980(gp) # 20000028 <anim_timer>
|
|
beep(988, 60); beep(1319, 60); beep(1568, 90);
|
|
1272: 8a4ff0ef jal 316 <beep>
|
|
1276: 03c00593 li a1,60
|
|
127a: 52700513 li a0,1319
|
|
127e: 898ff0ef jal 316 <beep>
|
|
1282: 62000513 li a0,1568
|
|
1286: 05a00593 li a1,90
|
|
128a: 88cff0ef jal 316 <beep>
|
|
led_blink();
|
|
128e: 8f8ff0ef jal 386 <led_blink>
|
|
add_xp(6);
|
|
1292: 4519 li a0,6
|
|
add_xp(4);
|
|
1294: 91cff0ef jal 3b0 <add_xp>
|
|
ssd1306_setbuf(0);
|
|
1298: 9abff0ef jal c42 <ssd1306_setbuf.constprop.0>
|
|
draw_center_str(0, menu_labels[cursor]);
|
|
129c: c2e1c783 lbu a5,-978(gp) # 2000002a <cursor>
|
|
12a0: 4501 li a0,0
|
|
12a2: d03e sw a5,32(sp)
|
|
12a4: 5702 lw a4,32(sp)
|
|
12a6: 6789 lui a5,0x2
|
|
12a8: 73078793 addi a5,a5,1840 # 2730 <menu_labels>
|
|
12ac: 070a slli a4,a4,0x2
|
|
12ae: 97ba add a5,a5,a4
|
|
12b0: 438c lw a1,0(a5)
|
|
12b2: c94ff0ef jal 746 <draw_center_str>
|
|
if (pet.alive && pet.health < 30 && (frame & 8))
|
|
12b6: 0104c783 lbu a5,16(s1)
|
|
12ba: c83e sw a5,16(sp)
|
|
12bc: c395 beqz a5,12e0 <main+0x5d6>
|
|
12be: 00448703 lb a4,4(s1)
|
|
12c2: 47f5 li a5,29
|
|
12c4: 00e7ce63 blt a5,a4,12e0 <main+0x5d6>
|
|
12c8: c381a783 lw a5,-968(gp) # 20000034 <frame>
|
|
12cc: 8ba1 andi a5,a5,8
|
|
12ce: cb89 beqz a5,12e0 <main+0x5d6>
|
|
ssd1306_drawstr(0, 0, "!", 1);
|
|
12d0: 6609 lui a2,0x2
|
|
12d2: 4685 li a3,1
|
|
12d4: b4460613 addi a2,a2,-1212 # 1b44 <TIM2_IRQHandler+0x86>
|
|
12d8: 4581 li a1,0
|
|
12da: 4501 li a0,0
|
|
12dc: f3dfe0ef jal 218 <ssd1306_drawstr>
|
|
bp = u_cat(bp, pet.level);
|
|
12e0: 00b4c583 lbu a1,11(s1)
|
|
*bp++ = 'L';
|
|
12e4: 04c00793 li a5,76
|
|
bp = u_cat(bp, pet.level);
|
|
12e8: 03910513 addi a0,sp,57
|
|
*bp++ = 'L';
|
|
12ec: 02f10c23 sb a5,56(sp)
|
|
bp = u_cat(bp, pet.level);
|
|
12f0: fc7fe0ef jal 2b6 <u_cat>
|
|
*bp = 0;
|
|
12f4: 00050023 sb zero,0(a0)
|
|
ssd1306_drawstr(SSD1306_W - 2 * 8, 0, badge, 1);
|
|
12f8: 4685 li a3,1
|
|
12fa: 1830 addi a2,sp,56
|
|
12fc: 4581 li a1,0
|
|
12fe: 07000513 li a0,112
|
|
1302: f17fe0ef jal 218 <ssd1306_drawstr>
|
|
1306: 4685 li a3,1
|
|
1308: 08000613 li a2,128
|
|
130c: 45a9 li a1,10
|
|
130e: 4501 li a0,0
|
|
1310: c90ff0ef jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
if (pet.sleeping) {
|
|
1314: 00f4c403 lbu s0,15(s1)
|
|
1318: 38040463 beqz s0,16a0 <main+0x996>
|
|
ssd1306_drawstr(px + PANA_W - 2, 14, "z", 1);
|
|
131c: 6609 lui a2,0x2
|
|
131e: 4685 li a3,1
|
|
1320: b4860613 addi a2,a2,-1208 # 1b48 <TIM2_IRQHandler+0x8a>
|
|
1324: 45b9 li a1,14
|
|
1326: 04e00513 li a0,78
|
|
132a: eeffe0ef jal 218 <ssd1306_drawstr>
|
|
ssd1306_drawstr(px + PANA_W + 4, 12, "Z", 1);
|
|
132e: 6609 lui a2,0x2
|
|
1330: 4685 li a3,1
|
|
1332: b4c60613 addi a2,a2,-1204 # 1b4c <TIM2_IRQHandler+0x8e>
|
|
1336: 45b1 li a1,12
|
|
1338: 05400513 li a0,84
|
|
133c: eddfe0ef jal 218 <ssd1306_drawstr>
|
|
1340: 03000793 li a5,48
|
|
1344: c43e sw a5,8(sp)
|
|
px = 48; py = 16;
|
|
1346: 47c1 li a5,16
|
|
1348: c03e sw a5,0(sp)
|
|
134a: 03000793 li a5,48
|
|
134e: c23e sw a5,4(sp)
|
|
if (pet.form == FORM_CLAUDE) spr = spr_claude;
|
|
1350: 00c4c783 lbu a5,12(s1)
|
|
1354: 6609 lui a2,0x2
|
|
1356: 62c60613 addi a2,a2,1580 # 262c <spr_claude>
|
|
135a: c63e sw a5,12(sp)
|
|
135c: 4732 lw a4,12(sp)
|
|
135e: 478d li a5,3
|
|
1360: 02f70b63 beq a4,a5,1396 <main+0x68c>
|
|
else if (pet.form == FORM_GLITCH) spr = spr_glitch;
|
|
1364: 46b2 lw a3,12(sp)
|
|
1366: 4711 li a4,4
|
|
1368: 3ae68663 beq a3,a4,1714 <main+0xa0a>
|
|
if (!pet.alive) return EXP_DEAD;
|
|
136c: 4742 lw a4,16(sp)
|
|
else spr = species_frames[pet.species][current_expression()];
|
|
136e: 00a4c683 lbu a3,10(s1)
|
|
if (!pet.alive) return EXP_DEAD;
|
|
1372: 4519 li a0,6
|
|
1374: c719 beqz a4,1382 <main+0x678>
|
|
if (anim_timer) return anim_exp;
|
|
1376: c2c1c703 lbu a4,-980(gp) # 20000028 <anim_timer>
|
|
137a: 34070f63 beqz a4,16d8 <main+0x9ce>
|
|
137e: c281c503 lbu a0,-984(gp) # 20000024 <anim_exp>
|
|
else spr = species_frames[pet.species][current_expression()];
|
|
1382: 00369793 slli a5,a3,0x3
|
|
1386: 8f95 sub a5,a5,a3
|
|
1388: 6709 lui a4,0x2
|
|
138a: 97aa add a5,a5,a0
|
|
138c: 078a slli a5,a5,0x2
|
|
138e: 6ac70713 addi a4,a4,1708 # 26ac <species_frames>
|
|
1392: 97ba add a5,a5,a4
|
|
1394: 4390 lw a2,0(a5)
|
|
ssd1306_drawImage(x, y, spr, PANA_W, PANA_H, 0);
|
|
1396: 4582 lw a1,0(sp)
|
|
1398: 4522 lw a0,8(sp)
|
|
139a: 02000713 li a4,32
|
|
139e: 86ba mv a3,a4
|
|
13a0: c832 sw a2,16(sp)
|
|
13a2: e16ff0ef jal 9b8 <ssd1306_drawImage.constprop.0>
|
|
if (spr != spr_claude && spr != spr_glitch && !pet.sleeping)
|
|
13a6: 4642 lw a2,16(sp)
|
|
13a8: 6789 lui a5,0x2
|
|
13aa: 62c78793 addi a5,a5,1580 # 262c <spr_claude>
|
|
13ae: 10f60f63 beq a2,a5,14cc <main+0x7c2>
|
|
13b2: 6789 lui a5,0x2
|
|
13b4: 5ac78793 addi a5,a5,1452 # 25ac <spr_glitch>
|
|
13b8: 10f60a63 beq a2,a5,14cc <main+0x7c2>
|
|
13bc: 10041863 bnez s0,14cc <main+0x7c2>
|
|
if (pet.form >= FORM_USER) { // shades
|
|
13c0: 47b2 lw a5,12(sp)
|
|
13c2: 14078263 beqz a5,1506 <main+0x7fc>
|
|
uint8_t cy = eye_cy[sp], lx = eye_lx[sp], rx = eye_rx[sp];
|
|
13c6: 00a4c703 lbu a4,10(s1)
|
|
13ca: c0c18793 addi a5,gp,-1012 # 20000008 <eye_rx>
|
|
13ce: 97ba add a5,a5,a4
|
|
13d0: 0007c403 lbu s0,0(a5)
|
|
13d4: c1418693 addi a3,gp,-1004 # 20000010 <eye_cy>
|
|
13d8: c1018793 addi a5,gp,-1008 # 2000000c <eye_lx>
|
|
13dc: 97ba add a5,a5,a4
|
|
13de: 9736 add a4,a4,a3
|
|
ssd1306_fillRect(x + lx - 3, y + cy - 2, 7, 4, 0);
|
|
13e0: 0007c303 lbu t1,0(a5)
|
|
13e4: 00074703 lbu a4,0(a4)
|
|
13e8: 4682 lw a3,0(sp)
|
|
13ea: 4792 lw a5,4(sp)
|
|
13ec: 461d li a2,7
|
|
13ee: 00d702b3 add t0,a4,a3
|
|
13f2: 979a add a5,a5,t1
|
|
13f4: ffe28593 addi a1,t0,-2
|
|
13f8: ffd78513 addi a0,a5,-3
|
|
13fc: 4701 li a4,0
|
|
13fe: 4691 li a3,4
|
|
1400: d61a sw t1,44(sp)
|
|
1402: d416 sw t0,40(sp)
|
|
1404: d22e sw a1,36(sp)
|
|
1406: c83e sw a5,16(sp)
|
|
1408: db9fe0ef jal 1c0 <ssd1306_fillRect>
|
|
ssd1306_fillRect(x + rx - 3, y + cy - 2, 7, 4, 0);
|
|
140c: 4792 lw a5,4(sp)
|
|
140e: 5592 lw a1,36(sp)
|
|
1410: 4701 li a4,0
|
|
1412: 00878533 add a0,a5,s0
|
|
1416: 461d li a2,7
|
|
1418: 4691 li a3,4
|
|
141a: 1575 addi a0,a0,-3
|
|
141c: da5fe0ef jal 1c0 <ssd1306_fillRect>
|
|
if (rx - lx > 7)
|
|
1420: 5332 lw t1,44(sp)
|
|
1422: 471d li a4,7
|
|
1424: 47c2 lw a5,16(sp)
|
|
1426: 40640633 sub a2,s0,t1
|
|
142a: 52a2 lw t0,40(sp)
|
|
142c: 02c75263 bge a4,a2,1450 <main+0x746>
|
|
ssd1306_drawFastHLine(x + lx + 4, y + cy - 1, rx - lx - 7, 0);
|
|
1430: 00478513 addi a0,a5,4
|
|
1434: 07f00793 li a5,127
|
|
1438: 00a7cc63 blt a5,a0,1450 <main+0x746>
|
|
143c: fff28593 addi a1,t0,-1
|
|
1440: 03f00793 li a5,63
|
|
1444: 00b7c663 blt a5,a1,1450 <main+0x746>
|
|
1448: 4681 li a3,0
|
|
144a: 1665 addi a2,a2,-7
|
|
144c: b54ff0ef jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
if (pet.form >= FORM_ROOT) { // gaming headset + mic boom
|
|
1450: 4732 lw a4,12(sp)
|
|
1452: 4785 li a5,1
|
|
1454: 0af70963 beq a4,a5,1506 <main+0x7fc>
|
|
ssd1306_drawLine(x + 3, y + 10, x + 9, y + 2, 0);
|
|
1458: 4792 lw a5,4(sp)
|
|
145a: 078d addi a5,a5,3
|
|
145c: d23e sw a5,36(sp)
|
|
145e: 4782 lw a5,0(sp)
|
|
1460: 5512 lw a0,36(sp)
|
|
1462: 00a78413 addi s0,a5,10
|
|
1466: 4792 lw a5,4(sp)
|
|
1468: 85a2 mv a1,s0
|
|
146a: 07a5 addi a5,a5,9
|
|
146c: d43e sw a5,40(sp)
|
|
146e: 4782 lw a5,0(sp)
|
|
1470: 5622 lw a2,40(sp)
|
|
1472: 0789 addi a5,a5,2
|
|
1474: 86be mv a3,a5
|
|
1476: c83e sw a5,16(sp)
|
|
1478: b6cff0ef jal 7e4 <ssd1306_drawLine.constprop.0>
|
|
ssd1306_drawLine(x + 9, y + 2, x + 23, y + 2, 0);
|
|
147c: 4792 lw a5,4(sp)
|
|
147e: 46c2 lw a3,16(sp)
|
|
1480: 5522 lw a0,40(sp)
|
|
1482: 07dd addi a5,a5,23
|
|
1484: 863e mv a2,a5
|
|
1486: 85b6 mv a1,a3
|
|
1488: d63e sw a5,44(sp)
|
|
148a: b5aff0ef jal 7e4 <ssd1306_drawLine.constprop.0>
|
|
ssd1306_drawLine(x + 23, y + 2, x + 29, y + 10, 0);
|
|
148e: 4792 lw a5,4(sp)
|
|
1490: 45c2 lw a1,16(sp)
|
|
1492: 5532 lw a0,44(sp)
|
|
1494: 01d78613 addi a2,a5,29
|
|
1498: 86a2 mv a3,s0
|
|
149a: b4aff0ef jal 7e4 <ssd1306_drawLine.constprop.0>
|
|
ssd1306_fillRect(x + 1, y + 12, 4, 7, 0);
|
|
149e: 4782 lw a5,0(sp)
|
|
14a0: 469d li a3,7
|
|
14a2: 4611 li a2,4
|
|
14a4: 00c78593 addi a1,a5,12
|
|
14a8: 4792 lw a5,4(sp)
|
|
14aa: 4701 li a4,0
|
|
14ac: 00178513 addi a0,a5,1
|
|
14b0: d11fe0ef jal 1c0 <ssd1306_fillRect>
|
|
ssd1306_drawLine(x + 3, y + 18, x + 10, y + 24, 0);
|
|
14b4: 4782 lw a5,0(sp)
|
|
14b6: 5512 lw a0,36(sp)
|
|
14b8: 01878693 addi a3,a5,24
|
|
14bc: 4792 lw a5,4(sp)
|
|
14be: 00a78613 addi a2,a5,10
|
|
14c2: 4782 lw a5,0(sp)
|
|
14c4: 01278593 addi a1,a5,18
|
|
14c8: b1cff0ef jal 7e4 <ssd1306_drawLine.constprop.0>
|
|
if (pet.form == FORM_CLAUDE) {
|
|
14cc: 4732 lw a4,12(sp)
|
|
14ce: 478d li a5,3
|
|
14d0: 02f71b63 bne a4,a5,1506 <main+0x7fc>
|
|
ssd1306_drawPixel(x - 2 + (frame & 3), y + 4, 1);
|
|
14d4: c381a403 lw s0,-968(gp) # 20000034 <frame>
|
|
14d8: 4782 lw a5,0(sp)
|
|
14da: 4605 li a2,1
|
|
14dc: 00347513 andi a0,s0,3
|
|
14e0: 00478593 addi a1,a5,4
|
|
14e4: 47a2 lw a5,8(sp)
|
|
14e6: 1579 addi a0,a0,-2
|
|
14e8: 953e add a0,a0,a5
|
|
14ea: c9bfe0ef jal 184 <ssd1306_drawPixel>
|
|
ssd1306_drawPixel(x + PANA_W + (frame & 1), y + 10, 1);
|
|
14ee: 4782 lw a5,0(sp)
|
|
14f0: 00147513 andi a0,s0,1
|
|
14f4: 02050513 addi a0,a0,32
|
|
14f8: 00a78593 addi a1,a5,10
|
|
14fc: 47a2 lw a5,8(sp)
|
|
14fe: 4605 li a2,1
|
|
1500: 953e add a0,a0,a5
|
|
1502: c83fe0ef jal 184 <ssd1306_drawPixel>
|
|
1506: 4685 li a3,1
|
|
1508: 08000613 li a2,128
|
|
150c: 02e00593 li a1,46
|
|
1510: 4501 li a0,0
|
|
1512: a8eff0ef jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
for (uint8_t i = 0; i < pet.poop; i++)
|
|
1516: 4401 li s0,0
|
|
1518: 00e4c783 lbu a5,14(s1)
|
|
151c: 20f46063 bltu s0,a5,171c <main+0xa12>
|
|
1520: 4401 li s0,0
|
|
ssd1306_drawImage(x, 48, menu_icons[i], ICON_W, ICON_H, 0);
|
|
1522: 6709 lui a4,0x2
|
|
1524: 70070713 addi a4,a4,1792 # 2700 <menu_icons>
|
|
1528: 00241793 slli a5,s0,0x2
|
|
152c: 97ba add a5,a5,a4
|
|
152e: 00341493 slli s1,s0,0x3
|
|
1532: 4390 lw a2,0(a5)
|
|
1534: 94a2 add s1,s1,s0
|
|
1536: 4741 li a4,16
|
|
1538: 0486 slli s1,s1,0x1
|
|
153a: 86ba mv a3,a4
|
|
153c: 03000593 li a1,48
|
|
1540: 00148513 addi a0,s1,1
|
|
1544: c74ff0ef jal 9b8 <ssd1306_drawImage.constprop.0>
|
|
if (i == cursor)
|
|
1548: 5702 lw a4,32(sp)
|
|
154a: 0ff47793 zext.b a5,s0
|
|
154e: 00f71963 bne a4,a5,1560 <main+0x856>
|
|
ssd1306_drawRect(x - 1, 47, ICON_W + 1, ICON_H + 1, 1);
|
|
1552: 46c5 li a3,17
|
|
1554: 8636 mv a2,a3
|
|
1556: 02f00593 li a1,47
|
|
155a: 8526 mv a0,s1
|
|
155c: b9eff0ef jal 8fa <ssd1306_drawRect.constprop.0>
|
|
for (uint8_t i = 0; i < ICON_COUNT; i++) {
|
|
1560: 0405 addi s0,s0,1
|
|
1562: 479d li a5,7
|
|
1564: faf41fe3 bne s0,a5,1522 <main+0x818>
|
|
if (evo_anim) draw_evo_banner(); // celebratory overlay on top
|
|
1568: c441c783 lbu a5,-956(gp) # 20000040 <evo_anim>
|
|
156c: 2a078363 beqz a5,1812 <main+0xb08>
|
|
ssd1306_fillRect(6, 18, SSD1306_W - 12, 24, 0);
|
|
1570: 4701 li a4,0
|
|
1572: 46e1 li a3,24
|
|
1574: 07400613 li a2,116
|
|
1578: 45c9 li a1,18
|
|
157a: 4519 li a0,6
|
|
157c: c45fe0ef jal 1c0 <ssd1306_fillRect>
|
|
ssd1306_drawRect(6, 18, SSD1306_W - 12, 24, 1);
|
|
1580: 46e1 li a3,24
|
|
1582: 07400613 li a2,116
|
|
1586: 45c9 li a1,18
|
|
1588: 4519 li a0,6
|
|
158a: b70ff0ef jal 8fa <ssd1306_drawRect.constprop.0>
|
|
draw_center_str(21, ">> evolving");
|
|
158e: 6589 lui a1,0x2
|
|
1590: b5058593 addi a1,a1,-1200 # 1b50 <TIM2_IRQHandler+0x92>
|
|
1594: 4555 li a0,21
|
|
1596: 9b0ff0ef jal 746 <draw_center_str>
|
|
p = s_cat(p, "[ ");
|
|
159a: 6589 lui a1,0x2
|
|
159c: b5c58593 addi a1,a1,-1188 # 1b5c <TIM2_IRQHandler+0x9e>
|
|
15a0: 0088 addi a0,sp,64
|
|
15a2: d03fe0ef jal 2a4 <s_cat>
|
|
p = s_cat(p, form_names[pet.form]);
|
|
15a6: 47b2 lw a5,12(sp)
|
|
15a8: 6709 lui a4,0x2
|
|
15aa: 71c70713 addi a4,a4,1820 # 271c <form_names>
|
|
15ae: 078a slli a5,a5,0x2
|
|
15b0: 97ba add a5,a5,a4
|
|
15b2: 438c lw a1,0(a5)
|
|
15b4: cf1fe0ef jal 2a4 <s_cat>
|
|
p = s_cat(p, " ]");
|
|
15b8: 6589 lui a1,0x2
|
|
15ba: b6058593 addi a1,a1,-1184 # 1b60 <TIM2_IRQHandler+0xa2>
|
|
15be: ce7fe0ef jal 2a4 <s_cat>
|
|
*p = 0;
|
|
15c2: 00050023 sb zero,0(a0)
|
|
draw_center_str(31, b);
|
|
15c6: 008c addi a1,sp,64
|
|
15c8: 457d li a0,31
|
|
draw_center_str(56, "OK: respawn");
|
|
15ca: 97cff0ef jal 746 <draw_center_str>
|
|
15ce: a491 j 1812 <main+0xb08>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
15d0: fff7c693 not a3,a5
|
|
15d4: 86fd srai a3,a3,0x1f
|
|
15d6: 8ff5 and a5,a5,a3
|
|
15d8: b985 j 1248 <main+0x53e>
|
|
pet.sleeping = !pet.sleeping;
|
|
15da: 00f4c503 lbu a0,15(s1)
|
|
beep(pet.sleeping ? 440 : 660, 120);
|
|
15de: 07800593 li a1,120
|
|
pet.sleeping = !pet.sleeping;
|
|
15e2: 00153793 seqz a5,a0
|
|
beep(pet.sleeping ? 440 : 660, 120);
|
|
15e6: 00a03533 snez a0,a0
|
|
15ea: 40a00533 neg a0,a0
|
|
15ee: 0dc57513 andi a0,a0,220
|
|
pet.sleeping = !pet.sleeping;
|
|
15f2: 00f487a3 sb a5,15(s1)
|
|
beep(pet.sleeping ? 440 : 660, 120);
|
|
15f6: 1b850513 addi a0,a0,440
|
|
15fa: b925 j 1232 <main+0x528>
|
|
pet.happy = clamp100(pet.happy + 5);
|
|
15fc: 00148783 lb a5,1(s1)
|
|
pet.hygiene = 100;
|
|
1600: 06400693 li a3,100
|
|
pet.poop = 0;
|
|
1604: 00048723 sb zero,14(s1)
|
|
pet.hygiene = 100;
|
|
1608: 00d481a3 sb a3,3(s1)
|
|
pet.happy = clamp100(pet.happy + 5);
|
|
160c: 0795 addi a5,a5,5
|
|
160e: c4818713 addi a4,gp,-952 # 20000044 <pet>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1612: 02f6d363 bge a3,a5,1638 <main+0x92e>
|
|
1616: 87b6 mv a5,a3
|
|
beep(1319, 50); beep(1047, 50);
|
|
1618: 03200593 li a1,50
|
|
161c: 52700513 li a0,1319
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1620: 00f700a3 sb a5,1(a4)
|
|
beep(1319, 50); beep(1047, 50);
|
|
1624: cf3fe0ef jal 316 <beep>
|
|
1628: 41700513 li a0,1047
|
|
162c: 03200593 li a1,50
|
|
1630: ce7fe0ef jal 316 <beep>
|
|
add_xp(3);
|
|
1634: 450d li a0,3
|
|
1636: b9b9 j 1294 <main+0x58a>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1638: fff7c693 not a3,a5
|
|
163c: 86fd srai a3,a3,0x1f
|
|
163e: 8ff5 and a5,a5,a3
|
|
1640: bfe1 j 1618 <main+0x90e>
|
|
pet.health = clamp100(pet.health + 35);
|
|
1642: 00448783 lb a5,4(s1)
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
1646: 06400713 li a4,100
|
|
pet.health = clamp100(pet.health + 35);
|
|
164a: 02378793 addi a5,a5,35
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
164e: 02f75663 bge a4,a5,167a <main+0x970>
|
|
1652: 87ba mv a5,a4
|
|
beep(784, 60); beep(1047, 60); beep(1319, 90);
|
|
1654: 03c00593 li a1,60
|
|
1658: 31000513 li a0,784
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
165c: 00f48223 sb a5,4(s1)
|
|
beep(784, 60); beep(1047, 60); beep(1319, 90);
|
|
1660: cb7fe0ef jal 316 <beep>
|
|
1664: 03c00593 li a1,60
|
|
1668: 41700513 li a0,1047
|
|
166c: cabfe0ef jal 316 <beep>
|
|
1670: 05a00593 li a1,90
|
|
1674: 52700513 li a0,1319
|
|
1678: b661 j 1200 <main+0x4f6>
|
|
static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); }
|
|
167a: fff7c713 not a4,a5
|
|
167e: 877d srai a4,a4,0x1f
|
|
1680: 8ff9 and a5,a5,a4
|
|
1682: bfc9 j 1654 <main+0x94a>
|
|
screen = SCR_STATS;
|
|
1684: 4789 li a5,2
|
|
1686: c2f18b23 sb a5,-970(gp) # 20000032 <screen>
|
|
beep(659, 40);
|
|
168a: 02800593 li a1,40
|
|
168e: 29300513 li a0,659
|
|
1692: b645 j 1232 <main+0x528>
|
|
screen = SCR_SETTINGS;
|
|
1694: 4791 li a5,4
|
|
1696: c2f18b23 sb a5,-970(gp) # 20000032 <screen>
|
|
set_sel = 0;
|
|
169a: c20186a3 sb zero,-979(gp) # 20000029 <set_sel>
|
|
169e: b7f5 j 168a <main+0x980>
|
|
uint32_t t = frame % 80;
|
|
16a0: c381a783 lw a5,-968(gp) # 20000034 <frame>
|
|
16a4: 05000593 li a1,80
|
|
16a8: 853e mv a0,a5
|
|
16aa: c03e sw a5,0(sp)
|
|
16ac: a29fe0ef jal d4 <__umodsi3>
|
|
px = (t < 40) ? 30 + t : 30 + (80 - t); // 30..70..30
|
|
16b0: 02700713 li a4,39
|
|
16b4: 4782 lw a5,0(sp)
|
|
16b6: 00a76d63 bltu a4,a0,16d0 <main+0x9c6>
|
|
16ba: 01e50713 addi a4,a0,30
|
|
16be: c43a sw a4,8(sp)
|
|
16c0: 4722 lw a4,8(sp)
|
|
py = 14 + ((frame % 16) < 8 ? 0 : 1);
|
|
16c2: 8ba1 andi a5,a5,8
|
|
16c4: 00f037b3 snez a5,a5
|
|
16c8: 07b9 addi a5,a5,14
|
|
16ca: c23a sw a4,4(sp)
|
|
16cc: c03e sw a5,0(sp)
|
|
16ce: b149 j 1350 <main+0x646>
|
|
px = (t < 40) ? 30 + t : 30 + (80 - t); // 30..70..30
|
|
16d0: 06e00713 li a4,110
|
|
16d4: 8f09 sub a4,a4,a0
|
|
16d6: b7e5 j 16be <main+0x9b4>
|
|
if (pet.sleeping) return EXP_SLEEP;
|
|
16d8: 4515 li a0,5
|
|
16da: ca0414e3 bnez s0,1382 <main+0x678>
|
|
if (pet.health < 30 || pet.happy < 25 || pet.satiety < 20)
|
|
16de: 00448603 lb a2,4(s1)
|
|
16e2: 4775 li a4,29
|
|
return EXP_SAD;
|
|
16e4: 853e mv a0,a5
|
|
if (pet.health < 30 || pet.happy < 25 || pet.satiety < 20)
|
|
16e6: c8c75ee3 bge a4,a2,1382 <main+0x678>
|
|
16ea: 00148603 lb a2,1(s1)
|
|
16ee: 4761 li a4,24
|
|
16f0: c8c759e3 bge a4,a2,1382 <main+0x678>
|
|
16f4: 00048603 lb a2,0(s1)
|
|
16f8: 474d li a4,19
|
|
16fa: c8c754e3 bge a4,a2,1382 <main+0x678>
|
|
if ((frame % 50) < 4) return EXP_BLINK;
|
|
16fe: c381a503 lw a0,-968(gp) # 20000034 <frame>
|
|
1702: 03200593 li a1,50
|
|
1706: c836 sw a3,16(sp)
|
|
1708: 9cdfe0ef jal d4 <__umodsi3>
|
|
170c: 46c2 lw a3,16(sp)
|
|
170e: 00453513 sltiu a0,a0,4
|
|
1712: b985 j 1382 <main+0x678>
|
|
else if (pet.form == FORM_GLITCH) spr = spr_glitch;
|
|
1714: 6609 lui a2,0x2
|
|
1716: 5ac60613 addi a2,a2,1452 # 25ac <spr_glitch>
|
|
171a: b9b5 j 1396 <main+0x68c>
|
|
ssd1306_drawImage(8 + i * 12, 38, spr_poop, 8, 8, 0);
|
|
171c: 00141513 slli a0,s0,0x1
|
|
1720: 9522 add a0,a0,s0
|
|
1722: 4721 li a4,8
|
|
1724: 050a slli a0,a0,0x2
|
|
1726: 86ba mv a3,a4
|
|
1728: c1818613 addi a2,gp,-1000 # 20000014 <spr_poop>
|
|
172c: 02600593 li a1,38
|
|
1730: 953a add a0,a0,a4
|
|
for (uint8_t i = 0; i < pet.poop; i++)
|
|
1732: 0405 addi s0,s0,1
|
|
ssd1306_drawImage(8 + i * 12, 38, spr_poop, 8, 8, 0);
|
|
1734: a84ff0ef jal 9b8 <ssd1306_drawImage.constprop.0>
|
|
for (uint8_t i = 0; i < pet.poop; i++)
|
|
1738: 0ff47413 zext.b s0,s0
|
|
173c: bbf1 j 1518 <main+0x80e>
|
|
draw_main();
|
|
break;
|
|
|
|
case SCR_STATS:
|
|
if (any_edge) { screen = SCR_MAIN; beep(880, 30); }
|
|
173e: cb89 beqz a5,1750 <main+0xa46>
|
|
1740: 4785 li a5,1
|
|
1742: 45f9 li a1,30
|
|
1744: 37000513 li a0,880
|
|
1748: c2f18b23 sb a5,-970(gp) # 20000032 <screen>
|
|
174c: bcbfe0ef jal 316 <beep>
|
|
ssd1306_setbuf(0);
|
|
1750: cf2ff0ef jal c42 <ssd1306_setbuf.constprop.0>
|
|
draw_center_str(0, "~/pet $ stat");
|
|
1754: 6589 lui a1,0x2
|
|
1756: b6458593 addi a1,a1,-1180 # 1b64 <TIM2_IRQHandler+0xa6>
|
|
175a: 4501 li a0,0
|
|
draw_bar(10, "FOOD", pet.satiety);
|
|
175c: c4818413 addi s0,gp,-952 # 20000044 <pet>
|
|
draw_center_str(0, "~/pet $ stat");
|
|
1760: fe7fe0ef jal 746 <draw_center_str>
|
|
draw_bar(10, "FOOD", pet.satiety);
|
|
1764: 00040603 lb a2,0(s0)
|
|
1768: 6589 lui a1,0x2
|
|
176a: b7458593 addi a1,a1,-1164 # 1b74 <TIM2_IRQHandler+0xb6>
|
|
176e: 4529 li a0,10
|
|
1770: 9e0ff0ef jal 950 <draw_bar>
|
|
draw_bar(19, "HAPPY", pet.happy);
|
|
1774: 00140603 lb a2,1(s0)
|
|
1778: 6589 lui a1,0x2
|
|
177a: b7c58593 addi a1,a1,-1156 # 1b7c <TIM2_IRQHandler+0xbe>
|
|
177e: 454d li a0,19
|
|
1780: 9d0ff0ef jal 950 <draw_bar>
|
|
draw_bar(28, "ENERGY", pet.energy);
|
|
1784: 00240603 lb a2,2(s0)
|
|
1788: 6589 lui a1,0x2
|
|
178a: b8458593 addi a1,a1,-1148 # 1b84 <TIM2_IRQHandler+0xc6>
|
|
178e: 4571 li a0,28
|
|
1790: 9c0ff0ef jal 950 <draw_bar>
|
|
draw_bar(37, "CLEAN", pet.hygiene);
|
|
1794: 00340603 lb a2,3(s0)
|
|
1798: 6589 lui a1,0x2
|
|
179a: b8c58593 addi a1,a1,-1140 # 1b8c <TIM2_IRQHandler+0xce>
|
|
179e: 02500513 li a0,37
|
|
17a2: 9aeff0ef jal 950 <draw_bar>
|
|
draw_bar(46, "HEALTH", pet.health);
|
|
17a6: 00440603 lb a2,4(s0)
|
|
17aa: 6589 lui a1,0x2
|
|
17ac: b9458593 addi a1,a1,-1132 # 1b94 <TIM2_IRQHandler+0xd6>
|
|
17b0: 02e00513 li a0,46
|
|
17b4: 99cff0ef jal 950 <draw_bar>
|
|
p = u_cat(p, pet.level);
|
|
17b8: 00b44483 lbu s1,11(s0)
|
|
*p++ = 'L';
|
|
17bc: 04c00793 li a5,76
|
|
p = u_cat(p, pet.level);
|
|
17c0: 04110513 addi a0,sp,65
|
|
17c4: 85a6 mv a1,s1
|
|
*p++ = 'L';
|
|
17c6: 04f10023 sb a5,64(sp)
|
|
p = u_cat(p, pet.level);
|
|
17ca: aedfe0ef jal 2b6 <u_cat>
|
|
p = s_cat(p, " xp ");
|
|
17ce: 6589 lui a1,0x2
|
|
17d0: b9c58593 addi a1,a1,-1124 # 1b9c <TIM2_IRQHandler+0xde>
|
|
17d4: ad1fe0ef jal 2a4 <s_cat>
|
|
if (pet.level < MAX_LEVEL) {
|
|
17d8: 478d li a5,3
|
|
17da: 0a97ec63 bltu a5,s1,1892 <main+0xb88>
|
|
p = u_cat(p, pet.xp);
|
|
17de: 00845583 lhu a1,8(s0)
|
|
p = u_cat(p, level_xp[pet.level]);
|
|
17e2: 0486 slli s1,s1,0x1
|
|
p = u_cat(p, pet.xp);
|
|
17e4: ad3fe0ef jal 2b6 <u_cat>
|
|
*p++ = '/';
|
|
17e8: 02f00793 li a5,47
|
|
17ec: 00f50023 sb a5,0(a0)
|
|
p = u_cat(p, level_xp[pet.level]);
|
|
17f0: c2018793 addi a5,gp,-992 # 2000001c <level_xp>
|
|
17f4: 94be add s1,s1,a5
|
|
17f6: 0004d583 lhu a1,0(s1)
|
|
17fa: 0505 addi a0,a0,1
|
|
17fc: abbfe0ef jal 2b6 <u_cat>
|
|
*p = 0;
|
|
1800: 00050023 sb zero,0(a0)
|
|
ssd1306_drawstr(0, 56, line, 1);
|
|
1804: 4685 li a3,1
|
|
1806: 0090 addi a2,sp,64
|
|
1808: 03800593 li a1,56
|
|
180c: 4501 li a0,0
|
|
180e: a0bfe0ef jal 218 <ssd1306_drawstr>
|
|
ssd1306_refresh();
|
|
1812: c58ff0ef jal c6a <ssd1306_refresh>
|
|
draw_dead();
|
|
break;
|
|
}
|
|
|
|
// sleep the display after the configured idle period
|
|
uint16_t timeout = screen_timeout_opts[timeout_idx];
|
|
1816: c041c703 lbu a4,-1020(gp) # 20000000 <timeout_idx>
|
|
181a: 6789 lui a5,0x2
|
|
181c: 7e478793 addi a5,a5,2020 # 27e4 <screen_timeout_opts>
|
|
1820: 0706 slli a4,a4,0x1
|
|
1822: 97ba add a5,a5,a4
|
|
1824: 0007d783 lhu a5,0(a5)
|
|
if (timeout && idle_frames >= timeout) {
|
|
1828: c301a403 lw s0,-976(gp) # 2000002c <idle_frames>
|
|
182c: cb89 beqz a5,183e <main+0xb34>
|
|
182e: 00f46863 bltu s0,a5,183e <main+0xb34>
|
|
ssd1306_cmd(SSD1306_DISPLAYOFF);
|
|
1832: 0ae00513 li a0,174
|
|
1836: b5cff0ef jal b92 <ssd1306_cmd>
|
|
disp_on = 0;
|
|
183a: c00182a3 sb zero,-1019(gp) # 20000001 <disp_on>
|
|
}
|
|
}
|
|
|
|
if (anim_timer) anim_timer--;
|
|
183e: c2c1c783 lbu a5,-980(gp) # 20000028 <anim_timer>
|
|
1842: c781 beqz a5,184a <main+0xb40>
|
|
1844: 17fd addi a5,a5,-1
|
|
1846: c2f18623 sb a5,-980(gp) # 20000028 <anim_timer>
|
|
if (evo_anim) evo_anim--;
|
|
184a: c441c783 lbu a5,-956(gp) # 20000040 <evo_anim>
|
|
184e: c781 beqz a5,1856 <main+0xb4c>
|
|
1850: 17fd addi a5,a5,-1
|
|
1852: c4f18223 sb a5,-956(gp) # 20000040 <evo_anim>
|
|
|
|
// advance game time independent of screen / display state
|
|
if (pet.alive && ++tick_acc >= TICK_FRAMES) {
|
|
1856: c581c783 lbu a5,-936(gp) # 20000054 <pet+0x10>
|
|
185a: cf81 beqz a5,1872 <main+0xb68>
|
|
185c: c2a1d783 lhu a5,-982(gp) # 20000026 <tick_acc>
|
|
1860: 0f900693 li a3,249
|
|
1864: 0785 addi a5,a5,1
|
|
1866: 07c2 slli a5,a5,0x10
|
|
1868: 83c1 srli a5,a5,0x10
|
|
186a: 22f6e363 bltu a3,a5,1a90 <main+0xd86>
|
|
186e: c2f19523 sh a5,-982(gp) # 20000026 <tick_acc>
|
|
tick_acc = 0;
|
|
game_tick();
|
|
}
|
|
|
|
frame++;
|
|
1872: c381a783 lw a5,-968(gp) # 20000034 <frame>
|
|
idle_frames++;
|
|
Delay_Ms(FRAME_MS);
|
|
1876: 00058537 lui a0,0x58
|
|
idle_frames++;
|
|
187a: 0405 addi s0,s0,1
|
|
frame++;
|
|
187c: 0785 addi a5,a5,1
|
|
Delay_Ms(FRAME_MS);
|
|
187e: e4050513 addi a0,a0,-448 # 57e40 <tama.c.7f472170+0x53e03>
|
|
frame++;
|
|
1882: c2f1ac23 sw a5,-968(gp) # 20000034 <frame>
|
|
idle_frames++;
|
|
1886: c281a823 sw s0,-976(gp) # 2000002c <idle_frames>
|
|
Delay_Ms(FRAME_MS);
|
|
188a: 895fe0ef jal 11e <DelaySysTick>
|
|
188e: efeff06f j f8c <main+0x282>
|
|
p = s_cat(p, "MAX");
|
|
1892: 6589 lui a1,0x2
|
|
1894: ba458593 addi a1,a1,-1116 # 1ba4 <TIM2_IRQHandler+0xe6>
|
|
1898: a0dfe0ef jal 2a4 <s_cat>
|
|
189c: b795 j 1800 <main+0xaf6>
|
|
if (left_edge) {
|
|
189e: c185 beqz a1,18be <main+0xbb4>
|
|
set_sel = (set_sel + SETTINGS_ROWS - 1) % SETTINGS_ROWS;
|
|
18a0: c2d1c503 lbu a0,-979(gp) # 20000029 <set_sel>
|
|
18a4: 458d li a1,3
|
|
18a6: c236 sw a3,4(sp)
|
|
18a8: 0509 addi a0,a0,2
|
|
18aa: 84ffe0ef jal f8 <__modsi3>
|
|
18ae: c2a186a3 sb a0,-979(gp) # 20000029 <set_sel>
|
|
beep(1047, 25);
|
|
18b2: 45e5 li a1,25
|
|
18b4: 41700513 li a0,1047
|
|
18b8: a5ffe0ef jal 316 <beep>
|
|
18bc: 4692 lw a3,4(sp)
|
|
if (right_edge) {
|
|
18be: ce91 beqz a3,18da <main+0xbd0>
|
|
set_sel = (set_sel + 1) % SETTINGS_ROWS;
|
|
18c0: c2d1c503 lbu a0,-979(gp) # 20000029 <set_sel>
|
|
18c4: 458d li a1,3
|
|
18c6: 0505 addi a0,a0,1
|
|
18c8: 831fe0ef jal f8 <__modsi3>
|
|
18cc: c2a186a3 sb a0,-979(gp) # 20000029 <set_sel>
|
|
beep(1047, 25);
|
|
18d0: 45e5 li a1,25
|
|
18d2: 41700513 li a0,1047
|
|
18d6: a41fe0ef jal 316 <beep>
|
|
if (ok_edge) {
|
|
18da: 4782 lw a5,0(sp)
|
|
18dc: c3a1 beqz a5,191c <main+0xc12>
|
|
if (set_sel == 0) { // cycle screen-off timeout
|
|
18de: c2d1c703 lbu a4,-979(gp) # 20000029 <set_sel>
|
|
18e2: ef11 bnez a4,18fe <main+0xbf4>
|
|
timeout_idx = (timeout_idx + 1) % TIMEOUT_OPT_COUNT;
|
|
18e4: c041c503 lbu a0,-1020(gp) # 20000000 <timeout_idx>
|
|
18e8: 4599 li a1,6
|
|
18ea: 0505 addi a0,a0,1
|
|
18ec: 80dfe0ef jal f8 <__modsi3>
|
|
18f0: c0a18223 sb a0,-1020(gp) # 20000000 <timeout_idx>
|
|
beep(880, 40);
|
|
18f4: 02800593 li a1,40
|
|
beep(880, 30);
|
|
18f8: 37000513 li a0,880
|
|
18fc: a831 j 1918 <main+0xc0e>
|
|
} else if (set_sel == 1) { // toggle sound
|
|
18fe: 4785 li a5,1
|
|
1900: 0ef71963 bne a4,a5,19f2 <main+0xce8>
|
|
sound_on = !sound_on;
|
|
1904: c061c783 lbu a5,-1018(gp) # 20000002 <sound_on>
|
|
beep(988, 60); // only audible if just enabled
|
|
1908: 03c00593 li a1,60
|
|
190c: 3dc00513 li a0,988
|
|
sound_on = !sound_on;
|
|
1910: 0017b793 seqz a5,a5
|
|
1914: c0f18323 sb a5,-1018(gp) # 20000002 <sound_on>
|
|
beep(880, 30);
|
|
1918: 9fffe0ef jal 316 <beep>
|
|
ssd1306_setbuf(0);
|
|
191c: b26ff0ef jal c42 <ssd1306_setbuf.constprop.0>
|
|
draw_center_str(0, "- SETTINGS -");
|
|
1920: 6589 lui a1,0x2
|
|
1922: ba858593 addi a1,a1,-1112 # 1ba8 <TIM2_IRQHandler+0xea>
|
|
1926: 4501 li a0,0
|
|
1928: e1ffe0ef jal 746 <draw_center_str>
|
|
192c: 4685 li a3,1
|
|
192e: 08000613 li a2,128
|
|
1932: 45a9 li a1,10
|
|
1934: 4501 li a0,0
|
|
1936: e6bfe0ef jal 7a0 <ssd1306_drawFastHLine.part.0>
|
|
*s_cat(s_cat(rows[0], "Screen off:"), screen_timeout_names[timeout_idx]) = 0;
|
|
193a: 6589 lui a1,0x2
|
|
193c: bb858593 addi a1,a1,-1096 # 1bb8 <TIM2_IRQHandler+0xfa>
|
|
1940: 0088 addi a0,sp,64
|
|
1942: 963fe0ef jal 2a4 <s_cat>
|
|
1946: c041c703 lbu a4,-1020(gp) # 20000000 <timeout_idx>
|
|
194a: 6789 lui a5,0x2
|
|
194c: 74c78793 addi a5,a5,1868 # 274c <screen_timeout_names>
|
|
1950: 070a slli a4,a4,0x2
|
|
1952: 97ba add a5,a5,a4
|
|
1954: 438c lw a1,0(a5)
|
|
1956: 94ffe0ef jal 2a4 <s_cat>
|
|
*s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0;
|
|
195a: 6589 lui a1,0x2
|
|
*s_cat(s_cat(rows[0], "Screen off:"), screen_timeout_names[timeout_idx]) = 0;
|
|
195c: 00050023 sb zero,0(a0)
|
|
*s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0;
|
|
1960: bc458593 addi a1,a1,-1084 # 1bc4 <TIM2_IRQHandler+0x106>
|
|
1964: 05110513 addi a0,sp,81
|
|
1968: 93dfe0ef jal 2a4 <s_cat>
|
|
196c: c061c783 lbu a5,-1018(gp) # 20000002 <sound_on>
|
|
1970: c7c9 beqz a5,19fa <main+0xcf0>
|
|
1972: 6589 lui a1,0x2
|
|
1974: ae058593 addi a1,a1,-1312 # 1ae0 <TIM2_IRQHandler+0x22>
|
|
1978: 92dfe0ef jal 2a4 <s_cat>
|
|
*s_cat(rows[2], "Back") = 0;
|
|
197c: 6589 lui a1,0x2
|
|
*s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0;
|
|
197e: 00050023 sb zero,0(a0)
|
|
*s_cat(rows[2], "Back") = 0;
|
|
1982: bcc58593 addi a1,a1,-1076 # 1bcc <TIM2_IRQHandler+0x10e>
|
|
1986: 06210513 addi a0,sp,98
|
|
198a: 91bfe0ef jal 2a4 <s_cat>
|
|
198e: 00050023 sb zero,0(a0)
|
|
1992: 44c5 li s1,17
|
|
1994: 4401 li s0,0
|
|
int y = 18 + r * 12;
|
|
1996: 00148793 addi a5,s1,1
|
|
199a: c03e sw a5,0(sp)
|
|
if (r == set_sel) ssd1306_fillRect(0, y - 1, SSD1306_W, 10, 1);
|
|
199c: c2d1c283 lbu t0,-979(gp) # 20000029 <set_sel>
|
|
19a0: 0ff47313 zext.b t1,s0
|
|
19a4: 00531e63 bne t1,t0,19c0 <main+0xcb6>
|
|
19a8: 4705 li a4,1
|
|
19aa: 46a9 li a3,10
|
|
19ac: 08000613 li a2,128
|
|
19b0: 85a6 mv a1,s1
|
|
19b2: 4501 li a0,0
|
|
19b4: c216 sw t0,4(sp)
|
|
19b6: c01a sw t1,0(sp)
|
|
19b8: 809fe0ef jal 1c0 <ssd1306_fillRect>
|
|
19bc: 4292 lw t0,4(sp)
|
|
19be: 4302 lw t1,0(sp)
|
|
ssd1306_drawstr(4, y, rows[r], r == set_sel ? 0 : 1);
|
|
19c0: 00441613 slli a2,s0,0x4
|
|
19c4: 405306b3 sub a3,t1,t0
|
|
19c8: 9622 add a2,a2,s0
|
|
19ca: 009c addi a5,sp,64
|
|
19cc: 00148593 addi a1,s1,1
|
|
19d0: 00d036b3 snez a3,a3
|
|
19d4: 963e add a2,a2,a5
|
|
19d6: 4511 li a0,4
|
|
19d8: 841fe0ef jal 218 <ssd1306_drawstr>
|
|
for (uint8_t r = 0; r < SETTINGS_ROWS; r++) {
|
|
19dc: 04b1 addi s1,s1,12
|
|
19de: 03500713 li a4,53
|
|
19e2: 0405 addi s0,s0,1
|
|
19e4: fae499e3 bne s1,a4,1996 <main+0xc8c>
|
|
draw_center_str(56, "L/R move OK use");
|
|
19e8: 6589 lui a1,0x2
|
|
19ea: bd458593 addi a1,a1,-1068 # 1bd4 <TIM2_IRQHandler+0x116>
|
|
19ee: f66ff06f j 1154 <main+0x44a>
|
|
screen = SCR_MAIN;
|
|
19f2: c2f18b23 sb a5,-970(gp) # 20000032 <screen>
|
|
beep(880, 30);
|
|
19f6: 45f9 li a1,30
|
|
19f8: b701 j 18f8 <main+0xbee>
|
|
*s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0;
|
|
19fa: 6589 lui a1,0x2
|
|
19fc: ae858593 addi a1,a1,-1304 # 1ae8 <TIM2_IRQHandler+0x2a>
|
|
1a00: bfa5 j 1978 <main+0xc6e>
|
|
if (ok_edge) { // back to the welcome screen to re-pick
|
|
1a02: 4782 lw a5,0(sp)
|
|
1a04: cf99 beqz a5,1a22 <main+0xd18>
|
|
beep(659, 80); beep(988, 120);
|
|
1a06: 05000593 li a1,80
|
|
1a0a: 29300513 li a0,659
|
|
screen = SCR_SELECT;
|
|
1a0e: c2018b23 sb zero,-970(gp) # 20000032 <screen>
|
|
beep(659, 80); beep(988, 120);
|
|
1a12: 905fe0ef jal 316 <beep>
|
|
1a16: 07800593 li a1,120
|
|
1a1a: 3dc00513 li a0,988
|
|
1a1e: 8f9fe0ef jal 316 <beep>
|
|
ssd1306_setbuf(0);
|
|
1a22: a20ff0ef jal c42 <ssd1306_setbuf.constprop.0>
|
|
ssd1306_drawImage(48, 2, spr_grave, 32, 32, 0);
|
|
1a26: 02000713 li a4,32
|
|
1a2a: 6609 lui a2,0x2
|
|
1a2c: 86ba mv a3,a4
|
|
1a2e: 76460613 addi a2,a2,1892 # 2764 <spr_grave>
|
|
1a32: 4589 li a1,2
|
|
1a34: 03000513 li a0,48
|
|
1a38: f81fe0ef jal 9b8 <ssd1306_drawImage.constprop.0>
|
|
draw_center_str(36, pet.ascend == 2 ? "** CORRUPTED **" : "SEGFAULT (11)");
|
|
1a3c: c4818713 addi a4,gp,-952 # 20000044 <pet>
|
|
1a40: 00d74683 lbu a3,13(a4)
|
|
1a44: 4709 li a4,2
|
|
1a46: c4818413 addi s0,gp,-952 # 20000044 <pet>
|
|
1a4a: 02e69f63 bne a3,a4,1a88 <main+0xd7e>
|
|
1a4e: 6589 lui a1,0x2
|
|
1a50: aec58593 addi a1,a1,-1300 # 1aec <TIM2_IRQHandler+0x2e>
|
|
1a54: 02400513 li a0,36
|
|
1a58: ceffe0ef jal 746 <draw_center_str>
|
|
p = s_cat(p, "core dumped L");
|
|
1a5c: 6589 lui a1,0x2
|
|
1a5e: be858593 addi a1,a1,-1048 # 1be8 <TIM2_IRQHandler+0x12a>
|
|
1a62: 0088 addi a0,sp,64
|
|
1a64: 841fe0ef jal 2a4 <s_cat>
|
|
p = u_cat(p, pet.level);
|
|
1a68: 00b44583 lbu a1,11(s0)
|
|
1a6c: 84bfe0ef jal 2b6 <u_cat>
|
|
*p = 0;
|
|
1a70: 00050023 sb zero,0(a0)
|
|
draw_center_str(46, line);
|
|
1a74: 008c addi a1,sp,64
|
|
1a76: 02e00513 li a0,46
|
|
1a7a: ccdfe0ef jal 746 <draw_center_str>
|
|
draw_center_str(56, "OK: respawn");
|
|
1a7e: 6589 lui a1,0x2
|
|
1a80: bf858593 addi a1,a1,-1032 # 1bf8 <TIM2_IRQHandler+0x13a>
|
|
1a84: ed0ff06f j 1154 <main+0x44a>
|
|
draw_center_str(36, pet.ascend == 2 ? "** CORRUPTED **" : "SEGFAULT (11)");
|
|
1a88: 6589 lui a1,0x2
|
|
1a8a: afc58593 addi a1,a1,-1284 # 1afc <TIM2_IRQHandler+0x3e>
|
|
1a8e: b7d9 j 1a54 <main+0xd4a>
|
|
tick_acc = 0;
|
|
1a90: c2019523 sh zero,-982(gp) # 20000026 <tick_acc>
|
|
game_tick();
|
|
1a94: a79fe0ef jal 50c <game_tick>
|
|
1a98: bbe9 j 1872 <main+0xb68>
|
|
|
|
00001a9a <EXTI7_0_IRQHandler>:
|
|
{
|
|
1a9a: 1161 addi sp,sp,-8
|
|
1a9c: c03e sw a5,0(sp)
|
|
EXTI->INTFR = EXTI_Line0 | EXTI_Line5 | EXTI_Line6; // clear pending
|
|
1a9e: 400107b7 lui a5,0x40010
|
|
{
|
|
1aa2: c23a sw a4,4(sp)
|
|
EXTI->INTFR = EXTI_Line0 | EXTI_Line5 | EXTI_Line6; // clear pending
|
|
1aa4: 40078793 addi a5,a5,1024 # 40010400 <_eusrstack+0x2000fc00>
|
|
1aa8: 06100713 li a4,97
|
|
1aac: cbd8 sw a4,20(a5)
|
|
exti_wake = 1;
|
|
1aae: 4705 li a4,1
|
|
1ab0: c2e18aa3 sb a4,-971(gp) # 20000031 <exti_wake>
|
|
}
|
|
1ab4: 4712 lw a4,4(sp)
|
|
1ab6: 4782 lw a5,0(sp)
|
|
1ab8: 0121 addi sp,sp,8
|
|
1aba: 30200073 mret
|
|
|
|
00001abe <TIM2_IRQHandler>:
|
|
{
|
|
1abe: 1161 addi sp,sp,-8
|
|
1ac0: c23a sw a4,4(sp)
|
|
1ac2: c03e sw a5,0(sp)
|
|
TIM2->INTFR = (uint16_t)~TIM_FLAG_Update; // clear update flag
|
|
1ac4: 5779 li a4,-2
|
|
1ac6: 400007b7 lui a5,0x40000
|
|
1aca: 00e79823 sh a4,16(a5) # 40000010 <_eusrstack+0x1ffff810>
|
|
tick_wake = 1;
|
|
1ace: 4705 li a4,1
|
|
1ad0: c2e18a23 sb a4,-972(gp) # 20000030 <tick_wake>
|
|
}
|
|
1ad4: 4712 lw a4,4(sp)
|
|
1ad6: 4782 lw a5,0(sp)
|
|
1ad8: 0121 addi sp,sp,8
|
|
1ada: 30200073 mret
|
|
1ade: 0000 unimp
|
|
1ae0: 00006e4f .insn 4, 0x6e4f
|
|
1ae4: 0000 unimp
|
|
1ae6: 0000 unimp
|
|
1ae8: 0066664f .insn 4, 0x0066664f
|
|
1aec: 2a2a .insn 2, 0x2a2a
|
|
1aee: 4320 lw s0,64(a4)
|
|
1af0: 5552524f .insn 4, 0x5552524f
|
|
1af4: 5450 lw a2,44(s0)
|
|
1af6: 4445 li s0,17
|
|
1af8: 2a20 .insn 2, 0x2a20
|
|
1afa: 002a c.slli zero,0xa
|
|
1afc: 46474553 .insn 4, 0x46474553
|
|
1b00: 5541 li a0,-16
|
|
1b02: 544c lw a1,44(s0)
|
|
1b04: 2820 .insn 2, 0x2820
|
|
1b06: 3131 jal 1712 <main+0xa08>
|
|
1b08: 0029 c.nop 10
|
|
1b0a: 0000 unimp
|
|
1b0c: 7270 .insn 2, 0x7270
|
|
1b0e: 7365 lui t1,0xffff9
|
|
1b10: 6e612073 .insn 4, 0x6e612073
|
|
1b14: 2079 jal 1ba2 <TIM2_IRQHandler+0xe4>
|
|
1b16: 0079656b .insn 4, 0x0079656b
|
|
1b1a: 0000 unimp
|
|
1b1c: 207e .insn 2, 0x207e
|
|
1b1e: 2024 .insn 2, 0x2024
|
|
1b20: 6461 lui s0,0x18
|
|
1b22: 2074706f j 49528 <tama.c.7f472170+0x454eb>
|
|
1b26: 2d2d jal 2160 <pana_happy+0x50>
|
|
1b28: 6570 .insn 2, 0x6570
|
|
1b2a: 0074 addi a3,sp,12
|
|
1b2c: 203c .insn 2, 0x203c
|
|
1b2e: 0000 unimp
|
|
1b30: 3e20 .insn 2, 0x3e20
|
|
1b32: 0000 unimp
|
|
1b34: 2f4c .insn 2, 0x2f4c
|
|
1b36: 2052 .insn 2, 0x2052
|
|
1b38: 6970 .insn 2, 0x6970
|
|
1b3a: 20206b63 bltu zero,sp,1d50 <tmux_sleep+0x40>
|
|
1b3e: 67204b4f .insn 4, 0x67204b4f
|
|
1b42: 0021006f j 11b44 <tama.c.7f472170+0xdb07>
|
|
1b46: 0000 unimp
|
|
1b48: 007a c.slli zero,0x1e
|
|
1b4a: 0000 unimp
|
|
1b4c: 005a c.slli zero,0x16
|
|
1b4e: 0000 unimp
|
|
1b50: 3e3e .insn 2, 0x3e3e
|
|
1b52: 6520 .insn 2, 0x6520
|
|
1b54: 6f76 .insn 2, 0x6f76
|
|
1b56: 766c .insn 2, 0x766c
|
|
1b58: 6e69 lui t3,0x1a
|
|
1b5a: 205b0067 jr 517(s6)
|
|
1b5e: 0000 unimp
|
|
1b60: 5d20 lw s0,120(a0)
|
|
1b62: 0000 unimp
|
|
1b64: 2f7e .insn 2, 0x2f7e
|
|
1b66: 6570 .insn 2, 0x6570
|
|
1b68: 2074 .insn 2, 0x2074
|
|
1b6a: 2024 .insn 2, 0x2024
|
|
1b6c: 74617473 .insn 4, 0x74617473
|
|
1b70: 0000 unimp
|
|
1b72: 0000 unimp
|
|
1b74: 4f46 lw t5,80(sp)
|
|
1b76: 0000444f .insn 4, 0x444f
|
|
1b7a: 0000 unimp
|
|
1b7c: 4148 lw a0,4(a0)
|
|
1b7e: 5050 lw a2,36(s0)
|
|
1b80: 0059 c.nop 22
|
|
1b82: 0000 unimp
|
|
1b84: 4e45 li t3,17
|
|
1b86: 5245 li tp,-15
|
|
1b88: 00005947 .insn 4, 0x5947
|
|
1b8c: 41454c43 .insn 4, 0x41454c43
|
|
1b90: 004e c.slli zero,0x13
|
|
1b92: 0000 unimp
|
|
1b94: 4548 lw a0,12(a0)
|
|
1b96: 4c41 li s8,16
|
|
1b98: 4854 lw a3,20(s0)
|
|
1b9a: 0000 unimp
|
|
1b9c: 2020 .insn 2, 0x2020
|
|
1b9e: 7078 .insn 2, 0x7078
|
|
1ba0: 0020 addi s0,sp,8
|
|
1ba2: 0000 unimp
|
|
1ba4: 414d li sp,19
|
|
1ba6: 0058 addi a4,sp,4
|
|
1ba8: 202d jal 1bd2 <TIM2_IRQHandler+0x114>
|
|
1baa: 54544553 .insn 4, 0x54544553
|
|
1bae: 4e49 li t3,18
|
|
1bb0: 2d205347 .insn 4, 0x2d205347
|
|
1bb4: 0000 unimp
|
|
1bb6: 0000 unimp
|
|
1bb8: 65726353 .insn 4, 0x65726353
|
|
1bbc: 6e65 lui t3,0x19
|
|
1bbe: 6f20 .insn 2, 0x6f20
|
|
1bc0: 6666 .insn 2, 0x6666
|
|
1bc2: 003a c.slli zero,0xe
|
|
1bc4: 6e756f53 .insn 4, 0x6e756f53
|
|
1bc8: 3a64 .insn 2, 0x3a64
|
|
1bca: 0020 addi s0,sp,8
|
|
1bcc: 6142 .insn 2, 0x6142
|
|
1bce: 00006b63 bltu zero,zero,1be4 <TIM2_IRQHandler+0x126>
|
|
1bd2: 0000 unimp
|
|
1bd4: 2f4c .insn 2, 0x2f4c
|
|
1bd6: 2052 .insn 2, 0x2052
|
|
1bd8: 6f6d lui t5,0x1b
|
|
1bda: 6576 .insn 2, 0x6576
|
|
1bdc: 2020 .insn 2, 0x2020
|
|
1bde: 75204b4f .insn 4, 0x75204b4f
|
|
1be2: 00006573 .insn 4, 0x6573
|
|
1be6: 0000 unimp
|
|
1be8: 65726f63 bltu tp,s7,2246 <pana_idle+0x36>
|
|
1bec: 6420 .insn 2, 0x6420
|
|
1bee: 6d75 lui s10,0x1d
|
|
1bf0: 6570 .insn 2, 0x6570
|
|
1bf2: 2064 .insn 2, 0x2064
|
|
1bf4: 004c addi a1,sp,4
|
|
1bf6: 0000 unimp
|
|
1bf8: 203a4b4f .insn 4, 0x203a4b4f
|
|
1bfc: 6572 .insn 2, 0x6572
|
|
1bfe: 77617073 .insn 4, 0x77617073
|
|
1c02: 006e c.slli zero,0x1b
|
|
1c04: 6170 .insn 2, 0x6170
|
|
1c06: 616e .insn 2, 0x616e
|
|
1c08: 63746f67 .insn 4, 0x63746f67
|
|
1c0c: 6968 .insn 2, 0x6968
|
|
1c0e: 7620 .insn 2, 0x7620
|
|
1c10: 0032 c.slli zero,0xc
|
|
1c12: 0000 unimp
|
|
1c14: 6f62 .insn 2, 0x6f62
|
|
1c16: 6e69746f jal s0,992fc <tama.c.7f472170+0x952bf>
|
|
1c1a: 656b2067 .insn 4, 0x656b2067
|
|
1c1e: 6e72 .insn 2, 0x6e72
|
|
1c20: 6c65 lui s8,0x19
|
|
1c22: 2e2e .insn 2, 0x2e2e
|
|
1c24: 0000 unimp
|
|
1c26: 0000 unimp
|
|
1c28: 6f6d lui t5,0x1b
|
|
1c2a: 6e75 lui t3,0x1d
|
|
1c2c: 2074 .insn 2, 0x2074
|
|
1c2e: 7465702f .insn 4, 0x7465702f
|
|
1c32: 2020 .insn 2, 0x2020
|
|
1c34: 00006b6f jal s6,7c34 <tama.c.7f472170+0x3bf7>
|
|
1c38: 77617073 .insn 4, 0x77617073
|
|
1c3c: 206e .insn 2, 0x206e
|
|
1c3e: 6c656873 .insn 4, 0x6c656873
|
|
1c42: 206c .insn 2, 0x206c
|
|
1c44: 6f20 .insn 2, 0x6f20
|
|
1c46: 203e006b .insn 4, 0x203e006b
|
|
1c4a: 2f2e .insn 2, 0x2f2e
|
|
1c4c: 6174 .insn 2, 0x6174
|
|
1c4e: 616d addi sp,sp,240
|
|
1c50: 63746f67 .insn 4, 0x63746f67
|
|
1c54: 6968 .insn 2, 0x6968
|
|
1c56: 005f 6853 6c65 .insn 6, 0x6c656853005f
|
|
1c5c: 006c addi a1,sp,12
|
|
1c5e: 0000 unimp
|
|
1c60: 6150 .insn 2, 0x6150
|
|
1c62: 6b6e .insn 2, 0x6b6e
|
|
1c64: 0000006f j 1c64 <TIM2_IRQHandler+0x1a6>
|
|
1c68: 6d54 .insn 2, 0x6d54
|
|
1c6a: 7875 lui a6,0xffffd
|
|
1c6c: 0000 unimp
|
|
1c6e: 0000 unimp
|
|
1c70: 7270 .insn 2, 0x7270
|
|
1c72: 0000636f jal t1,7c72 <tama.c.7f472170+0x3c35>
|
|
1c76: 0000 unimp
|
|
1c78: 7375 lui t1,0xffffd
|
|
1c7a: 7265 lui tp,0xffff9
|
|
1c7c: 0000 unimp
|
|
1c7e: 0000 unimp
|
|
1c80: 6f72 .insn 2, 0x6f72
|
|
1c82: 0000746f jal s0,8c82 <tama.c.7f472170+0x4c45>
|
|
1c86: 0000 unimp
|
|
1c88: 75616c43 .insn 4, 0x75616c43
|
|
1c8c: 6564 .insn 2, 0x6564
|
|
1c8e: 0000 unimp
|
|
1c90: 74696c67 .insn 4, 0x74696c67
|
|
1c94: 00006863 bltu zero,zero,1ca4 <TIM2_IRQHandler+0x1e6>
|
|
1c98: 4546 lw a0,80(sp)
|
|
1c9a: 4445 li s0,17
|
|
1c9c: 0000 unimp
|
|
1c9e: 0000 unimp
|
|
1ca0: 4c50 lw a2,28(s0)
|
|
1ca2: 5941 li s2,-16
|
|
1ca4: 0000 unimp
|
|
1ca6: 0000 unimp
|
|
1ca8: 45454c53 .insn 4, 0x45454c53
|
|
1cac: 0050 addi a2,sp,4
|
|
1cae: 0000 unimp
|
|
1cb0: 4548 lw a0,12(a0)
|
|
1cb2: 4c41 li s8,16
|
|
1cb4: 0000 unimp
|
|
1cb6: 0000 unimp
|
|
1cb8: 54415453 .insn 4, 0x54415453
|
|
1cbc: 00000053 .insn 4, 0x0053
|
|
1cc0: 54544553 .insn 4, 0x54544553
|
|
1cc4: 4e49 li t3,18
|
|
1cc6: 00005347 .insn 4, 0x5347
|
|
1cca: 0000 unimp
|
|
1ccc: 7335 lui t1,0xfffed
|
|
1cce: 0000 unimp
|
|
1cd0: 3031 jal 14dc <main+0x7d2>
|
|
1cd2: 35310073 .insn 4, 0x35310073
|
|
1cd6: 30330073 .insn 4, 0x30330073
|
|
1cda: 30360073 .insn 4, 0x30360073
|
|
1cde: 10360073 .insn 4, 0x10360073
|
|
1ce2: 0000 unimp
|
|
1ce4: 115a slli sp,sp,0x36
|
|
1ce6: 0000 unimp
|
|
1ce8: 173e slli a4,a4,0x2f
|
|
1cea: 0000 unimp
|
|
1cec: 1a02 slli s4,s4,0x20
|
|
1cee: 0000 unimp
|
|
1cf0: 189e slli a7,a7,0x27
|
|
1cf2: 0000 unimp
|
|
1cf4: 11b8 addi a4,sp,232
|
|
1cf6: 0000 unimp
|
|
1cf8: 1220 addi s0,sp,296
|
|
1cfa: 0000 unimp
|
|
1cfc: 15da slli a1,a1,0x36
|
|
1cfe: 0000 unimp
|
|
1d00: 15fc addi a5,sp,748
|
|
1d02: 0000 unimp
|
|
1d04: 1642 slli a2,a2,0x30
|
|
1d06: 0000 unimp
|
|
1d08: 1684 addi s1,sp,864
|
|
1d0a: 0000 unimp
|
|
1d0c: 1694 addi a3,sp,864
|
|
...
|
|
|
|
00001d10 <tmux_sleep>:
|
|
...
|
|
1d1c: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?...
|
|
1d2c: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1d3c: ff3f fc7f ff3f fc7f 073c 1c70 ff3f fc7f ?...?...<.p.?...
|
|
1d4c: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1d5c: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1d6c: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'...
|
|
1d7c: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ...............
|
|
1d8c: 0000 0000 ....
|
|
|
|
00001d90 <tmux_sad>:
|
|
...
|
|
1d9c: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?...
|
|
1dac: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1dbc: bf3f fc7e 1f3f 7c7c 0f3e 3c78 1f3f 7c7c ?.~.?.||>.x<?.||
|
|
1dcc: bf3f fc7e ff3f fc7f ff3f fc7f ff3f fc7f ?.~.?...?...?...
|
|
1ddc: bf3f fc7e 073c 1c70 ff3f fc7f ff3f fc7f ?.~.<.p.?...?...
|
|
1dec: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'...
|
|
1dfc: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ...............
|
|
1e0c: 0000 0000 ....
|
|
|
|
00001e10 <tmux_happy>:
|
|
...
|
|
1e1c: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?...
|
|
1e2c: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1e3c: 5f3f 7c7d af3e bc7a ff3f fc7f ff3f fc7f ?_}|>.z.?...?...
|
|
1e4c: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1e5c: 033c 1c60 ff3f fc7f ff3f fc7f ff3f fc7f <.`.?...?...?...
|
|
1e6c: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'...
|
|
1e7c: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ...............
|
|
1e8c: 0000 0000 ....
|
|
|
|
00001e90 <tmux_idle>:
|
|
...
|
|
1e9c: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?...
|
|
1eac: ff3f fc7f ff3f fc7f ff3f fc7f bf3f fc7e ?...?...?...?.~.
|
|
1ebc: 1f3f 7c7c 0f3e 3c78 1f3f 7c7c bf3f fc7e ?.||>.x<?.||?.~.
|
|
1ecc: ff3f fc7f ff3f fc7f ff3f fc7f 073c 1c70 ?...?...?...<.p.
|
|
1edc: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?...
|
|
1eec: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'...
|
|
1efc: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ...............
|
|
1f0c: 0000 0000 ....
|
|
|
|
00001f10 <pana_dead>:
|
|
1f10: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
1f20: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
1f30: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
1f40: ff01 80ff ff03 c0ff ff03 c0ff db03 c0db ................
|
|
1f50: e703 c0e7 e703 c0e7 db03 c0db fd01 80df ................
|
|
1f60: fa01 80bf f700 007f 7f00 00fe ff01 c0ff ................
|
|
1f70: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
1f80: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00001f90 <pana_sleep>:
|
|
1f90: 0000 0080 1000 0088 1100 f088 3100 208c .............1.
|
|
1fa0: 3900 40dc 3b00 f0dc 7f00 00fe 7f00 00fe .9.@.;..........
|
|
1fb0: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
1fc0: ff01 80ff ff03 c0ff ff03 c0ff ff03 c0ff ................
|
|
1fd0: c303 c0c3 ff03 c0ff ff03 c0ff ff01 80ff ................
|
|
1fe0: fe01 807f ff00 00ff 7f00 00fe ff01 c0ff ................
|
|
1ff0: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2000: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002010 <pana_eat>:
|
|
2010: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
2020: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
2030: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
2040: ff01 80ff ff03 c0ff ff03 c0ff e703 c0e7 ................
|
|
2050: e703 c0e7 ff03 c0ff ff03 c0ff fc01 803f ..............?.
|
|
2060: fd01 803f fc00 00bf 7c00 003e ff01 c0ff ..?......|>.....
|
|
2070: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2080: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002090 <pana_sad>:
|
|
2090: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
20a0: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
20b0: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
20c0: ff01 80ff 9f03 c0f9 e703 c0e7 ff03 c0ff ................
|
|
20d0: e703 c0e7 e703 c0e7 ff03 c0ff ff01 80ff ................
|
|
20e0: ff01 80ff fc00 003f 7b00 00de f701 c0ef ......?..{......
|
|
20f0: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2100: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002110 <pana_happy>:
|
|
2110: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
2120: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
2130: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
2140: ff01 80ff ff03 c0ff ff03 c0ff ef03 c0f7 ................
|
|
2150: e703 c0eb db03 c0db ff03 c0ff ff01 80ff ................
|
|
2160: f701 80ef f700 00ef 7b00 00de fc01 c03f .........{....?.
|
|
2170: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2180: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002190 <pana_blink>:
|
|
2190: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
21a0: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
21b0: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
21c0: ff01 80ff ff03 c0ff ff03 c0ff ff03 c0ff ................
|
|
21d0: c303 c0c3 ff03 c0ff ff03 c0ff ff01 80ff ................
|
|
21e0: fc01 803f ff00 00ff 7f00 00fe ff01 c0ff ..?.............
|
|
21f0: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2200: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002210 <pana_idle>:
|
|
2210: 0000 0080 1000 0088 1100 0088 3100 008c .............1..
|
|
2220: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;..........
|
|
2230: f800 003f e700 00c7 df00 00fb bf01 80fd ..?.............
|
|
2240: ff01 80ff ff03 c0ff ff03 c0ff e703 c0e7 ................
|
|
2250: e703 c0e7 ff03 c0ff ff03 c0ff ff01 80ff ................
|
|
2260: fc01 803f ff00 00ff 7f00 00fe ff01 c0ff ..?.............
|
|
2270: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................
|
|
2280: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................
|
|
|
|
00002290 <shell_sleep>:
|
|
...
|
|
229c: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
22ac: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
22bc: ff0f f0ff 010f f080 ff0f f0ff ff0f f0ff ................
|
|
22cc: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
22dc: ff0f f0ff f80f f00f ff0f f0ff ff0f f0ff ................
|
|
22ec: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................
|
|
22fc: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................
|
|
230c: 7f00 00fe ....
|
|
|
|
00002310 <shell_sad>:
|
|
...
|
|
231c: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
232c: ff0f f0ff ff0f f0ff ff0f f0ff ef0f f0f7 ................
|
|
233c: c70f f0e3 830f f0c1 c70f f0e3 ef0f f0f7 ................
|
|
234c: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
235c: ff0f f0ff ff0f f0ff ff0f f0ff f80f f01f ................
|
|
236c: c70f f0e3 ff0f f0ff ff07 e0ff 0700 00e0 ................
|
|
237c: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................
|
|
238c: 7f00 00fe ....
|
|
|
|
00002390 <shell_happy>:
|
|
...
|
|
239c: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
23ac: ff0f f0ff ff0f f0ff ff0f f0ff df0f f0ef ................
|
|
23bc: af0f f0d7 ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
23cc: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
23dc: c70f f0e3 f80f f01f ff0f f0ff ff0f f0ff ................
|
|
23ec: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................
|
|
23fc: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................
|
|
240c: 7f00 00fe ....
|
|
|
|
00002410 <shell_idle>:
|
|
...
|
|
241c: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................
|
|
242c: ff0f f0ff ff0f f0ff ef0f f0f7 c70f f0e3 ................
|
|
243c: 830f f0c1 c70f f0e3 ef0f f0f7 ff0f f0ff ................
|
|
244c: ff0f f0ff ff0f f0ff ff0f f0ff 7f0f f0ff ................
|
|
245c: bf0f f0ff df0f f0ff bf0f f0ff 780f f00f .............x..
|
|
246c: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................
|
|
247c: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................
|
|
248c: 7f00 00fe ....
|
|
|
|
00002490 <icon_settings>:
|
|
2490: c003 c003 c003 f007 f80f fc1f 7fff 3ffe ...............?
|
|
24a0: 1ffc 3ffe 7c1f fc1f f80f f007 c003 c003 ...?.|..........
|
|
|
|
000024b0 <icon_stats>:
|
|
24b0: 0000 0000 0000 c000 c000 c000 c006 c006 ................
|
|
24c0: d806 d806 d836 d836 d836 d836 0000 0000 ....6.6.6.6.....
|
|
|
|
000024d0 <icon_heal>:
|
|
24d0: 0000 8000 f007 f80f 3c1c 3e3c 0e30 0e30 .........<<>0.0.
|
|
24e0: 0f70 0e30 3e3c 3e3c fc1f f80f f007 8000 p.0.<><>........
|
|
|
|
000024f0 <icon_clean>:
|
|
24f0: 0000 0000 8000 8000 c001 c001 f007 f80d ................
|
|
2500: f80d f808 fc1d f80d f80f f80f f007 8000 ................
|
|
|
|
00002510 <icon_sleep>:
|
|
2510: 0000 0000 0000 0004 000c 001c 0018 001c ................
|
|
2520: 003c 001c 001e 001f e80f f007 8000 0000 <...............
|
|
|
|
00002530 <icon_play>:
|
|
2530: 0000 0000 7007 0000 7c1f 7e3f 7e3f 7e3f .....p...|?~?~?~
|
|
2540: 0000 7e3f 7e3f 7e3f 7c1f 0000 7007 0000 ..?~?~?~.|...p..
|
|
|
|
00002550 <icon_feed>:
|
|
2550: 0000 0000 a000 9001 e00f f01b f83b f831 ............;.1.
|
|
2560: f83b fc7b f83f f83f f83f f01f e00f 0001 ;.{.?.?.?.......
|
|
|
|
00002570 <ssd1306_init_array>:
|
|
2570: d5ae a880 d33f 4000 148d 0020 c8a1 12da ....?..@.. .....
|
|
2580: 8f81 f1d9 40db a6a4 ffaf 0000 .....@......
|
|
|
|
0000258c <boot.0>:
|
|
258c: 1c04 0000 1c14 0000 1c28 0000 1c38 0000 ........(...8...
|
|
259c: 1c48 0000 H...
|
|
|
|
000025a0 <species_names>:
|
|
25a0: 1c58 0000 1c60 0000 1c68 0000 X...`...h...
|
|
|
|
000025ac <spr_glitch>:
|
|
...
|
|
25bc: 0000 0200 0000 0000 0000 0000 0000 0000 ................
|
|
25cc: 0080 0080 0f00 00f8 1500 0054 ff00 80ff ..........T.....
|
|
25dc: ff01 c0ff ff03 e0ff 1101 4144 d707 f0f5 ..........DA....
|
|
25ec: ef07 f0fb d707 f0f5 1105 5044 ff0f f8ff ..........DP....
|
|
25fc: ff07 f0ff ff07 f0ff 5505 5055 ea07 f0ab .........UUP....
|
|
260c: ff43 e0ff ff03 e0ff 5501 4055 ff00 80ff C........UU@....
|
|
261c: 3f00 00fe 0f00 04f8 0020 0000 0000 0000 .?...... .......
|
|
|
|
0000262c <spr_claude>:
|
|
...
|
|
2634: 0000 2000 0000 2000 0004 a800 000e 2000 ... ... .......
|
|
2644: 0004 fe03 0000 2000 0000 a880 0f00 20f8 ....... .......
|
|
2654: 3f00 20fe 7f00 00ff ff00 80ff ff01 c0ff .?. ............
|
|
2664: ff01 c0ff ff03 e0ff f703 e0f7 f703 e0f7 ................
|
|
2674: e303 e0e3 f707 f0f7 f703 e0f7 ff03 e0ff ................
|
|
2684: ff03 e0ff e703 e0f3 f801 c00f ff01 c0ff ................
|
|
2694: ff00 80ff 7f00 00ff 3f00 00fe 0f00 00f8 .........?......
|
|
26a4: 0000 0080 0000 0000 ........
|
|
|
|
000026ac <species_frames>:
|
|
26ac: 2410 0000 2410 0000 2390 0000 2310 0000 .$...$...#...#..
|
|
26bc: 2390 0000 2290 0000 2310 0000 2210 0000 .#..."...#..."..
|
|
26cc: 2190 0000 2110 0000 2090 0000 2010 0000 .!...!... ... ..
|
|
26dc: 1f90 0000 1f10 0000 1e90 0000 1e90 0000 ................
|
|
26ec: 1e10 0000 1d90 0000 1e10 0000 1d10 0000 ................
|
|
26fc: 1d90 0000 ....
|
|
|
|
00002700 <menu_icons>:
|
|
2700: 2550 0000 2530 0000 2510 0000 24f0 0000 P%..0%...%...$..
|
|
2710: 24d0 0000 24b0 0000 2490 0000 .$...$...$..
|
|
|
|
0000271c <form_names>:
|
|
271c: 1c70 0000 1c78 0000 1c80 0000 1c88 0000 p...x...........
|
|
272c: 1c90 0000 ....
|
|
|
|
00002730 <menu_labels>:
|
|
2730: 1c98 0000 1ca0 0000 1ca8 0000 1b8c 0000 ................
|
|
2740: 1cb0 0000 1cb8 0000 1cc0 0000 ............
|
|
|
|
0000274c <screen_timeout_names>:
|
|
274c: 1ccc 0000 1cd0 0000 1cd4 0000 1cd8 0000 ................
|
|
275c: 1cdc 0000 1ae8 0000 ........
|
|
|
|
00002764 <spr_grave>:
|
|
...
|
|
276c: ff00 00fc ff03 00ff ff07 80ff 1f06 80e1 ................
|
|
277c: 3006 8031 3006 8031 3f06 00c3 3306 0003 .01..01..?...3..
|
|
278c: 3106 0083 3006 00c3 0006 0006 0f06 0006 .1...0..........
|
|
279c: ff07 80ff ff0f c0ff ff1f e0ff ff3f f0ff ............?...
|
|
27ac: ff7f f8ff ffff fcff ffff fcff f000 00f0 ................
|
|
27bc: ff03 00f0 ff0f 00fc 0000 0000 0000 0000 ................
|
|
...
|
|
|
|
000027e4 <screen_timeout_opts>:
|
|
27e4: 0053 00a7 00fa 01f4 03e8 0000 S...........
|
|
|
|
000027f0 <fontdata>:
|
|
...
|
|
27f8: 817e 81a5 99bd 7e81 ff7e ffdb e7c3 7eff ~......~~......~
|
|
2808: fe6c fefe 387c 0010 3810 fe7c 387c 0010 l...|8...8|.|8..
|
|
2818: 7c38 fe38 d6fe 3810 3810 fe7c 7cfe 3810 8|8....8.8|..|.8
|
|
2828: 0000 3c18 183c 0000 ffff c3e7 e7c3 ffff ...<<...........
|
|
2838: 3c00 4266 6642 003c c3ff bd99 99bd ffc3 .<fBBf<.........
|
|
2848: 070f 7d0f cccc 78cc 663c 6666 183c 187e ...}...x<fff<.~.
|
|
2858: 333f 303f 7030 e0f0 637f 637f 6763 c0e6 ?3?00p...c.ccg..
|
|
2868: db18 e73c 3ce7 18db e080 fef8 e0f8 0080 ..<..<..........
|
|
2878: 0e02 fe3e 0e3e 0002 3c18 187e 7e18 183c ..>.>....<~..~<.
|
|
2888: 6666 6666 0066 0066 db7f 7bdb 1b1b 001b fffff.f....{....
|
|
2898: 613e 663c 3c66 7c86 0000 0000 7e7e 007e >a<ff<.|....~~~.
|
|
28a8: 3c18 187e 3c7e ff18 3c18 187e 1818 0018 .<~.~<...<~.....
|
|
28b8: 1818 1818 3c7e 0018 1800 fe0c 180c 0000 ....~<..........
|
|
28c8: 3000 fe60 3060 0000 0000 c0c0 fec0 0000 .0`.`0..........
|
|
28d8: 2400 ff66 2466 0000 1800 7e3c ffff 0000 .$f.f$....<~....
|
|
28e8: ff00 7eff 183c 0000 0000 0000 0000 0000 ...~<...........
|
|
28f8: 3c18 183c 0018 0018 6666 0024 0000 0000 .<<.....ff$.....
|
|
2908: 6c6c 6cfe 6cfe 006c 3e18 3c60 7c06 0018 ll.l.ll..>`<.|..
|
|
2918: c600 18cc 6630 00c6 6c38 7638 ccdc 0076 ....0f..8l8v..v.
|
|
2928: 1818 0030 0000 0000 180c 3030 1830 000c ..0.......000...
|
|
2938: 1830 0c0c 180c 0030 6600 ff3c 663c 0000 0.....0..f<.<f..
|
|
2948: 1800 7e18 1818 0000 0000 0000 1800 3018 ...~...........0
|
|
2958: 0000 7e00 0000 0000 0000 0000 1800 0018 ...~............
|
|
2968: 0c06 3018 c060 0080 6c38 d6c6 6cc6 0038 ...0`...8l...l8.
|
|
2978: 3818 1818 1818 007e c67c 1c06 6630 00fe .8....~.|...0f..
|
|
2988: c67c 3c06 c606 007c 3c1c cc6c 0cfe 001e |..<..|..<l.....
|
|
2998: c0fe fcc0 c606 007c 6038 fcc0 c6c6 007c ......|.8`....|.
|
|
29a8: c6fe 180c 3030 0030 c67c 7cc6 c6c6 007c ....000.|..|..|.
|
|
29b8: c67c 7ec6 0c06 0078 1800 0018 1800 0018 |..~..x.........
|
|
29c8: 1800 0018 1800 3018 0c06 3018 0c18 0006 .......0...0....
|
|
29d8: 0000 007e 7e00 0000 3060 0c18 3018 0060 ..~..~..`0...0`.
|
|
29e8: c67c 180c 0018 0018 c67c dede c0de 0078 |.......|.....x.
|
|
29f8: 6c38 fec6 c6c6 00c6 66fc 7c66 6666 00fc 8l.......ff|ff..
|
|
2a08: 663c c0c0 66c0 003c 6cf8 6666 6c66 00f8 <f...f<..lfffl..
|
|
2a18: 62fe 7868 6268 00fe 62fe 7868 6068 00f0 .bhxhb...bhxh`..
|
|
2a28: 663c c0c0 66ce 003a c6c6 fec6 c6c6 00c6 <f...f:.........
|
|
2a38: 183c 1818 1818 003c 0c1e 0c0c cccc 0078 <.....<.......x.
|
|
2a48: 66e6 786c 666c 00e6 60f0 6060 6662 00fe .flxlf...```bf..
|
|
2a58: eec6 fefe c6d6 00c6 e6c6 def6 c6ce 00c6 ................
|
|
2a68: c67c c6c6 c6c6 007c 66fc 7c66 6060 00f0 |.....|..ff|``..
|
|
2a78: c67c c6c6 cec6 0e7c 66fc 7c66 666c 00e6 |.....|..ff|lf..
|
|
2a88: 663c 1830 660c 003c 7e7e 185a 1818 003c <f0..f<.~~Z...<.
|
|
2a98: c6c6 c6c6 c6c6 007c c6c6 c6c6 6cc6 0038 ......|......l8.
|
|
2aa8: c6c6 d6c6 fed6 006c c6c6 386c c66c 00c6 ......l...l8l...
|
|
2ab8: 6666 3c66 1818 003c c6fe 188c 6632 00fe fff<..<.....2f..
|
|
2ac8: 303c 3030 3030 003c 60c0 1830 060c 0002 <00000<..`0.....
|
|
2ad8: 0c3c 0c0c 0c0c 003c 3810 c66c 0000 0000 <.....<..8l.....
|
|
2ae8: 0000 0000 0000 ff00 1830 000c 0000 0000 ........0.......
|
|
2af8: 0000 0c78 cc7c 0076 60e0 667c 6666 00dc ..x.|.v..`|fff..
|
|
2b08: 0000 c67c c6c0 007c 0c1c cc7c cccc 0076 ..|...|...|...v.
|
|
2b18: 0000 c67c c0fe 007c 663c f860 6060 00f0 ..|...|.<f`.``..
|
|
2b28: 0000 cc76 7ccc f80c 60e0 766c 6666 00e6 ..v..|...`lvff..
|
|
2b38: 0018 1838 1818 003c 0006 0606 6606 3c66 ..8...<......ff<
|
|
2b48: 60e0 6c66 6c78 00e6 1838 1818 1818 003c .`flxl..8.....<.
|
|
2b58: 0000 feec d6d6 00d6 0000 66dc 6666 0066 ...........ffff.
|
|
2b68: 0000 c67c c6c6 007c 0000 66dc 7c66 f060 ..|...|....ff|`.
|
|
2b78: 0000 cc76 7ccc 1e0c 0000 76dc 6060 00f0 ..v..|.....v``..
|
|
2b88: 0000 c07e 067c 00fc 3030 30fc 3630 001c ..~.|...00.006..
|
|
2b98: 0000 cccc cccc 0076 0000 c6c6 6cc6 0038 ......v......l8.
|
|
2ba8: 0000 d6c6 fed6 006c 0000 6cc6 6c38 00c6 ......l....l8l..
|
|
2bb8: 0000 c6c6 7ec6 fc06 0000 4c7e 3218 007e .....~....~L.2~.
|
|
2bc8: 180e 7018 1818 000e 1818 1818 1818 0018 ...p............
|
|
2bd8: 1870 0e18 1818 0070 dc76 0000 0000 0000 p.....p.v.......
|
|
2be8: 1000 6c38 c6c6 00fe c67c c0c0 7cc6 780c ..8l....|....|.x
|
|
2bf8: 00cc cccc cccc 0076 180c c67c c0fe 007c ......v...|...|.
|
|
2c08: 827c 0c78 cc7c 0076 00c6 0c78 cc7c 0076 |.x.|.v...x.|.v.
|
|
2c18: 1830 0c78 cc7c 0076 3030 0c78 cc7c 0076 0.x.|.v.00x.|.v.
|
|
2c28: 0000 c07e 7ec0 380c 827c c67c c0fe 007c ..~..~.8|.|...|.
|
|
2c38: 00c6 c67c c0fe 007c 1830 c67c c0fe 007c ..|...|.0.|...|.
|
|
2c48: 0066 1838 1818 003c 827c 1838 1818 003c f.8...<.|.8...<.
|
|
2c58: 1830 3800 1818 003c 38c6 c66c c6fe 00c6 0..8..<..8l.....
|
|
2c68: 6c38 c67c c6fe 00c6 3018 c0fe c0f8 00fe 8l|......0......
|
|
2c78: 0000 187e d87e 007e 6c3e fecc cccc 00ce ..~.~.~.>l......
|
|
2c88: 827c c67c c6c6 007c 00c6 c67c c6c6 007c |.|...|...|...|.
|
|
2c98: 1830 c67c c6c6 007c 8478 cc00 cccc 0076 0.|...|.x.....v.
|
|
2ca8: 3060 cccc cccc 0076 00c6 c6c6 7ec6 fc06 `0....v......~..
|
|
2cb8: 38c6 c66c 6cc6 0038 00c6 c6c6 c6c6 007c .8l..l8.......|.
|
|
2cc8: 1818 c07e 7ec0 1818 6c38 f064 6660 00fc ..~..~..8ld.`f..
|
|
2cd8: 6666 7e3c 7e18 1818 ccf8 facc cfc6 c7c6 ff<~.~..........
|
|
2ce8: 1b0e 3c18 d818 0070 3018 0c78 cc7c 0076 ...<..p..0x.|.v.
|
|
2cf8: 180c 3800 1818 003c 180c c67c c6c6 007c ...8..<...|...|.
|
|
2d08: 3018 cccc cccc 0076 dc76 dc00 6666 0066 .0....v.v...fff.
|
|
2d18: dc76 e600 def6 00ce 6c3c 3e6c 7e00 0000 v.......<ll>.~..
|
|
2d28: 6c38 386c 7c00 0000 0018 1818 6330 003e 8ll8.|......0c>.
|
|
2d38: 0000 fe00 c0c0 0000 0000 fe00 0606 0000 ................
|
|
2d48: e663 7e6c 6633 0fcc e663 7a6c 6a36 06df c.l~3f..c.lz6j..
|
|
2d58: 0018 1818 3c3c 0018 3300 cc66 3366 0000 ....<<...3f.f3..
|
|
2d68: cc00 3366 cc66 0000 8822 8822 8822 8822 ..f3f...".".".".
|
|
2d78: aa55 aa55 aa55 aa55 dd77 dd77 dd77 dd77 U.U.U.U.w.w.w.w.
|
|
2d88: 1818 1818 1818 1818 1818 1818 18f8 1818 ................
|
|
2d98: 1818 18f8 18f8 1818 3636 3636 36f6 3636 ........6666.666
|
|
2da8: 0000 0000 36fe 3636 0000 18f8 18f8 1818 .....666........
|
|
2db8: 3636 06f6 36f6 3636 3636 3636 3636 3636 66...66666666666
|
|
2dc8: 0000 06fe 36f6 3636 3636 06f6 00fe 0000 .....66666......
|
|
2dd8: 3636 3636 00fe 0000 1818 18f8 00f8 0000 6666............
|
|
2de8: 0000 0000 18f8 1818 1818 1818 001f 0000 ................
|
|
2df8: 1818 1818 00ff 0000 0000 0000 18ff 1818 ................
|
|
2e08: 1818 1818 181f 1818 0000 0000 00ff 0000 ................
|
|
2e18: 1818 1818 18ff 1818 1818 181f 181f 1818 ................
|
|
2e28: 3636 3636 3637 3636 3636 3037 003f 0000 666676666670?...
|
|
2e38: 0000 303f 3637 3636 3636 00f7 00ff 0000 ..?0766666......
|
|
2e48: 0000 00ff 36f7 3636 3636 3037 3637 3636 .....66666707666
|
|
2e58: 0000 00ff 00ff 0000 3636 00f7 36f7 3636 ........66...666
|
|
2e68: 1818 00ff 00ff 0000 3636 3636 00ff 0000 ........6666....
|
|
2e78: 0000 00ff 18ff 1818 0000 0000 36ff 3636 .............666
|
|
2e88: 3636 3636 003f 0000 1818 181f 001f 0000 6666?...........
|
|
2e98: 0000 181f 181f 1818 0000 0000 363f 3636 ............?666
|
|
2ea8: 3636 3636 36ff 3636 1818 18ff 18ff 1818 6666.666........
|
|
2eb8: 1818 1818 00f8 0000 0000 0000 181f 1818 ................
|
|
2ec8: ffff ffff ffff ffff 0000 0000 ffff ffff ................
|
|
2ed8: f0f0 f0f0 f0f0 f0f0 0f0f 0f0f 0f0f 0f0f ................
|
|
2ee8: ffff ffff 0000 0000 0000 dc76 dcc8 0076 ..........v...v.
|
|
2ef8: cc78 d8cc c6cc 00cc c6fe c0c0 c0c0 00c0 x...............
|
|
2f08: 0000 6cfe 6c6c 006c c6fe 3060 c660 00fe ...llll...`0`...
|
|
2f18: 0000 d87e d8d8 0070 0000 6666 6666 c07c ..~...p...ffff|.
|
|
2f28: 7600 18dc 1818 0018 187e 663c 3c66 7e18 .v......~.<ff<.~
|
|
2f38: 6c38 fec6 6cc6 0038 6c38 c6c6 6c6c 00ee 8l...l8.8l..ll..
|
|
2f48: 180e 3e0c 6666 003c 0000 db7e 7edb 0000 ...>ff<...~..~..
|
|
2f58: 0c06 db7e 7edb c060 301e 7e60 3060 001e ..~..~`..0`~`0..
|
|
2f68: 7c00 c6c6 c6c6 00c6 fe00 fe00 fe00 0000 .|..............
|
|
2f78: 1818 187e 0018 007e 1830 180c 0030 007e ..~...~.0...0.~.
|
|
2f88: 180c 1830 000c 007e 1b0e 181b 1818 1818 ..0...~.........
|
|
2f98: 1818 1818 d818 70d8 1800 7e00 1800 0000 .......p...~....
|
|
2fa8: 7600 00dc dc76 0000 6c38 386c 0000 0000 .v..v...8ll8....
|
|
2fb8: 0000 1800 0018 0000 0000 1800 0000 0000 ................
|
|
2fc8: 0c0f 0c0c 6cec 1c3c 366c 3636 0036 0000 .....l<.l6666...
|
|
2fd8: 0c78 3018 007c 0000 0000 3c3c 3c3c 0000 x..0|.....<<<<..
|
|
...
|