diff --git a/tama.bin b/tama.bin index ec39e8d..6d54b53 100755 Binary files a/tama.bin and b/tama.bin differ diff --git a/tama.c b/tama.c index 510d8e8..714202e 100644 --- a/tama.c +++ b/tama.c @@ -37,6 +37,7 @@ #define FRAME_MS 60 // main loop period #define TICK_FRAMES 250 // stat update every ~15 s (250 * 60 ms) #define ANIM_FRAMES 12 // how long an action reaction is shown +#define TICK_MS (TICK_FRAMES * FRAME_MS) // 15000 ms: also the screen-off check period // With the values below an untended pet survives roughly half an hour: // a need empties in ~20 min, after which health bleeds down over ~10 more. @@ -87,14 +88,16 @@ static uint8_t evo_anim; // frames remaining for an evolution banner // settings static uint8_t sound_on = 1; -static uint8_t timeout_idx = 1; // index into screen_timeout_opts (default 30 s) +static uint8_t timeout_idx = 1; // index into screen_timeout_opts (default 10 s) static uint8_t set_sel = 0; // highlighted row on the settings screen static uint8_t sel_species = 0; // highlighted species on the welcome screen -// screen-off-on-inactivity options, in frames (0 = never sleep the display) -static const uint16_t screen_timeout_opts[] = { 250, 500, 1000, 0 }; -static const char *const screen_timeout_names[] = { "15s", "30s", "60s", "Off" }; -#define TIMEOUT_OPT_COUNT 4 +// screen-off-on-inactivity options, in frames (0 = never sleep the display). +// Shorter timeouts blank the OLED sooner, which is the single biggest power +// win on a CR2032 — the panel draws far more than the dozing MCU. +static const uint16_t screen_timeout_opts[] = { 83, 167, 250, 500, 1000, 0 }; +static const char *const screen_timeout_names[] = { "5s", "10s", "15s", "30s", "60s", "Off" }; +#define TIMEOUT_OPT_COUNT 6 #define SETTINGS_ROWS 3 // screen-off, sound, back // display power state @@ -571,6 +574,88 @@ static Buttons read_buttons(void) return b; } +// ----------------------------------------------------------------- low power +// Two wake sources let the core idle in WFI light-sleep while the OLED is off: +// * a button press (EXTI falling edge) -> light the screen back up +// * a periodic TIM2 overflow (~once per game tick) -> run a quick check +// WFI only gates the CPU clock, so SRAM/registers (and the whole Pet) survive +// untouched; full standby would wipe them and force a reboot/splash on wake. +static volatile uint8_t exti_wake; // a button interrupt fired +static volatile uint8_t tick_wake; // the periodic check timer fired + +// OK=PC0->EXTI0, Right=PD5->EXTI5, Left=PD6->EXTI6 all share this vector. +void EXTI7_0_IRQHandler(void) INTERRUPT_DECORATOR; +void EXTI7_0_IRQHandler(void) +{ + EXTI->INTFR = EXTI_Line0 | EXTI_Line5 | EXTI_Line6; // clear pending + exti_wake = 1; +} + +void TIM2_IRQHandler(void) INTERRUPT_DECORATOR; +void TIM2_IRQHandler(void) +{ + TIM2->INTFR = (uint16_t)~TIM_FLAG_Update; // clear update flag + tick_wake = 1; +} + +static void lowpower_setup(void) +{ + // --- button wake: falling-edge EXTI on the three button pins --- + // (AFIO + GPIO clocks were already enabled by funGpioInitAll.) + AFIO->EXTICR |= AFIO_EXTICR_EXTI0_PC | // OK on PC0 + AFIO_EXTICR_EXTI5_PD | // Right on PD5 + AFIO_EXTICR_EXTI6_PD; // Left on PD6 + EXTI->INTENR |= EXTI_Line0 | EXTI_Line5 | EXTI_Line6; + EXTI->FTENR |= EXTI_Line0 | EXTI_Line5 | EXTI_Line6; // press == falling edge + NVIC_EnableIRQ(EXTI7_0_IRQn); + + // --- periodic wake: TIM2 update IRQ, one overflow per game tick --- + RCC->APB1PCENR |= RCC_APB1Periph_TIM2; + TIM2->PSC = 23999; // 24 MHz / 24000 = 1 kHz (1 ms/count) + TIM2->ATRLR = TICK_MS - 1; // overflow once per game tick + TIM2->SWEVGR = TIM_PSCReloadMode_Immediate; // latch PSC/ARR now + TIM2->INTFR = (uint16_t)~TIM_FLAG_Update; + TIM2->DMAINTENR |= TIM_UIE; // enable update interrupt + NVIC_EnableIRQ(TIM2_IRQn); + // the counter itself stays disabled until we actually enter low-power sleep +} + +// Doze in WFI until a button or the periodic timer wakes us. Returns only once +// the display has been switched back on (button press, or the pet dying while +// we slept); otherwise it keeps running background ticks and sleeping again. +static void enter_low_power(void) +{ + for (;;) { + exti_wake = 0; + tick_wake = 0; + TIM2->CNT = 0; + TIM2->INTFR = (uint16_t)~TIM_FLAG_Update; + TIM2->CTLR1 |= TIM_CEN; // arm the periodic wake + __WFI(); // core clock gated until an IRQ + TIM2->CTLR1 &= ~TIM_CEN; // halt it while we're awake + + if (exti_wake) { // a button: bring the screen back + ssd1306_cmd(SSD1306_DISPLAYON); + disp_on = 1; + idle_frames = 0; + tick_acc = 0; + return; + } + + // otherwise it was the periodic check: advance the pet a tick. This + // still chirps low-need reminders (and the death tune) over the buzzer. + if (pet.alive) { + game_tick(); + if (!pet.alive) { // it died in its sleep: show the grave + ssd1306_cmd(SSD1306_DISPLAYON); + disp_on = 1; + idle_frames = 0; + return; + } + } + } +} + // ----------------------------------------------------------------- setup static void gpio_setup(void) { @@ -625,6 +710,7 @@ int main(void) { SystemInit(); gpio_setup(); + lowpower_setup(); // button-wake EXTI + periodic-check timer Delay_Ms(120); // let the OLED rail settle if (ssd1306_i2c_init()) { // non-zero == failure @@ -639,6 +725,16 @@ int main(void) Buttons prev = {0, 0, 0}; while (1) { + if (!disp_on) { + // 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(); + continue; + } + Buttons b = read_buttons(); uint8_t ok_edge = b.ok && !prev.ok; uint8_t left_edge = b.left && !prev.left; @@ -648,13 +744,7 @@ int main(void) if (any_edge) idle_frames = 0; - if (!disp_on) { - // screen is asleep: the first press only wakes it (not an action) - if (any_edge) { - ssd1306_cmd(SSD1306_DISPLAYON); - disp_on = 1; - } - } else { + { switch (screen) { case SCR_SELECT: if (left_edge) { diff --git a/tama.elf b/tama.elf index 04bb52f..522060c 100755 Binary files a/tama.elf and b/tama.elf differ diff --git a/tama.hex b/tama.hex index 473d3ed..dd4fef6 100644 --- a/tama.hex +++ b/tama.hex @@ -1,13 +1,13 @@ -:100000006F00D01600000000E0090000DE090000CB +:100000006F00F03A00000000220C0000200C0000FD :1000100000000000000000000000000000000000E0 :1000200000000000000000000000000000000000D0 -:10003000DE09000000000000DE09000000000000F2 -:10004000DE090000DE090000DE090000DE09000014 -:10005000DE090000DE090000DE090000DE09000004 -:10006000DE090000DE090000DE090000DE090000F4 -:10007000DE090000DE090000DE090000DE090000E4 -:10008000DE090000DE090000DE090000DE090000D4 -:10009000DE090000DE090000DE09000000000000AB +:10003000200C000000000000200C00000000000068 +:10004000200C0000200C0000200C0000200C000000 +:100050009A1A0000200C0000200C0000200C000068 +:10006000200C0000200C0000200C0000200C0000E0 +:10007000200C0000200C0000200C0000200C0000D0 +:10008000200C0000200C0000200C0000200C0000C0 +:10009000200C0000200C0000BE1A00000000000030 :1000A000634E050263C305042E86AA857D5515C2DD :1000B00085466378B6006356C00006068606E36C84 :1000C000B6FE014563E4C500918D558D858205829C @@ -23,7 +23,7 @@ :10016000E74071770507239EE74003D707401367F1 :1001700017002390E74003D70740136707402390F9 :10018000E74082809307F00763E7A7029307F00335 -:1001900063E3B70293D735009E07AA97138581C6FC +:1001900063E3B70293D735009E07AA971385C1C5BD :1001A0003E959D89054783470500B315B70009C6ED :1001B000CD8F2300F500828093C5F5FFED8FD5BF6D :1001C0000111328322CC26CA06CEAA843A86AE9684 @@ -33,7 +33,7 @@ :1002000022474243B246124682453A85D9B7F24068 :100210006244D244056182801301C1FD22CE26CC06 :1002200006D02A84AE82B28483C304008504638529 -:1002300003060147939733000966BA9713060667CA +:1002300003060147939733000966BA971306067FB2 :10024000B29703C30700814793158301E185368682 :1002500063C4050013C61600B385E2003305F4003D :1002600036CA1AC81EC63AC416C23EC0213F42430F @@ -57,7 +57,7 @@ :10038000510182808280611122C03714014006C26F :1003900013040480894737C502001CC8130505F201 :1003A000BD3BB707020092401CC802442101828075 -:1003B000138741C50347070171C3938741C583D69E +:1003B000138781C40347070171C3938781C483D620 :1003C00087003D671307F7A56366D7023695420598 :1003D00041812394A7009306C002054763FDA60050 :1003E00093067007094763F8A6009306F00E0D47C1 @@ -66,682 +66,706 @@ :10041000AE866302C70205468146630EC70003C766 :10042000D70031EB838647001307B0036341D7043D :10043000A386B70091462386D70079479305C0036A -:10044000130500312388E1C4F9359305C003130572 +:10044000130500312382E1C4F9359305C003130578 :10045000C03DD1359305C003130570496D3D93052B :10046000C00813050062453D8240110129BFA386E3 :10047000C7008D46C9B7E31FC7FAE5BF82804111A7 -:1004800022C406C626C24D47AA871384C1C463444A +:1004800022C406C626C24D47AA87138401C463440A :10049000B7042A940347040015EB2AC09305C00350 :1004A000130500628D3D9305C00313057049A53502 -:1004B0009305A00513050037B93D8247138781C412 +:1004B0009305A00513050037B93D82471387C1C3D3 :1004C0008546BA972300D4002380D700B240224447 -:1004D000924441018280938481C413071003AA943B +:1004D0009244410182809384C1C313071003AA94FC :1004E0006343B70203C7040019EB2AC09305200336 :1004F000130500620D35824705472380E4003E94D2 -:1005000023000400E1B723800400D5BF2E860147F5 -:10051000B307E60083C7070081EFC147998F8A07B9 -:1005200013C7F7FF7D87AA85854633F5E700EDB150 -:100530000507F9BFB71701408847938707409847D9 -:100540009C471345F5FF19831347F7FF958393C71E -:10055000F7FF058B05892207858B7111C207598D1D -:100560005D8D11018280B28731111387F7FF3686C6 -:1005700006C822C626C42A979306F00763F5E6004C -:1005800093070008898F3304F50063178500C24084 -:100590003244A244510182809304150032C22EC01D -:1005A000D536124682452685CDB7130181FD3383AA -:1005B000B64022D036849356F34133C36600B3026B -:1005C000A6403303D34093D6F241B3C2560026CEA1 -:1005D00006D2B382D240AE84B28763C76200A286DD -:1005E000AA843284B6872E8563489400BE86AA8783 -:1005F0003685A2862684B684B303F54093D6F341AC -:1006000033878440B3C37600B383D3409356F70156 -:10061000BA963AC27D573AC0858663D4A70005478B -:100620003AC063D8840092500254F244130181020C -:10063000828036CC1ECA16C81AC6014663D562022D -:100640003E85A2853EC43D3EA2473243C242D243CC -:10065000E246B386764063D606000247BA97124751 -:10066000BA9605047DBFBE8522853EC4213EE24682 -:10067000D243C2423243A247E9BF9307F00763CF98 -:10068000A702411122C406C626C2B387C5001307BC -:1006900000042E846354F7003306B740B304860089 -:1006A00063179400B2402244924441018280A285A3 -:1006B00005462AC0C13C02450504DDB782803111E0 -:1006C00026C4B284368606C836C222C62EC02A8404 -:1006D0006D37124682451385F4FF2295793F824596 -:1006E000854626862285413582479385F7FF9247C6 -:1006F000BE959307F00363EAB70022853244C240F7 -:100700002686A24485465101B9BDC2403244A24466 -:1007100051018280511122C226C02A84B2848546AA -:100720002E86AA85014506C4C53C130500039D46D7 -:100730001306C004A28561371395340026950A0577 -:10074000269506059307300663D2A7029305400657 -:10075000813A0547B305E4001244A240824413766F -:10076000F50F954613051003310199BCA2401244C0 -:10077000824431018280130181FDB387E50022D2DA -:1007800026D02AC832CA13D436003EC68143930706 -:10079000F00363EDB70893F775000547B317F7004B -:1007A0003EC0D24781469E973ECC93D735009E07E8 -:1007B0003ECEE247939236000147B69783C70700C3 -:1007C0003EC2C247BE92F247B3845700B387E200ED -:1007D0001306F0076364F604124593070008B3D7C5 -:1007E000E740E98F3386E400138581C632950343E1 -:1007F00001003EC4834705001346F3FF05077D8EC5 -:10080000A247B337F000B307F0403373F300336609 -:1008100066002300C500A147E31AF7FA8506E31A2C -:10082000D4F8B2478505A293E393B7F612548254E5 -:100830001301810282806167B75700401307076A7E -:10084000938707407D5683D68701898AF9C27D1731 -:10085000E31BC7FE711106C0EFF09F8D8240054576 -:1008600011018280E1679387176A8356470193F6E7 -:10087000060881E6FD17F5FBF1BF83470500050576 -:100880002318F700E310B5FEE1663757004037063E -:1008900007009386066A1307074013064608FD55AE -:1008A0000355470183578701C207C98FF18F6386BC -:1008B000C700FD16E396B6FE71BF835707000145DA -:1008C00093E707202310F700828037570040AA954E -:1008D0001307074045BF930780072318F700616699 -:1008E000B7560040370707001306066A938606408E -:1008F000130727087D5383D2460183D78601C20799 -:10090000B3E75700F98FE382E7FC7D16E31566FE37 -:1009100091B703D70700E166370603001367071096 -:100920002390E700375700409386066A1307074075 -:1009300005067D538352470183578701C207B3E7FA -:100940005700F18FE389C7F8FD16E39566FE19B7E6 -:10095000130181FDA300A10089450A8506D2230069 -:100960000100D13D92501301810282809701002045 -:10097000938101A91381414009651305058873100E -:10098000053097F6FFFF9386E66793E6360073908F -:100990005630138501C39385810601466356B50021 -:1009A00010C11105E34EB5FE172500001305854C57 -:1009B000938541C0138601C36388C500144194C167 -:1009C00011059105E39AC5FEB7F700E0054798C306 -:1009D0008567938787AC739017347300203001A02C -:1009E000371702401C47B7068000D58F1CC72A96D0 -:1009F000AA876393C70082802380B7008507D5BF8D -:100A0000130600408145138581C6D5B7814763131E -:100A1000F60082803387F500834607003307F50030 -:100A200085072300D700E5B779711305100206D6B4 -:100A300022D426D2313F0145213F1305F007093F5B -:100A4000130520023137014521371D45138481C626 -:100A500001379304044093070004A28513060002A3 -:100A6000130511002300F1005537930510020A8584 -:100A700013040402C933E31094FEB250225492547A -:100A800045618280B7270240054798C3B7170240E7 -:100A90003707080123A207001307170898C3370771 -:100AA0009F0098C7984393166700E3DD06FED8437E -:100AB000B7160240719B13672700D8C32147DC4259 -:100AC000B18BE39EE7FE8280130141F886DCA2DA57 -:100AD000A6D84D3FB71402409C4C37140140FD7618 -:100AE00093E757039CCC9307048098439386F60FB3 -:100AF000370600F11377F7F01367070198C337073C -:100B0000020098CB9307044098437D1637050B00ED -:100B1000758F1367071098C33707040098CB1840E8 -:100B2000130505C8419B1367870018C09843718F50 -:100B300037060008518F98C39843370610FF7D167B -:100B4000718F37068000518F98C3054718C8130767 -:100B5000000498CB1307000298CBEFF04FDCDC4C7D -:100B600037072000D98FDCCC9C4C7D779306F70F9C -:100B700093E717019CCC1C400567130707D093F738 -:100B8000F7F01CC01C4093E7070D1CC01C40F58FFC -:100B90001CC01C40D98F1CC00964EFF06FD913042E -:100BA0004440B93D034504009307F00F6314F5007A -:100BB000A53D21A00504693B75D5896491359384D1 -:100BC0000442014490408546A2850145EFF0CFE400 -:100BD000A13D1315140022950A051305054B420586 -:100BE0004181E545EFF02FF3372514001305054447 -:100BF000EFF0EFD22904930720039104E314F4FCEF -:100C000089659385859A13056003EFF03F90293D30 -:100C1000930580071305C03DEFF0EFEF1304800C40 -:100C2000EFF05F911357850093570501A30EE10282 -:100C3000498F230FF102D98F230EA10293F7F70FEB -:100C400081EB75651305054C7D14EFF04FCD69F808 -:100C5000238201C40147814401443AC2EFF09F8DD1 -:100C6000935705011377F50F3ACC2309F10293F757 -:100C7000F70F935685003ECEE24713F7F60F3ACAB8 -:100C80002308A102A308D10202C0124781C79337EB -:100C900014003EC0D24683470100814599C293B5F6 -:100CA0001400724513F6F50F814619C193361700EB -:100CB000D18FD58F99C323A001C403C751C035EB91 -:100CC00099C71305F00A69318547A382F1C083C72C -:100CD000A1C381C7FD17238DF1C283C701C581C799 -:100CE000FD172388F1C4938741C583C70701138487 -:100CF00041C581CF83D781C39306900F8507C20773 -:100D0000C183E3E7F624239CF1C283A741C337855F -:100D10000500130505E4850723AAF1C283A701C4D2 -:100D2000850723A0F1C4EFF08FBF7247D24462441D -:100D30002DB703C741C411466369E67E09660A07F9 -:100D4000130646B732971843028785C103C5D1C33E -:100D50008D4536C20905EFF02FBAA38EA1C2E54535 -:100D600013057041EFF02FDB924691CE03C5D1C33E -:100D70008D450505EFF04FB8A38EA1C2E5451305DB -:100D80007041EFF04FD98247B5C337575A64130704 -:100D9000070523AAE1C4938741C5130740062382B0 -:100DA000E70003C7D1C323930700239407002385DB -:100DB000E7000547A385E70023A607002388E7008F -:100DC000238E01C2238801C423A401C49305000516 -:100DD000130530292382E1C423A601C4EFF0AFD369 -:100DE000930580071305C03DEFF0EFD211398965F7 -:100DF0009385859B0145EFF06FF18546130600084A -:100E0000A9450145EFF02FF603C4D1C38967938745 -:100E1000075413173400018F0A07BA97904313073A -:100E20000002BA86B54513050003EFF0DF9489652B -:100E30009385859C6818EFF0EFC689670A0493874D -:100E40004743A2978C43EFF0EFC589659385C59C16 -:100E5000EFF04FC5230005006C181305F002EFF00A -:100E6000EFEA89659385059D130580038DA985C1EA -:100E700003C5C1C39D4536C21905EFF0EFA7238E08 -:100E8000A1C2E54513057041EFF0EFC8924691CE3F -:100E900003C5C1C39D450505EFF00FA6238EA1C272 -:100EA000E54513057041EFF00FC78247938441C5B4 -:100EB000638E070E83C7C1C3994663E9F60E896640 -:100EC0008A07938686B8B6979C43828783870400F7 -:100ED00013074006F9076355F704BA872380F40027 -:100EE0008387340013074006ED176350F704BA8771 -:100EF000A381F4001144238881C231479305C003C4 -:100F000013050037238DE1C2EFF0EFC09305000514 -:100F100013057049EFF02FC0EFF0EFC6114569A03F -:100F200013C7F7FF7D87F98F55BF13C7F7FF7D877D -:100F3000F98F7DBF03872400B94763C9E700930594 -:100F400080071305C00DEFF00FBD8DA0838714003F -:100F500093064006E50763D7F638B687A380F4000A -:100F6000930747FF130740066353F700BA872381AF -:100F7000F40009472388E1C29305C00331471305F4 -:100F8000C03D238DE1C2EFF00FB99305C0031305F7 -:100F90007052EFF04FB8130500629305A005EFF013 -:100FA0008FB7EFF04FBE1945EFF08FC0EFF05FA5A0 -:100FB00083C7C1C301453ED0025789679387475C09 -:100FC0000A07BA978C43EFF06FD483C704013EC879 -:100FD00095C303874400F54763CEE70083A741C369 -:100FE000A18B89CB096685461306069E814501457E -:100FF000EFF08FA283C5B4009307C004130551031B -:10100000230AF102EFF02FAB2300050085465018AC -:10101000814513050007EFF02FA085461306000851 -:10102000A9450145EFF02FD403C4F400630404384C -:10103000096685461306469EB9451305E004EFF0A0 -:10104000AF9D096685461306869EB145130540058A -:10105000EFF08F9C930700033EC4C1473EC0930747 -:1010600000033EC283C7C40009661306064C3EC691 -:1010700032478D47630BF702B24611476386E63A63 -:10108000424783C6A400194519C703C7A1C3630F0C -:10109000073403C501C393973600958F0967AA9754 -:1010A0008A0713070754BA979043824522451307CE -:1010B0000002BA8632C8EFF00FEC42468967938788 -:1010C000074C630FF610896793870744630AF6108D -:1010D00063180410B2476382071403C7A400938700 -:1010E000C1C0BA9703C40700938641C1938701C169 -:1010F000BA97369703C30700034707008246924713 -:101100001D46B302D7009A979385E2FF1385D7FF58 -:10111000014791461AD616D42ED23EC8EFF04F8A18 -:10112000924792550147338587001D4691467515B4 -:10113000EFF00F8932531D47C24733066440A25275 -:101140006352C702138547009307F00763CCA700DB -:101150009385F2FF9307F00363C6B70081466516D7 -:10116000EFF06FC0324785476309F70A92478D0752 -:101170003ED2824712551384A7009247A285A50745 -:101180003ED4824722568907BE863EC8EFF0EFC1A3 -:101190009247C2462255DD073E86B6853ED6EFF021 -:1011A000CFC09247C24532551386D701A286EFF0D1 -:1011B000CFBF82479D4611469385C700924701479E -:1011C00013851700EFE0DFFF8247125593868701F2 -:1011D00092471386A700824793852701EFF0EFBC63 -:1011E00032478D47631BF70203A441C3824705467C -:1011F0001375340093854700A24779153E95EFE0BB -:101200007FF8824713751400130505029385A70024 -:10121000A24705463E95EFE0FFF685461306000817 -:101220009305E0020145EFF00FB4014483C7E400E9 -:101230006360F4200144096713074759931724009A -:10124000BA97931434009043A29441478604BA8617 -:101250009305000313851400EFF0EFD10257937745 -:10126000F40F6319F700C54636869305F00226850C -:10127000EFF0EFC405049D47E31FF4FA83C701C5EF -:101280006383072A0147E14613064007C94519450C -:10129000EFE01FF3E14613064007C9451945EFF09B -:1012A0000FC289659385C59E5545EFF02FA68965C8 -:1012B0009385859F6818EFE0FFFEB2470967130723 -:1012C000075B8A07BA978C43EFE0DFFD896593855A -:1012D000C59FEFE03FFD230005006C187D45EFF052 -:1012E000EFA291A493C6F7FFFD86F58F85B903C5DC -:1012F000F40093058007933715003335A0003305BC -:10130000A0401375C50DA387F4001305851B25B9EF -:10131000838714009306400623870400A381D4002A -:101320009507138741C563D3F602B687930520035B -:1013300013057052A300F700EFE0FFFD13057041A5 -:1013400093052003EFE03FFD0D45B9B993C6F7FFC4 -:10135000FD86F58FE1BF838744001307400693871E -:1013600037026356F702BA879305C00313050031AD -:101370002382F400EFE03FFA9305C00313057041A8 -:10138000EFE07FF99305A0051305705261B613C70E -:10139000F7FF7D87F98FC9BF89472382F1C4930581 -:1013A00080021305302945B691472382F1C4A38DED -:1013B00001C2F5B783A741C3930500053E853EC032 -:1013C000EFE05FD1130770028247636DA700130738 -:1013D000E5013AC42247A18BB337F000B9073AC2FE -:1013E0003EC049B11307E006098FE5B71545E31480 -:1013F00004CA0386440075473E85E35EC7C803867A -:1014000014006147E359C7C8038604004D47E354FD -:10141000C7C803A541C39305200336C8EFE09FCB9F -:10142000C2461335450085B9096613060644B5B9A9 -:1014300013151400229521470A05BA86138681C127 -:10144000930560023A950504EFF0EFB21374F40FC0 -:10145000F1BB89CB8547F945130500372382F1C4D9 -:10146000EFE07FEBEFF0CFD98965938505A00145CB -:10147000138441C5EFF08F890306040089659385C5 -:1014800005A12945EFF00FA903061400896593858E -:1014900085A14D45EFF00FA80306240089659385CB -:1014A00005A27145EFF00FA7030634008965938507 -:1014B00085A213055002EFF0EFA5030644008965ED -:1014C000938505A31305E002EFF0CFA48344B40095 -:1014D0009307C0041305D103A685230EF102EFE0A4 -:1014E0009FDD8965938585A3EFE0DFDB8D4763E4AE -:1014F0009706835584008604EFE0FFDB9307F00234 -:101500002300F500938781C2BE9483D504000505AE -:10151000EFE07FDA2300050085467018930580030D -:101520000145EFE07FCFEFF02FD003C741C0938795 -:1015300001C20607BA9783D70700638A07F803A793 -:1015400001C46366F7F81305E00AEFF06FC0A382E9 -:1015500001C06FF0CFF78965938505A4EFE09FD4B4 -:1015600055BF85C103C5B1C38D4536C20905EFE03E -:10157000BFB8A38DA1C2E54513057041EFE0BFD907 -:10158000924691CE03C5B1C38D450505EFE0DFB6A8 -:10159000A38DA1C2E54513057041EFE0DFD7824777 -:1015A00095CF03C7B1C301EF83C741C09305800244 -:1015B00085078D8B2382F1C01305003731A885473D -:1015C0006319F70E83C761C09305C0031305C03DBF -:1015D00093B717002383F1C0EFE0FFD3EFF04FC2C2 -:1015E0008965938545A40145EFE05FF285461306C2 -:1015F0000008A9450145EFE01FF78965938545A5DA -:101600006818EFE03FCA03C741C089679387075E48 -:101610000A07BA978C43EFE0FFC8896523000500ED -:10162000938505A61305D104EFE0DFC783C761C02A -:10163000C9C789659385C597EFE0DFC68965230033 -:101640000500938585A61305E105EFE0BFC52300DE -:101650000500C5440144938714003EC003C3B1C3D1 -:101660009372F40F631E53000547A9461306000842 -:10167000A685014516C21AC0EFE09FB4924202430C -:1016800013164400B306534022967C189385140029 -:10169000B336D0003E961145EFE01FB8B1041307F2 -:1016A00050030504E399E4FA8965938505A76FF073 -:1016B000AFFB2382F1C4F94501B78965938545984D -:1016C000A5BF824799CF93050005130530292382D2 -:1016D00001C4EFE05FC4930580071305C03DEFE050 -:1016E0009FC3EFF0EFB1130700020966BA86130635 -:1016F000065F894513050003EFF0EF87138741C5A7 -:101700008346D7000947138441C5639FE602896574 -:101710009385859813054002EFE05FDF8965938527 -:1017200045A86818EFE01FB88345B400EFE0BFB8E4 -:10173000230005006C181305E002EFE03FDD89652A -:10174000938545A96FF04FF2896593858599D9B73F -:101750000356640083070400239C01C20506420669 -:1017600041822313C400FD17130740068346F4008B -:101770006354F708BA87E20703072400E1871305DB -:101780004006C9C693056700635DB506AA852300B8 -:10179000F4002301B4009307D00563D5E700A30745 -:1017A000040081461377160019CB83073400930594 -:1017B0004006FD1763DAF508AE87A301F400834500 -:1017C000E400C1EA894763EDB70093173600918FB3 -:1017D00003A641C3B297FD8BADEF85052307B40087 -:1017E00035CB8307140013064006FD176353F61428 -:1017F000B287A300F400B9A813C7F7FF7D87F98F5C -:101800009DBF13C5F5FF7D85E98D51B72300F40019 -:101810009307F7FF6350F502AA872301F4008307BB -:10182000140013074006FD17635BF700BA87A30097 -:10183000F4008DBF13C7F7FF7D87F98FF9BF13C77A -:10184000F7FF7D87F98FE5B793C5F7FFFD85ED8F2E -:10185000ADB7D9F503063400CD4763CDC70019CB2A -:101860008307140013074006FD176359F70CBA8766 -:10187000A300F40003470400BA876207618763533B -:10188000E600B2870347140093958701E18513169C -:10189000870161866353B600BA8703472400939596 -:1018A0008701E1851316870161866353B600BA8705 -:1018B000139787016187394683074400634AE60826 -:1018C000F517130740066350F708BA872302F400A0 -:1018D000830504000145EFE09FBA83051400054528 -:1018E000EFE0FFB9830524000945EFE05FB9830508 -:1018F00034000D45EFE0BFB8830744006347F0C0F4 -:101900000D479305800C1305A0142382E1C423081E -:101910000400EFE05FA09305800C1305700FEFE06B -:101920009F9F930500191305500AEFE0DF9E6FF0AB -:10193000CFBD13C6F7FF7D86F18F65BD13C7F7FFD7 -:101940007D87F98F35B713C7F7FF7D87F98FBDBF47 -:1019500013062003E35EE6F6890713074006635A81 -:10196000F700BA872302F400A5F60D45EFE05FA467 -:1019700085B713C7F7FF7D87F98FEDB74F6E00006E -:10198000000000004F6666002A2A20434F5252553D -:1019900050544544202A2A005345474641554C544B -:1019A0002028313129000000707265737320616E48 -:1019B00079206B65790000007E20242061646F70BF -:1019C00074202D2D706574003C200000203E000026 -:1019D0004C2F52207069636B20204F4B20676F00A3 -:1019E000210000007A0000005A0000003E3E206501 -:1019F000766F6C76696E67005B200000205D0000EA -:101A00007E2F7065742024207374617400000000C0 -:101A1000464F4F440000000048415050590000001C -:101A2000454E455247590000434C45414E00000089 -:101A30004845414C544800002020787020000000A8 -:101A40004D4158002D2053455454494E4753202DA5 -:101A50000000000053637265656E206F66663A0091 -:101A6000536F756E643A20004261636B00000000A2 -:101A70004C2F52206D6F766520204F4B207573657B -:101A800000000000636F72652064756D70656420EE -:101A90004C0000004F4B3A207265737061776E0006 -:101AA00070616E61676F7463686920763200000050 -:101AB000626F6F74696E67206B65726E656C2E2E37 -:101AC000000000006D6F756E74202F70657420200B -:101AD0006F6B0000737061776E207368656C6C20AB -:101AE000206F6B003E202E2F74616D61676F7463F1 -:101AF00068695F005368656C6C00000050616E6B34 -:101B00006F000000546D75780000000070726F6304 -:101B1000000000007573657200000000726F6F7442 -:101B200000000000436C617564650000676C6974B7 -:101B3000636800004645454400000000504C415990 -:101B400000000000534C4545500000004845414C02 -:101B500000000000535441545300000053455454B6 -:101B6000494E475300000000313573003330730095 -:101B7000363073004A0D00006E0E00005214000053 -:101B8000C216000062150000CC0E0000340F0000E9 -:101B9000EE1200001013000056130000981300000E -:101BA000A81300000000000000000000000000007A -:101BB0001FFFFFF83FFFFFFC3FFF7FFC3FFF7FFC65 -:101BC0003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC31 -:101BD0003FFF7FFC3FFF7FFC3C07701C3FFF7FFC0B -:101BE0003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC11 -:101BF0003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC01 -:101C00003FFFFFFC2000000427DF000427DF000463 -:101C1000200000041FFFFFF800000000000000008B -:101C200000000000000000000000000000000000B4 -:101C30001FFFFFF83FFFFFFC3FFF7FFC3FFF7FFCE4 -:101C40003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFCB0 -:101C50003FBF7EFC3F1F7C7C3E0F783C3F1F7C7C5F -:101C60003FBF7EFC3FFF7FFC3FFF7FFC3FFF7FFCD1 -:101C70003FBF7EFC3C07701C3FFF7FFC3FFF7FFCAB -:101C80003FFFFFFC2000000427DF000427DF0004E3 -:101C9000200000041FFFFFF800000000000000000B -:101CA0000000000000000000000000000000000034 -:101CB0001FFFFFF83FFFFFFC3FFF7FFC3FFF7FFC64 -:101CC0003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC30 -:101CD0003F5F7D7C3EAF7ABC3FFF7FFC3FFF7FFCD8 -:101CE0003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC10 -:101CF0003C03601C3FFF7FFC3FFF7FFC3FFF7FFCFE -:101D00003FFFFFFC2000000427DF000427DF000462 -:101D1000200000041FFFFFF800000000000000008A -:101D200000000000000000000000000000000000B3 -:101D30001FFFFFF83FFFFFFC3FFF7FFC3FFF7FFCE3 -:101D40003FFF7FFC3FFF7FFC3FFF7FFC3FBF7EFCF0 -:101D50003F1F7C7C3E0F783C3F1F7C7C3FBF7EFC5E -:101D60003FFF7FFC3FFF7FFC3FFF7FFC3C07701C79 -:101D70003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC7F -:101D80003FFFFFFC2000000427DF000427DF0004E2 -:101D9000200000041FFFFFF800000000000000000A -:101DA0000000000000008000001088000011880082 -:101DB00000318C000039DC00003BDC00007FFE00BD -:101DC000007FFE0000F83F0000E7C70000DFFB00D7 -:101DD00001BFFD8001FFFF8003FFFFC003FFFFC0C5 -:101DE00003DBDBC003E7E7C003E7E7C003DBDBC0DF -:101DF00001FDDF8001FABF8000F77F00007FFE0059 -:101E000001FFFFC001FFFFC003FFFFE003FFFFE092 -:101E100003FFFFE007FFFFF007FFFFF00FFFFFF8F2 -:101E20000FFFFFF80000800000108800001188F00C -:101E300000318C200039DC40003BDCF0007FFE00EC -:101E4000007FFE0000F83F0000E7C70000DFFB0056 -:101E500001BFFD8001FFFF8003FFFFC003FFFFC044 -:101E600003FFFFC003C3C3C003FFFFC003FFFFC0E6 -:101E700001FFFF8001FE7F8000FFFF00007FFE006A -:101E800001FFFFC001FFFFC003FFFFE003FFFFE012 -:101E900003FFFFE007FFFFF007FFFFF00FFFFFF872 -:101EA0000FFFFFF80000800000108800001188007C -:101EB00000318C000039DC00003BDC00007FFE00BC -:101EC000007FFE0000F83F0000E7C70000DFFB00D6 -:101ED00001BFFD8001FFFF8003FFFFC003FFFFC0C4 -:101EE00003E7E7C003E7E7C003FFFFC003FFFFC04E -:101EF00001FC3F8001FD3F8000FCBF00007C3E00F4 -:101F000001FFFFC001FFFFC003FFFFE003FFFFE091 -:101F100003FFFFE007FFFFF007FFFFF00FFFFFF8F1 -:101F20000FFFFFF8000080000010880000118800FB -:101F300000318C000039DC00003BDC00007FFE003B -:101F4000007FFE0000F83F0000E7C70000DFFB0055 -:101F500001BFFD8001FFFF80039FF9C003E7E7C0D9 -:101F600003FFFFC003E7E7C003E7E7C003FFFFC0CD -:101F700001FFFF8001FFFF8000FC3F00007BDE00CF -:101F800001F7EFC001FFFFC003FFFFE003FFFFE029 -:101F900003FFFFE007FFFFF007FFFFF00FFFFFF871 -:101FA0000FFFFFF80000800000108800001188007B -:101FB00000318C000039DC00003BDC00007FFE00BB -:101FC000007FFE0000F83F0000E7C70000DFFB00D5 -:101FD00001BFFD8001FFFF8003FFFFC003FFFFC0C3 -:101FE00003EFF7C003E7EBC003DBDBC003FFFFC079 -:101FF00001FFFF8001F7EF8000F7EF00007BDE00BC -:1020000001FC3FC001FFFFC003FFFFE003FFFFE053 -:1020100003FFFFE007FFFFF007FFFFF00FFFFFF8F0 -:102020000FFFFFF8000080000010880000118800FA -:1020300000318C000039DC00003BDC00007FFE003A -:10204000007FFE0000F83F0000E7C70000DFFB0054 -:1020500001BFFD8001FFFF8003FFFFC003FFFFC042 -:1020600003FFFFC003C3C3C003FFFFC003FFFFC0E4 -:1020700001FFFF8001FC3F8000FFFF00007FFE00AA -:1020800001FFFFC001FFFFC003FFFFE003FFFFE010 -:1020900003FFFFE007FFFFF007FFFFF00FFFFFF870 -:1020A0000FFFFFF80000800000108800001188007A -:1020B00000318C000039DC00003BDC00007FFE00BA -:1020C000007FFE0000F83F0000E7C70000DFFB00D4 -:1020D00001BFFD8001FFFF8003FFFFC003FFFFC0C2 -:1020E00003E7E7C003E7E7C003FFFFC003FFFFC04C -:1020F00001FFFF8001FC3F8000FFFF00007FFE002A -:1021000001FFFFC001FFFFC003FFFFE003FFFFE08F -:1021100003FFFFE007FFFFF007FFFFF00FFFFFF8EF -:102120000FFFFFF8000000000000000000000000AA -:1021300007FFFFE00FFFFFF00FFFFFF00FFFFFF0C3 -:102140000FFFFFF00FFFFFF00FFFFFF00FFFFFF09B -:102150000FFFFFF00F0180F00FFFFFF00FFFFFF008 -:102160000FFFFFF00FFFFFF00FFFFFF00FFFFFF07B -:102170000FFFFFF00FF80FF00FFFFFF00FFFFFF062 -:102180000FFFFFF00FFFFFF007FFFFE00007E00089 -:102190000007E0000007E000007FFE00007FFE0077 -:1021A000007FFE00000000000000000000000000B2 -:1021B00007FFFFE00FFFFFF00FFFFFF00FFFFFF043 -:1021C0000FFFFFF00FFFFFF00FFFFFF00FEFF7F033 -:1021D0000FC7E3F00F83C1F00FC7E3F00FEFF7F085 -:1021E0000FFFFFF00FFFFFF00FFFFFF00FFFFFF0FB -:1021F0000FFFFFF00FFFFFF00FFFFFF00FF81FF0D2 -:102200000FC7E3F00FFFFFF007FFFFE00007E0005C -:102210000007E0000007E000007FFE00007FFE00F6 -:10222000007FFE0000000000000000000000000031 -:1022300007FFFFE00FFFFFF00FFFFFF00FFFFFF0C2 -:102240000FFFFFF00FFFFFF00FFFFFF00FDFEFF0CA -:102250000FAFD7F00FFFFFF00FFFFFF00FFFFFF002 -:102260000FFFFFF00FFFFFF00FFFFFF00FFFFFF07A -:102270000FC7E3F00FF81FF00FFFFFF00FFFFFF0A5 -:102280000FFFFFF00FFFFFF007FFFFE00007E00088 -:102290000007E0000007E000007FFE00007FFE0076 -:1022A000007FFE00000000000000000000000000B1 -:1022B00007FFFFE00FFFFFF00FFFFFF00FFFFFF042 -:1022C0000FFFFFF00FFFFFF00FEFF7F00FC7E3F086 -:1022D0000F83C1F00FC7E3F00FEFF7F00FFFFFF030 -:1022E0000FFFFFF00FFFFFF00FFFFFF00F7FFFF07A -:1022F0000FBFFFF00FDFFFF00FBFFFF00F780FF001 -:102300000FFFFFF00FFFFFF007FFFFE00007E00007 -:102310000007E0000007E000007FFE00007FFE00F5 -:10232000007FFE0003C003C003C007F00FF81FFCCE -:10233000FF7FFE3FFC1FFE3F1F7C1FFC0FF807F0D6 -:1023400003C003C000000000000000C000C000C0C7 -:1023500006C006C006D806D836D836D836D836D8FD -:10236000000000000000008007F00FF81C3C3C3E1D -:10237000300E300E700F300E3C3E3C3E1FFC0FF80E -:1023800007F00080000000000080008001C001C054 -:1023900007F00DF80DF808F81DFC0DF80FF80FF810 -:1023A00007F0008000000000000004000C001C008A -:1023B00018001C003C001C001E001F000FE807F066 -:1023C0000080000000000000077000001F7C3F7EBE -:1023D0003F7E3F7E00003F7E3F7E3F7E1F7C0000B1 -:1023E000077000000000000000A001900FE01BF04B -:1023F0003BF831F83BF87BFC3FF83FF83FF81FF023 -:102400000FE00100AED580A83FD300408D1420001E -:10241000A1C8DA12818FD9F1DB40A4A6AFFF00007A -:10242000A01A0000B01A0000C41A0000D41A00005C -:10243000E41A0000F41A0000FC1A0000041B00005B -:10244000000000000000000000000000000000008C -:10245000000000020000000000000000000000007A -:1024600080008000000FF8000015540000FFFF807E -:1024700001FFFFC003FFFFE00111444107D7F5F062 -:1024800007EFFBF007D7F5F0051144500FFFFFF8F9 -:1024900007FFFFF007FFFFF00555555007EAABF0C7 -:1024A00043FFFFE003FFFFE00155554000FFFF80C1 -:1024B000003FFE00000FF8042000000000000000B4 -:1024C00000000000000000000000002000000020CC -:1024D000040000A80E000020040003FE00000020FD -:1024E000000080A8000FF820003FFE20007FFF00C2 -:1024F00000FFFF8001FFFFC001FFFFC003FFFFE0FF -:1025000003F7F7E003F7F7E003E3E3E007F7F7F09B -:1025100003F7F7E003FFFFE003FFFFE003E7F3E06B -:1025200001F80FC001FFFFC000FFFF80007FFF0028 -:10253000003FFE00000FF8000000800000000000D7 -:10254000A4220000A422000024220000A4210000F4 -:102550002422000024210000A4210000A420000067 -:1025600024200000A41F0000241F0000A41E00005F -:10257000241E0000A41D0000241D0000241D0000D6 -:10258000A41C0000241C0000A41C0000A41B0000CC -:10259000241C0000E4230000C4230000A423000046 -:1025A000842300006423000044230000242300004F -:1025B0000C1B0000141B00001C1B0000241B00004F -:1025C0002C1B0000341B00003C1B0000441B0000BF -:1025D000281A00004C1B0000541B00005C1B00006C -:1025E000681B00006C1B0000701B000084190000B9 -:1025F000000000000000000000FFFC0003FFFF00DF -:1026000007FFFF80061FE1800630318006303180F1 -:10261000063FC30006330300063183000630C300C3 -:1026200006000600060F060007FFFF800FFFFFC031 -:102630001FFFFFE03FFFFFF07FFFFFF8FFFFFFFC02 -:10264000FFFFFFFC00F0F00003FFF0000FFFFC00B5 -:10265000000000000000000000000000000000007A -:10266000000000000000000000000000000000006A -:1026700000000000000000007E81A581BD99817EE0 -:102680007EFFDBFFC3E7FF7E6CFEFEFE7C381000A2 -:1026900010387CFE7C381000387C38FEFED61038AE -:1026A00010387CFEFE7C10380000183C3C180000FE -:1026B000FFFFE7C3C3E7FFFF003C664242663C0002 -:1026C000FFC399BDBD99C3FF0F070F7DCCCCCC785C -:1026D0003C6666663C187E183F333F303070F0E051 -:1026E0007F637F636367E6C018DB3CE7E73CDB188A -:1026F00080E0F8FEF8E08000020E3EFE3E0E020092 -:10270000183C7E18187E3C18666666666600660091 -:102710007FDBDB7B1B1B1B003E613C66663C867CD3 -:10272000000000007E7E7E00183C7E187E3C18FF74 -:10273000183C7E1818181800181818187E3C180035 -:1027400000180CFE0C180000003060FE6030000025 -:102750000000C0C0C0FE0000002466FF6624000028 -:1027600000183C7EFFFF000000FFFF7E3C180000C9 -:102770000000000000000000183C3C181800180081 -:1027800066662400000000006C6CFE6CFE6C6C0041 -:10279000183E603C067C180000C6CC183066C600A7 -:1027A000386C3876DCCC7600181830000000000059 -:1027B0000C18303030180C0030180C0C0C1830008D -:1027C00000663CFF3C6600000018187E18180000E8 -:1027D00000000000001818300000007E000000001B -:1027E0000000000000181800060C183060C08000BF -:1027F000386CC6D6C66C38001838181818187E0001 -:102800007CC6061C3066FE007CC6063C06C67C0004 -:102810001C3C6CCCFE0C1E00FEC0C0FC06C67C003E -:102820003860C0FCC6C67C00FEC60C1830303000D4 -:102830007CC6C67CC6C67C007CC6C67E060C7800FC -:102840000018180000181800001818000018183098 -:10285000060C1830180C060000007E00007E0000F8 -:102860006030180C183060007CC60C181800180076 -:102870007CC6DEDEDEC07800386CC6FEC6C6C6008A -:10288000FC66667C6666FC003C66C0C0C0663C00B8 -:10289000F86C6666666CF800FE6268786862FE0036 -:1028A000FE6268786860F0003C66C0C0CE663A00A0 -:1028B000C6C6C6FEC6C6C6003C18181818183C0086 -:1028C0001E0C0C0CCCCC7800E6666C786C66E600CE -:1028D000F06060606266FE00C6EEFEFED6C6C60010 -:1028E000C6E6F6DECEC6C6007CC6C6C6C6C67C0038 -:1028F000FC66667C6060F0007CC6C6C6C6CE7C0EF8 -:10290000FC66667C6C66E6003C6630180C663C0033 -:102910007E7E5A1818183C00C6C6C6C6C6C67C00BD -:10292000C6C6C6C6C66C3800C6C6C6D6D6FE6C00BD -:10293000C6C66C386CC6C6006666663C18183C0095 -:10294000FEC68C183266FE003C30303030303C0021 -:10295000C06030180C0602003C0C0C0C0C0C3C0047 -:1029600010386CC60000000000000000000000FFEE -:1029700030180C00000000000000780C7CCC7600C1 -:10298000E0607C666666DC0000007CC6C0C67C0039 -:102990001C0C7CCCCCCC760000007CC6FEC07C003D -:1029A0003C6660F86060F000000076CCCC7C0CF8EF -:1029B000E0606C766666E6001800381818183C006F -:1029C000060006060666663CE060666C786CE6000B -:1029D0003818181818183C000000ECFED6D6D6009F -:1029E0000000DC666666660000007CC6C6C67C0029 -:1029F0000000DC66667C60F0000076CCCC7C0C1EAF -:102A00000000DC766060F00000007EC07C06FC0008 -:102A10003030FC3030361C000000CCCCCCCC760002 -:102A20000000C6C6C66C38000000C6D6D6FE6C00D4 -:102A30000000C66C386CC6000000C6C6C67E06FC28 -:102A400000007E4C18327E000E18187018180E0008 -:102A500018181818181818007018180E1818700080 -:102A600076DC0000000000000010386CC6C6FE00D6 -:102A70007CC6C0C0C67C0C78CC00CCCCCCCC76005C -:102A80000C187CC6FEC07C007C82780C7CCC760066 -:102A9000C600780C7CCC76003018780C7CCC7600A4 -:102AA0003030780C7CCC760000007EC0C07E0C38C4 -:102AB0007C827CC6FEC07C00C6007CC6FEC07C005A -:102AC00030187CC6FEC07C006600381818183C0020 -:102AD0007C82381818183C003018003818183C0050 -:102AE000C6386CC6FEC6C600386C7CC6FEC6C600BC -:102AF0001830FEC0F8C0FE0000007E187ED87E00B0 -:102B00003E6CCCFECCCCCE007C827CC6C6C67C00A3 -:102B1000C6007CC6C6C67C0030187CC6C6C67C0013 -:102B2000788400CCCCCC76006030CCCCCCCC760099 -:102B3000C600C6C6C67E06FCC6386CC6C66C380063 -:102B4000C600C6C6C6C67C0018187EC0C07E18184F -:102B5000386C64F06066FC0066663C7E187E18186F -:102B6000F8CCCCFAC6CFC6C70E1B183C18D87000DC -:102B70001830780C7CCC76000C18003818183C0003 -:102B80000C187CC6C6C67C001830CCCCCCCC7600E9 -:102B900076DC00DC6666660076DC00E6F6DECE00FB -:102BA0003C6C6C3E007E0000386C6C38007C000091 -:102BB0001800181830633E00000000FEC0C000007E -:102BC000000000FE0606000063E66C7E3366CC0F54 -:102BD00063E66C7A366ADF06180018183C3C180069 -:102BE000003366CC6633000000CC663366CC000050 -:102BF000228822882288228855AA55AA55AA55AA31 -:102C000077DD77DD77DD77DD1818181818181818B4 -:102C100018181818F81818181818F818F818181894 -:102C200036363636F636363600000000FE36363694 -:102C30000000F818F81818183636F606F636363644 -:102C400036363636363636360000FE06F636363638 -:102C50003636F606FE00000036363636FE00000038 -:102C60001818F818F800000000000000F8181818EC -:102C7000181818181F00000018181818FF00000076 -:102C800000000000FF181818181818181F18181836 -:102C900000000000FF00000018181818FF1818188E -:102CA00018181F181F1818183636363637363636A5 -:102CB000363637303F00000000003F3037363636BA -:102CC0003636F700FF0000000000FF00F73636360A -:102CD00036363730373636360000FF00FF0000004A -:102CE0003636F700F73636361818FF00FF000000BA -:102CF00036363636FF0000000000FF00FF181818B7 -:102D000000000000FF363636363636363F0000000B -:102D100018181F181F00000000001F181F1818188F -:102D2000000000003F36363636363636FF36363649 -:102D30001818FF18FF18181818181818F8000000AD -:102D4000000000001F181818FFFFFFFFFFFFFFFF24 -:102D500000000000FFFFFFFFF0F0F0F0F0F0F0F0F7 -:102D60000F0F0F0F0F0F0F0FFFFFFFFF00000000EF -:102D7000000076DCC8DC760078CCCCD8CCC6CC00A1 -:102D8000FEC6C0C0C0C0C0000000FE6C6C6C6C0011 -:102D9000FEC6603060C6FE0000007ED8D8D8700045 -:102DA0000000666666667CC00076DC18181818009D -:102DB0007E183C66663C187E386CC6FEC66C3800D1 -:102DC000386CC6C66C6CEE000E180C3E66663C0095 -:102DD00000007EDBDB7E0000060C7EDBDB7E60C05D -:102DE0001E30607E60301E00007CC6C6C6C6C600AF -:102DF00000FE00FE00FE000018187E1818007E007D -:102E000030180C1830007E000C1830180C007E00B2 -:102E10000E1B1B18181818181818181818D8D8705E -:102E20000018007E001800000076DC0076DC000050 -:102E3000386C6C380000000000000018180000001A -:102E400000000018000000000F0C0C0CEC6C3C1C87 -:102E50006C36363636000000780C18307C000000E6 -:102E600000003C3C3C3C0000000000000000000072 -:102E70000101010000000000141517000B0B0900F0 -:102E80000B110C0000183C6C7EFFFF00FA00F401EF -:0C2E9000E803000000002D007800F000B6 +:1005000023000400E1B723800400D5BF938781C492 +:1005100083D56700611122C006C2038707008505E5 +:10052000C205C18103C6F700838627002393B70065 +:100530007D1793074006138481C463D6E7083E877E +:100540006207618759CA93876600130540066351A5 +:10055000F508AA87E207E1872301F4002300E400FD +:100560001305D0056357D500A30704009307400681 +:10057000014613F5150019C983063400130340061C +:10058000FD166351D30A9A86A301D4000343E40005 +:100590004DE2894663ED6600939635008D8E83A506 +:1005A00081C3AE96FD8AD1E605032307640041C5E9 +:1005B0008306140093054006FD1663DED512AE8651 +:1005C000A300D4008DA89347F7FFFD877D8F8DBFD3 +:1005D00013C5F7FF7D85E98FB5BF9387F6FF23002D +:1005E000E400930640060305140063D3F602B687C1 +:1005F000E207E1879306F5FF2301F40013054006A7 +:10060000138381C4635BD500AA86A300D30095B78A +:1006100093C6F7FFFD86F58FE1BF13C5F6FF7D8515 +:10062000E98EE5B713C3F6FF1353F341B3F6660043 +:10063000A1BFE31E03F603033400CD4663CD66007D +:1006400019C98306140093054006FD1663DAD50A1E +:10065000AE86A300D40083451400AE86E205E18592 +:100660006353B3009A8693958601E18563D3B700FF +:10067000BE86B68793968701E1866353D700BA8713 +:10068000139787016187B9468307440063C4E6086E +:10069000F51713074006635AF706BA872302F400DA +:1006A000830504000145E13B830514000545C13B7A +:1006B000830524000945E133830534000D45C1332A +:1006C00083074400634DF0060D479305800C130526 +:1006D000A01423080400238BE1C235399305800C54 +:1006E0001305700F0D39024492409305001913054C +:1006F000500A21010DB193C5F6FFFD85ED8EC9B5F8 +:1007000093C5F6FFFD85ED8EA9B713C7F7FF7D876B +:10071000F98F69B793062003E3D4E6F88907130736 +:1007200040066359F700BA872302F40035FA0D45F5 +:100730004131BDB713C7F7FF7D87F98FF5B79240F9 +:100740000244210182802E860147B307E60083C759 +:10075000070081EFC147998F8A0713C7F7FF7D878D +:10076000AA85854633F5E70045BC0507F9BFB717ED +:10077000014088479387074098479C471345F5FFFA +:1007800019831347F7FF958393C7F7FF058B0589F7 +:100790002207858B7111C207598D5D8D11018280F1 +:1007A000B28731111387F7FF368606C822C626C4E2 +:1007B0002A979306F00763F5E60093070008898FF0 +:1007C0003304F50063178500C2403244A24451014E +:1007D00082809304150032C22EC06D3212468245CB +:1007E0002685CDB7130181FD3383B64022D03684F0 +:1007F0009356F34133C36600B302A6403303D3409C +:1008000093D6F241B3C2560026CE06D2B382D2406E +:10081000AE84B28763C76200A286AA843284B68798 +:100820002E8563489400BE86AA873685A2862684D4 +:10083000B684B303F54093D6F34133878440B3C302 +:100840007600B383D3409356F701BA963AC27D57E8 +:100850003AC0858663D4A70005473AC063D88400B0 +:1008600092500254F24413018102828036CC1ECA97 +:1008700016C81AC6014663D562023E85A2853EC4EB +:100880001132A2473243C242D243E246B386764097 +:1008900063D606000247BA971247BA9605047DBF91 +:1008A000BE8522853EC4F938E246D243C242324375 +:1008B000A247E9BF9307F00763C0A704411122C410 +:1008C00006C626C2B387C500130700042E846354EE +:1008D000F7003306B740B304860063179400B240B4 +:1008E0002244924441018280A28505462AC0EFF04D +:1008F0007F8902450504D5B78280311126C4B284B0 +:10090000368606C836C222C62EC02A8465371246ED +:1009100082451385F4FF2295713F824585462686E0 +:100920002285BD3D82479385F7FF9247BE95930789 +:10093000F00363EAB70022853244C2402686A2440F +:1009400085465101B1BDC2403244A244510182806A +:10095000511122C226C02A84B28485462E86AA85D9 +:10096000014506C4EFF05F8B130500039D46130697 +:10097000C004A28559371395340026950A0526959B +:1009800006059307300663D4A70293054006EFF0EF +:100990002FF10547B305E4001244A24082441376C8 +:1009A000F50F95461305100331016FF07F81A240CA +:1009B0001244824431018280130181FDB387E50036 +:1009C00022D226D02AC832CA13D436003EC681436A +:1009D0009307F00363EDB70893F775000547B31766 +:1009E000F7003EC0D24781469E973ECC93D7350054 +:1009F0009E073ECEE247939236000147B69783C7E3 +:100A000007003EC2C247BE92F247B3845700B38785 +:100A1000E2001306F0076364F6041245930700082A +:100A2000B3D7E740E98F3386E4001385C1C532951B +:100A3000034301003EC4834705001346F3FF050747 +:100A40007D8EA247B337F000B307F0403373F30055 +:100A5000336666002300C500A147E31AF7FA85064E +:100A6000E31AD4F8B2478505A293E393B7F612547C +:100A700082541301810282806167B75700401307D7 +:100A8000076A938707407D5683D68701898AF9C212 +:100A90007D17E31BC7FE711106C0EFF06FE98240BE +:100AA000054511018280E1679387176A83564701E4 +:100AB00093F6060881E6FD17F5FBF1BF83470500B5 +:100AC00005052318F700E310B5FEE166375700402F +:100AD000370607009386066A130707401306460881 +:100AE000FD550355470183578701C207C98FF18F11 +:100AF0006386C700FD16E396B6FE71BF83570700F5 +:100B0000014593E707202310F70082803757004004 +:100B1000AA951307074045BF930780072318F700DE +:100B20006166B7560040370707001306066A9386CA +:100B30000640130727087D5383D2460183D78601D9 +:100B4000C207B3E75700F98FE382E7FC7D16E31590 +:100B500066FE91B703D70700E16637060300136707 +:100B600007102390E700375700409386066A130763 +:100B7000074005067D538352470183578701C2070B +:100B8000B3E75700F18FE389C7F8FD16E39566FEDA +:100B900019B7130181FDA300A10089450A8506D27A +:100BA00023000100D13D9250130181028280970100 +:100BB00000209381E1841381414009651305058874 +:100BC0007310053097F6FFFF9386C64393E6360011 +:100BD00073905630138581C29385C10501466356D3 +:100BE000B50010C11105E34EB5FE17250000130531 +:100BF0006540938541C0138681C26388C500144156 +:100C000094C111059105E39AC5FEB7F700E00547C9 +:100C100098C385679387A7D07390173473002030EB +:100C200001A0371702401C47B7068000D58F1CC7AC +:100C30002A96AA876393C70082802380B70085071E +:100C4000D5BF1306004081451385C1C5D5B781477F +:100C50006313F60082803387F5008346070033076D +:100C6000F50085072300D700E5B779711305100259 +:100C700006D622D426D2313F0145213F1305F00785 +:100C8000093F130520023137014521371D451384E3 +:100C9000C1C501379304044093070004A2851306DD +:100CA0000002130511002300F100553793051002CF +:100CB0000A8513040402C933E31094FEB25022548F +:100CC000925445618280B7270240054798C3B71701 +:100CD00002403707080123A207001307170898C32B +:100CE00037079F0098C7984393166700E3DD06FE19 +:100CF000D843B7160240719B13672700D8C321471A +:100D0000DC42B18BE39EE7FE8280197186DEA2DCB5 +:100D1000A6DA553FB71402409C4C37140140FD76CB +:100D200093E757039CCC9307048098439386F60F70 +:100D3000370600F11377F7F01367070198C33707F9 +:100D4000020098CB9307044098437D168545758F24 +:100D50001367071098C33707040098CB184037056E +:100D60000140419B1367870018C09843718F370675 +:100D70000008518F98C39843370610FF7D16718F76 +:100D800037068000518F98C30CC81306000490CB1F +:100D90001307000298CB1C451167130727C0D98F92 +:100DA0001CC593070540984337E500E01367170615 +:100DB00098C3D84713671706D8C7B7071000232072 +:100DC000F510DC4C19671307F7DBCD8FDCCCB707C8 +:100DD00000402394E7021167130777A92396E702DF +:100DE000239AB70079572398E70003D7C7004D8FA0 +:100DF0002396E7002322C51037050B00130505C80D +:100E0000EFF0EFB1DC4C37072000D98FDCCC9C4CE5 +:100E10007D779306F70F93E717019CCC1C4005677D +:100E2000130707D093F7F7F01CC01C4093E7070D9A +:100E30001CC01C40F58F1CC01C40D98F1CC009640D +:100E4000EFF00FAF13040457ED3B03450400930785 +:100E5000F00F6314F500113D21A005041D3B75D56D +:100E60008964C5339384C458014490408546A28563 +:100E70000145EFF06FBAD53B1315140022950A0512 +:100E80001305054B42054181E545EFF0CFC83725F5 +:100E9000140013050544EFF08FA8290493072003DD +:100EA0009104E314F4FC89659385C5B013056003D0 +:100EB000EFF07F895D3B930580071305C03DEFF0A0 +:100EC0008FC51304800CEFF09F8A1357850093574A +:100ED0000501A300E104498F2301F104D98F230008 +:100EE000A10493F7F70F81EB75651305054C7D148D +:100EF000EFF0EFA269F8238B01C2814401478147DB +:100F000083C651C0DDEAB7070040F952B7F500E0EB +:100F1000A38A01C2238A01C22392070223985700A1 +:100F200003D70700136717002390E70003A705D135 +:100F30005D9B23A8E5D07300501003D70700C1665E +:100F4000F916758F2390E70003C751C321C7130516 +:100F5000F00A81318547A382F1C023A801C22395FD +:100F600001C2EFF0DF801357850093570501A308F6 +:100F7000E1022309F1029376F50F1377F70F93F748 +:100F8000F70F2308A10236CA3ACC3ECEF24462479C +:100F9000D247BDB7938481C403C7040135DBEFF0AA +:100FA000EFD683C70401A5F31305F00ADD368547A4 +:100FB000A382F1C023A801C26DB73EC43AC2EFF0CC +:100FC0000FFB135685009377F50F935605013ECA24 +:100FD0009377F60F3ECC93F7F60F3ECED247230A17 +:100FE000A102A30AC102230BD10202C0124789C782 +:100FF000A24793B717003EC0E246834701008145F0 +:1010000099C293351700724613F7F50F814619C23E +:1010100093B61400D98FD58F99C323A801C203C7F3 +:1010200061C311466369E67E09660A07130606CEA8 +:1010300032971843028785C103C5F1C28D4536C278 +:101040000905EFF06F8BA387A1C2E5451305704139 +:10105000EFF06FAC924691CE03C5F1C28D45050508 +:10106000EFF08F89A387A1C2E54513057041EFF02A +:101070008FAA8247B5C337575A641307070523A4BD +:10108000E1C4938781C4130740062382E70003C7A6 +:10109000F1C223930700239407002385E700054747 +:1010A000A385E70023A607002388E700238701C262 +:1010B000238201C423AE01C2930500051305302924 +:1010C000238BE1C223A001C4EFF0EFA493058007B6 +:1010D0001305C03DEFF02FA4AD3689659385C5B1EA +:1010E0000145EFF04FE6854613060008A945014586 +:1010F000EFF00FEB03C4F1C289679387C76A131738 +:101100003400018F0A07BA97904313070002BA868A +:10111000B54513050003EFF03F8A89659385C5B295 +:101120008800EFF02F9889670A049387075AA297DF +:101130008C43EFF02F978965938505B3EFF08F9679 +:10114000230005008C001305F002EFF0CFDF896566 +:10115000938545B3130580038DA985C103C5E1C2FD +:101160009D4536C21905EFE03FF92387A1C2E54549 +:1011700013057041EFF02F9A924691CE03C5E1C25C +:101180009D450505EFE05FF72387A1C2E5451305FF +:101190007041EFF04F988247938481C4638E070EAD +:1011A00083C7E1C2994663E9F60E89668A0793868A +:1011B00046CFB6979C438287838704001307400677 +:1011C000F9076355F704BA872380F4008387340056 +:1011D00013074006ED176350F704BA87A381F400A4 +:1011E0001144238481C231479305C003130500379E +:1011F0002386E1C2EFF02F92930500051305704995 +:10120000EFF06F91EFF02F98114569A013C7F7FF2A +:101210007D87F98F55BF13C7F7FF7D87F98F7DBF96 +:1012200003872400B94763C9E700930580071305C6 +:10123000C00DEFF04F8E8DA08387140093064006FB +:10124000E50763D7F638B687A380F400930747FF16 +:10125000130740066353F700BA872381F400094758 +:101260002384E1C29305C00331471305C03D2386A3 +:10127000E1C2EFF04F8A9305C00313057052EFF0FF +:101280008F89130500629305A005EFF0CF88EFF07A +:101290008F8F1945EFF0CF91EFF0BF9A83C7E1C26E +:1012A00001453ED002578967938707730A07BA97AB +:1012B0008C43EFF04FC983C704013EC895C3038731 +:1012C0004400F54763CEE70083A781C3A18B89CB98 +:1012D00009668546130646B481450145EFE0DFF314 +:1012E00083C5B4009307C00413059103230CF102D6 +:1012F000EFE07FFC2300050085463018814513058B +:101300000007EFE07FF1854613060008A945014577 +:10131000EFF00FC903C4F40063040438096685467E +:10132000130686B4B9451305E004EFE0FFEE096645 +:1013300085461306C6B4B14513054005EFE0DFED61 +:10134000930700033EC4C1473EC0930700033EC25B +:1013500083C7C40009661306C6623EC632478D477E +:10136000630BF702B24611476386E63A424783C6EB +:10137000A400194519C703C7C1C2630F073403C5C9 +:1013800081C293973600958F0967AA978A0713073A +:10139000C76ABA9790438245224513070002BA866E +:1013A00032C8EFF06FE1424689679387C762630FE7 +:1013B000F61089679387C75A630AF61063180410FA +:1013C000B2476382071403C7A4009387C1C0BA97CA +:1013D00003C40700938641C1938701C1BA9736972A +:1013E00003C3070003470700824692471D46B30226 +:1013F000D7009A979385E2FF1385D7FF014791465F +:101400001AD616D42ED23EC8EFE09FDB92479255F3 +:101410000147338587001D4691467515EFE05FDA79 +:1014200032531D47C24733066440A2526352C7027B +:10143000138547009307F00763CCA7009385F2FF5D +:101440009307F00363C6B70081466516EFF04FB50A +:10145000324785476309F70A92478D073ED2824794 +:1014600012551384A7009247A285A5073ED4824750 +:1014700022568907BE863EC8EFF0CFB69247C246D5 +:101480002255DD073E86B6853ED6EFF0AFB59247D2 +:10149000C24532551386D701A286EFF0AFB482471A +:1014A0009D4611469385C700924701471385170053 +:1014B000EFE01FD18247125593868701924713862A +:1014C000A700824793852701EFF0CFB132478D47C0 +:1014D000631BF70203A481C38247054613753400DA +:1014E00093854700A24779153E95EFE0BFC9824733 +:1014F00013751400130505029385A700A24705463E +:101500003E95EFE03FC88546130600089305E002CC +:101510000145EFF0EFA8014483C7E4006360F420C5 +:10152000014409671307077093172400BA979314AF +:1015300034009043A29441478604BA869305000381 +:1015400013851400EFF04FC702579377F40F631918 +:10155000F700C54636869305F0022685EFF0EFB911 +:1015600005049D47E31FF4FA83C741C46383072A38 +:101570000147E14613064007C9451945EFE05FC43E +:10158000E14613064007C9451945EFF00FB78965D5 +:10159000938505B55545EFF00F9B89659385C5B5D6 +:1015A0008800EFE03FD0B24709671307C7718A0789 +:1015B000BA978C43EFE01FCF8965938505B6EFE0BE +:1015C0007FCE230005008C007D45EFF0CF9791A4DE +:1015D00093C6F7FFFD86F58F85B903C5F400930523 +:1015E0008007933715003335A0003305A0401375ED +:1015F000C50DA387F4001305851B25B98387140047 +:101600009306400623870400A381D400950713871F +:1016100081C463D3F602B687930520031305705285 +:10162000A300F700EFE03FCF1305704193052003BF +:10163000EFE07FCE0D45B9B993C6F7FFFD86F58F74 +:10164000E1BF838744001307400693873702635640 +:10165000F702BA879305C003130500312382F40013 +:10166000EFE07FCB9305C00313057041EFE0BFCAE5 +:101670009305A0051305705261B613C7F7FF7D8768 +:10168000F98FC9BF8947238BF1C2930580021305E7 +:10169000302945B69147238BF1C2A38601C2F5B725 +:1016A00083A781C3930500053E853EC0EFE09FA25E +:1016B000130770028247636DA7001307E5013AC460 +:1016C0002247A18BB337F000B9073AC23EC049B1F7 +:1016D0001307E006098FE5B71545E31404CA03862E +:1016E000440075473E85E35EC7C803861400614722 +:1016F000E359C7C8038604004D47E354C7C803A590 +:1017000081C39305200336C8EFE0DF9CC246133542 +:10171000450085B909661306C65AB5B913151400F4 +:10172000229521470A05BA86138681C19305600276 +:101730003A950504EFF04FA81374F40FF1BB89CB71 +:101740008547F94513050037238BF1C2EFE0BFBC95 +:10175000EFF02FCF8965938545B60145138481C489 +:10176000EFE07FFE030604008965938545B72945B0 +:10177000EFF00F9E0306140089659385C5B74D45AC +:10178000EFF00F9D030624008965938545B87145E8 +:10179000EFF00F9C0306340089659385C5B81305E7 +:1017A0005002EFF0EF9A030644008965938545B92E +:1017B0001305E002EFF0CF998344B4009307C0040F +:1017C00013051104A6852300F104EFE0DFAE89655F +:1017D0009385C5B9EFE01FAD8D4763EC970A83553C +:1017E00084008604EFE03FAD9307F0022300F5008C +:1017F000938701C2BE9483D504000505EFE0BFAB1B +:101800002300050085469000930580030145EFE025 +:10181000BFA0EFF08FC503C741C089679387477E9C +:101820000607BA9783D7070003A401C389CB63686F +:10183000F4001305E00AEFF0CFB5A38201C083C71F +:10184000C1C281C7FD172386F1C283C741C481C7C6 +:10185000FD172382F1C483C781C581CF83D7A1C27D +:101860009306900F8507C207C18363E3F622239591 +:10187000F1C283A781C337850500050485071305D9 +:1018800005E423ACF1C223A881C2EFE05F896FF0C9 +:10189000EFEF8965938545BAEFE0DFA095B785C185 +:1018A00003C5D1C28D4536C20905EFE0FF84A3868A +:1018B000A1C2E54513057041EFE0FFA5924691CE28 +:1018C00003C5D1C28D450505EFE01F83A386A1C2E4 +:1018D000E54513057041EFE01FA48247A1C303C78C +:1018E000D1C211EF03C541C099450505EFE0DF8086 +:1018F0002382A1C0930580021305003731A88547D4 +:101900006319F70E83C761C09305C0031305C03D7B +:1019100093B717002383F1C0EFE0FF9FEFF06FB2A2 +:101920008965938585BA0145EFE0FFE18546130699 +:101930000008A9450145EFE0BFE68965938585BBB1 +:101940008800EFE03F9603C741C089679387C7745B +:101950000A07BA978C43EFE0FF94896523000500DE +:10196000938545BC13051105EFE0DF9383C761C084 +:10197000C9C78965938505AEEFE0DF9289652300CD +:1019800005009385C5BC13052106EFE0BF91230038 +:101990000500C5440144938714003EC083C2D1C2F0 +:1019A0001373F40F631E53000547A946130600087E +:1019B000A685014516C21AC0EFE09F8092420243FD +:1019C00013164400B306534022969C0093851400DE +:1019D000B336D0003E961145EFE01F84B1041307E3 +:1019E00050030504E399E4FA8965938545BD6FF0DA +:1019F0006FF6238BF1C2F94501B78965938585AEF2 +:101A0000A5BF824799CF9305000513053029238B85 +:101A100001C2EFE05F90930580071305C03DEFE042 +:101A20009F8FEFF00FA2130700020966BA86130614 +:101A30004676894513050003EFE01FF8138781C43C +:101A40008346D7000947138481C4639FE6028965F2 +:101A50009385C5AE13054002EFE0FFCE89659385FF +:101A600085BE8800EFE01F848345B400EFE0BF84AB +:101A7000230005008C001305E002EFE0DFCC896550 +:101A8000938585BF6FF00FED89659385C5AFD9B795 +:101A9000239501C2EFE09FA7E9BB61113EC0B707E4 +:101AA00001403AC29387074013071006D8CB054779 +:101AB000A38AE1C2124782472101730020306111DD +:101AC0003AC23EC07957B70700402398E700054760 +:101AD000238AE1C2124782472101730020300000AF +:101AE0004F6E0000000000004F6666002A2A204367 +:101AF0004F52525550544544202A2A0053454746D8 +:101B000041554C5420283131290000007072657312 +:101B10007320616E79206B65790000007E2024209F +:101B200061646F7074202D2D706574003C2000007E +:101B3000203E00004C2F52207069636B20204F4BD9 +:101B400020676F00210000007A0000005A000000AA +:101B50003E3E2065766F6C76696E67005B20000004 +:101B6000205D00007E2F70657420242073746174E2 +:101B700000000000464F4F44000000004841505014 +:101B800059000000454E455247590000434C45411D +:101B90004E0000004845414C544800002020787019 +:101BA000200000004D4158002D2053455454494E0B +:101BB0004753202D0000000053637265656E206F4F +:101BC00066663A00536F756E643A20004261636B3B +:101BD000000000004C2F52206D6F766520204F4B87 +:101BE0002075736500000000636F72652064756D79 +:101BF000706564204C0000004F4B3A207265737092 +:101C000061776E0070616E61676F746368692076DA +:101C100032000000626F6F74696E67206B65726ED0 +:101C2000656C2E2E000000006D6F756E74202F7095 +:101C3000657420206F6B0000737061776E2073688D +:101C4000656C6C20206F6B003E202E2F74616D61DF +:101C5000676F746368695F005368656C6C000000AF +:101C600050616E6B6F000000546D757800000000CD +:101C700070726F63000000007573657200000000F1 +:101C8000726F6F7400000000436C61756465000042 +:101C9000676C6974636800004645454400000000B5 +:101CA000504C415900000000534C45455000000085 +:101CB0004845414C0000000053544154530000007B +:101CC00053455454494E47530000000035730000FB +:101CD00031307300313573003330730036307300A8 +:101CE000361000005A1100003E170000021A0000D2 +:101CF0009E180000B811000020120000DA15000044 +:101D0000FC15000042160000841600009416000026 +:101D10000000000000000000000000001FFFFFF8AE +:101D20003FFFFFFC3FFF7FFC3FFF7FFC3FFF7FFC4F +:101D30003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFCBF +:101D40003FFF7FFC3C07701C3FFF7FFC3FFF7FFC99 +:101D50003FFF7FFC3FFF7FFC3FFF7FFC3FFF7FFC9F +:101D60003FFF7FFC3FFF7FFC3FFF7FFC3FFFFFFC0F +:101D70002000000427DF000427DF00042000000407 +:101D80001FFFFFF80000000000000000000000003E +:101D90000000000000000000000000001FFFFFF82E +:101DA0003FFFFFFC3FFF7FFC3FFF7FFC3FFF7FFCCF +:101DB0003FFF7FFC3FFF7FFC3FFF7FFC3FBF7EFC80 +:101DC0003F1F7C7C3E0F783C3F1F7C7C3FBF7EFCEE +:101DD0003FFF7FFC3FFF7FFC3FFF7FFC3FBF7EFC60 +:101DE0003C07701C3FFF7FFC3FFF7FFC3FFFFFFC79 +:101DF0002000000427DF000427DF00042000000487 +:101E00001FFFFFF8000000000000000000000000BD +:101E10000000000000000000000000001FFFFFF8AD +:101E20003FFFFFFC3FFF7FFC3FFF7FFC3FFF7FFC4E +:101E30003FFF7FFC3FFF7FFC3FFF7FFC3F5F7D7CE0 +:101E40003EAF7ABC3FFF7FFC3FFF7FFC3FFF7FFC44 +:101E50003FFF7FFC3FFF7FFC3FFF7FFC3C03601C9C +:101E60003FFF7FFC3FFF7FFC3FFF7FFC3FFFFFFC0E +:101E70002000000427DF000427DF00042000000406 +:101E80001FFFFFF80000000000000000000000003D +:101E90000000000000000000000000001FFFFFF82D +:101EA0003FFFFFFC3FFF7FFC3FFF7FFC3FFF7FFCCE +:101EB0003FFF7FFC3FFF7FFC3FBF7EFC3F1F7C7CE2 +:101EC0003E0F783C3F1F7C7C3FBF7EFC3FFF7FFC8A +:101ED0003FFF7FFC3FFF7FFC3C07701C3FFF7FFC08 +:101EE0003FFF7FFC3FFF7FFC3FFF7FFC3FFFFFFC8E +:101EF0002000000427DF000427DF00042000000486 +:101F00001FFFFFF8000000000000000000000000BC +:101F100000008000001088000011880000318C0053 +:101F20000039DC00003BDC00007FFE00007FFE008B +:101F300000F83F0000E7C70000DFFB0001BFFD80A5 +:101F400001FFFF8003FFFFC003FFFFC003DBDBC017 +:101F500003E7E7C003E7E7C003DBDBC001FDDF8089 +:101F600001FABF8000F77F00007FFE0001FFFFC085 +:101F700001FFFFC003FFFFE003FFFFE003FFFFE0FF +:101F800007FFFFF007FFFFF00FFFFFF80FFFFFF85D +:101F90000000800000108800001188F000318C20C3 +:101FA0000039DC40003BDCF0007FFE00007FFE00DB +:101FB00000F83F0000E7C70000DFFB0001BFFD8025 +:101FC00001FFFF8003FFFFC003FFFFC003FFFFC04F +:101FD00003C3C3C003FFFFC003FFFFC001FFFF80B7 +:101FE00001FE7F8000FFFF00007FFE0001FFFFC0B9 +:101FF00001FFFFC003FFFFE003FFFFE003FFFFE07F +:1020000007FFFFF007FFFFF00FFFFFF80FFFFFF8DC +:1020100000008000001088000011880000318C0052 +:102020000039DC00003BDC00007FFE00007FFE008A +:1020300000F83F0000E7C70000DFFB0001BFFD80A4 +:1020400001FFFF8003FFFFC003FFFFC003E7E7C0FE +:1020500003E7E7C003FFFFC003FFFFC001FC3F80B1 +:1020600001FD3F8000FCBF00007C3E0001FFFFC07F +:1020700001FFFFC003FFFFE003FFFFE003FFFFE0FE +:1020800007FFFFF007FFFFF00FFFFFF80FFFFFF85C +:1020900000008000001088000011880000318C00D2 +:1020A0000039DC00003BDC00007FFE00007FFE000A +:1020B00000F83F0000E7C70000DFFB0001BFFD8024 +:1020C00001FFFF80039FF9C003E7E7C003FFFFC0E4 +:1020D00003E7E7C003E7E7C003FFFFC001FFFF809E +:1020E00001FFFF8000FC3F00007BDE0001F7EFC036 +:1020F00001FFFFC003FFFFE003FFFFE003FFFFE07E +:1021000007FFFFF007FFFFF00FFFFFF80FFFFFF8DB +:1021100000008000001088000011880000318C0051 +:102120000039DC00003BDC00007FFE00007FFE0089 +:1021300000F83F0000E7C70000DFFB0001BFFD80A3 +:1021400001FFFF8003FFFFC003FFFFC003EFF7C0E5 +:1021500003E7EBC003DBDBC003FFFFC001FFFF8031 +:1021600001F7EF8000F7EF00007BDE0001FC3FC0CD +:1021700001FFFFC003FFFFE003FFFFE003FFFFE0FD +:1021800007FFFFF007FFFFF00FFFFFF80FFFFFF85B +:1021900000008000001088000011880000318C00D1 +:1021A0000039DC00003BDC00007FFE00007FFE0009 +:1021B00000F83F0000E7C70000DFFB0001BFFD8023 +:1021C00001FFFF8003FFFFC003FFFFC003FFFFC04D +:1021D00003C3C3C003FFFFC003FFFFC001FFFF80B5 +:1021E00001FC3F8000FFFF00007FFE0001FFFFC0F9 +:1021F00001FFFFC003FFFFE003FFFFE003FFFFE07D +:1022000007FFFFF007FFFFF00FFFFFF80FFFFFF8DA +:1022100000008000001088000011880000318C0050 +:102220000039DC00003BDC00007FFE00007FFE0088 +:1022300000F83F0000E7C70000DFFB0001BFFD80A2 +:1022400001FFFF8003FFFFC003FFFFC003E7E7C0FC +:1022500003E7E7C003FFFFC003FFFFC001FFFF80EC +:1022600001FC3F8000FFFF00007FFE0001FFFFC078 +:1022700001FFFFC003FFFFE003FFFFE003FFFFE0FC +:1022800007FFFFF007FFFFF00FFFFFF80FFFFFF85A +:1022900000000000000000000000000007FFFFE059 +:1022A0000FFFFFF00FFFFFF00FFFFFF00FFFFFF03A +:1022B0000FFFFFF00FFFFFF00FFFFFF00FFFFFF02A +:1022C0000F0180F00FFFFFF00FFFFFF00FFFFFF097 +:1022D0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00A +:1022E0000FF80FF00FFFFFF00FFFFFF00FFFFFF0F1 +:1022F0000FFFFFF007FFFFE00007E0000007E0002E +:102300000007E000007FFE00007FFE00007FFE006F +:1023100000000000000000000000000007FFFFE0D8 +:102320000FFFFFF00FFFFFF00FFFFFF00FFFFFF0B9 +:102330000FFFFFF00FFFFFF00FEFF7F00FC7E3F015 +:102340000F83C1F00FC7E3F00FEFF7F00FFFFFF0BF +:102350000FFFFFF00FFFFFF00FFFFFF00FFFFFF089 +:102360000FFFFFF00FFFFFF00FF81FF00FC7E3F0B4 +:102370000FFFFFF007FFFFE00007E0000007E000AD +:102380000007E000007FFE00007FFE00007FFE00EF +:1023900000000000000000000000000007FFFFE058 +:1023A0000FFFFFF00FFFFFF00FFFFFF00FFFFFF039 +:1023B0000FFFFFF00FFFFFF00FDFEFF00FAFD7F0D1 +:1023C0000FFFFFF00FFFFFF00FFFFFF00FFFFFF019 +:1023D0000FFFFFF00FFFFFF00FFFFFF00FC7E3F05D +:1023E0000FF81FF00FFFFFF00FFFFFF00FFFFFF0E0 +:1023F0000FFFFFF007FFFFE00007E0000007E0002D +:102400000007E000007FFE00007FFE00007FFE006E +:1024100000000000000000000000000007FFFFE0D7 +:102420000FFFFFF00FFFFFF00FFFFFF00FFFFFF0B8 +:102430000FFFFFF00FEFF7F00FC7E3F00F83C1F0CE +:102440000FC7E3F00FEFF7F00FFFFFF00FFFFFF004 +:102450000FFFFFF00FFFFFF00F7FFFF00FBFFFF048 +:102460000FDFFFF00FBFFFF00F780FF00FFFFFF04F +:102470000FFFFFF007FFFFE00007E0000007E000AC +:102480000007E000007FFE00007FFE00007FFE00EE +:1024900003C003C003C007F00FF81FFCFF7FFE3F1F +:1024A000FC1FFE3F1F7C1FFC0FF807F003C003C09A +:1024B00000000000000000C000C000C006C006C050 +:1024C00006D806D836D836D836D836D80000000018 +:1024D0000000008007F00FF81C3C3C3E300E300E30 +:1024E000700F300E3C3E3C3E1FFC0FF807F00080A2 +:1024F000000000000080008001C001C007F00DF85E +:102500000DF808F81DFC0DF80FF80FF807F0008023 +:1025100000000000000004000C001C0018001C005B +:102520003C001C001E001F000FE807F000800000A8 +:1025300000000000077000001F7C3F7E3F7E3F7E52 +:1025400000003F7E3F7E3F7E1F7C00000770000042 +:102550000000000000A001900FE01BF03BF831F8F4 +:102560003BF87BFC3FF83FF83FF81FF00FE001001D +:10257000AED580A83FD300408D142000A1C8DA1248 +:10258000818FD9F1DB40A4A6AFFF0000041C00003E +:10259000141C0000281C0000381C0000481C00000F +:1025A000581C0000601C0000681C000000000000B7 +:1025B0000000000000000000000000000000000219 +:1025C000000000000000000000000000800080000B +:1025D000000FF8000015540000FFFF8001FFFFC04E +:1025E00003FFFFE00111444107D7F5F007EFFBF0CF +:1025F00007D7F5F0051144500FFFFFF807FFFFF074 +:1026000007FFFFF00555555007EAABF043FFFFE029 +:1026100003FFFFE00155554000FFFF80003FFE0033 +:10262000000FF8042000000000000000000000007F +:10263000000000000000002000000020040000A8AE +:102640000E000020040003FE00000020000080A80F +:10265000000FF820003FFE20007FFF0000FFFF80FA +:1026600001FFFFC001FFFFC003FFFFE003F7F7E03A +:1026700003F7F7E003E3E3E007F7F7F003F7F7E02A +:1026800003FFFFE003FFFFE003E7F3E001F80FC003 +:1026900001FFFFC000FFFF80007FFF00003FFE0042 +:1026A000000FF8000000800000000000102400006F +:1026B000102400009023000010230000902300004D +:1026C0009022000010230000102200009021000042 +:1026D000102100009020000010200000901F00003A +:1026E000101F0000901E0000901E0000101E000031 +:1026F000901D0000101E0000101D0000901D000025 +:10270000502500003025000010250000F0240000B6 +:10271000D0240000B024000090240000701C0000B1 +:10272000781C0000801C0000881C0000901C000029 +:10273000981C0000A01C0000A81C00008C1B0000BE +:10274000B01C0000B81C0000C01C0000CC1C000025 +:10275000D01C0000D41C0000D81C0000DC1C0000B1 +:10276000E81A0000000000000000000000FFFC006C +:1027700003FFFF0007FFFF80061FE1800630318066 +:1027800006303180063FC300063303000631830064 +:102790000630C30006000600060F060007FFFF8094 +:1027A0000FFFFFC01FFFFFE03FFFFFF07FFFFFF8BD +:1027B000FFFFFFFCFFFFFFFC00F0F00003FFF00055 +:1027C0000FFFFC00000000000000000000000000FF +:1027D00000000000000000000000000000000000F9 +:1027E000000000005300A700FA00F401E803000015 +:1027F00000000000000000007E81A581BD99817E5F +:102800007EFFDBFFC3E7FF7E6CFEFEFE7C38100020 +:1028100010387CFE7C381000387C38FEFED610382C +:1028200010387CFEFE7C10380000183C3C1800007C +:10283000FFFFE7C3C3E7FFFF003C664242663C0080 +:10284000FFC399BDBD99C3FF0F070F7DCCCCCC78DA +:102850003C6666663C187E183F333F303070F0E0CF +:102860007F637F636367E6C018DB3CE7E73CDB1808 +:1028700080E0F8FEF8E08000020E3EFE3E0E020010 +:10288000183C7E18187E3C18666666666600660010 +:102890007FDBDB7B1B1B1B003E613C66663C867C52 +:1028A000000000007E7E7E00183C7E187E3C18FFF3 +:1028B000183C7E1818181800181818187E3C1800B4 +:1028C00000180CFE0C180000003060FE60300000A4 +:1028D0000000C0C0C0FE0000002466FF66240000A7 +:1028E00000183C7EFFFF000000FFFF7E3C18000048 +:1028F0000000000000000000183C3C181800180000 +:1029000066662400000000006C6CFE6CFE6C6C00BF +:10291000183E603C067C180000C6CC183066C60025 +:10292000386C3876DCCC76001818300000000000D7 +:102930000C18303030180C0030180C0C0C1830000B +:1029400000663CFF3C6600000018187E1818000066 +:1029500000000000001818300000007E0000000099 +:102960000000000000181800060C183060C080003D +:10297000386CC6D6C66C38001838181818187E007F +:102980007CC6061C3066FE007CC6063C06C67C0083 +:102990001C3C6CCCFE0C1E00FEC0C0FC06C67C00BD +:1029A0003860C0FCC6C67C00FEC60C183030300053 +:1029B0007CC6C67CC6C67C007CC6C67E060C78007B +:1029C0000018180000181800001818000018183017 +:1029D000060C1830180C060000007E00007E000077 +:1029E0006030180C183060007CC60C1818001800F5 +:1029F0007CC6DEDEDEC07800386CC6FEC6C6C60009 +:102A0000FC66667C6666FC003C66C0C0C0663C0036 +:102A1000F86C6666666CF800FE6268786862FE00B4 +:102A2000FE6268786860F0003C66C0C0CE663A001E +:102A3000C6C6C6FEC6C6C6003C18181818183C0004 +:102A40001E0C0C0CCCCC7800E6666C786C66E6004C +:102A5000F06060606266FE00C6EEFEFED6C6C6008E +:102A6000C6E6F6DECEC6C6007CC6C6C6C6C67C00B6 +:102A7000FC66667C6060F0007CC6C6C6C6CE7C0E76 +:102A8000FC66667C6C66E6003C6630180C663C00B2 +:102A90007E7E5A1818183C00C6C6C6C6C6C67C003C +:102AA000C6C6C6C6C66C3800C6C6C6D6D6FE6C003C +:102AB000C6C66C386CC6C6006666663C18183C0014 +:102AC000FEC68C183266FE003C30303030303C00A0 +:102AD000C06030180C0602003C0C0C0C0C0C3C00C6 +:102AE00010386CC60000000000000000000000FF6D +:102AF00030180C00000000000000780C7CCC760040 +:102B0000E0607C666666DC0000007CC6C0C67C00B7 +:102B10001C0C7CCCCCCC760000007CC6FEC07C00BB +:102B20003C6660F86060F000000076CCCC7C0CF86D +:102B3000E0606C766666E6001800381818183C00ED +:102B4000060006060666663CE060666C786CE60089 +:102B50003818181818183C000000ECFED6D6D6001D +:102B60000000DC666666660000007CC6C6C67C00A7 +:102B70000000DC66667C60F0000076CCCC7C0C1E2D +:102B80000000DC766060F00000007EC07C06FC0087 +:102B90003030FC3030361C000000CCCCCCCC760081 +:102BA0000000C6C6C66C38000000C6D6D6FE6C0053 +:102BB0000000C66C386CC6000000C6C6C67E06FCA7 +:102BC00000007E4C18327E000E18187018180E0087 +:102BD00018181818181818007018180E18187000FF +:102BE00076DC0000000000000010386CC6C6FE0055 +:102BF0007CC6C0C0C67C0C78CC00CCCCCCCC7600DB +:102C00000C187CC6FEC07C007C82780C7CCC7600E4 +:102C1000C600780C7CCC76003018780C7CCC760022 +:102C20003030780C7CCC760000007EC0C07E0C3842 +:102C30007C827CC6FEC07C00C6007CC6FEC07C00D8 +:102C400030187CC6FEC07C006600381818183C009E +:102C50007C82381818183C003018003818183C00CE +:102C6000C6386CC6FEC6C600386C7CC6FEC6C6003A +:102C70001830FEC0F8C0FE0000007E187ED87E002E +:102C80003E6CCCFECCCCCE007C827CC6C6C67C0022 +:102C9000C6007CC6C6C67C0030187CC6C6C67C0092 +:102CA000788400CCCCCC76006030CCCCCCCC760018 +:102CB000C600C6C6C67E06FCC6386CC6C66C3800E2 +:102CC000C600C6C6C6C67C0018187EC0C07E1818CE +:102CD000386C64F06066FC0066663C7E187E1818EE +:102CE000F8CCCCFAC6CFC6C70E1B183C18D870005B +:102CF0001830780C7CCC76000C18003818183C0082 +:102D00000C187CC6C6C67C001830CCCCCCCC760067 +:102D100076DC00DC6666660076DC00E6F6DECE0079 +:102D20003C6C6C3E007E0000386C6C38007C00000F +:102D30001800181830633E00000000FEC0C00000FC +:102D4000000000FE0606000063E66C7E3366CC0FD2 +:102D500063E66C7A366ADF06180018183C3C1800E7 +:102D6000003366CC6633000000CC663366CC0000CE +:102D7000228822882288228855AA55AA55AA55AAAF +:102D800077DD77DD77DD77DD181818181818181833 +:102D900018181818F81818181818F818F818181813 +:102DA00036363636F636363600000000FE36363613 +:102DB0000000F818F81818183636F606F6363636C3 +:102DC00036363636363636360000FE06F6363636B7 +:102DD0003636F606FE00000036363636FE000000B7 +:102DE0001818F818F800000000000000F81818186B +:102DF000181818181F00000018181818FF000000F5 +:102E000000000000FF181818181818181F181818B4 +:102E100000000000FF00000018181818FF1818180C +:102E200018181F181F181818363636363736363623 +:102E3000363637303F00000000003F303736363638 +:102E40003636F700FF0000000000FF00F736363688 +:102E500036363730373636360000FF00FF000000C8 +:102E60003636F700F73636361818FF00FF00000038 +:102E700036363636FF0000000000FF00FF18181835 +:102E800000000000FF363636363636363F0000008A +:102E900018181F181F00000000001F181F1818180E +:102EA000000000003F36363636363636FF363636C8 +:102EB0001818FF18FF18181818181818F80000002C +:102EC000000000001F181818FFFFFFFFFFFFFFFFA3 +:102ED00000000000FFFFFFFFF0F0F0F0F0F0F0F076 +:102EE0000F0F0F0F0F0F0F0FFFFFFFFF000000006E +:102EF000000076DCC8DC760078CCCCD8CCC6CC0020 +:102F0000FEC6C0C0C0C0C0000000FE6C6C6C6C008F +:102F1000FEC6603060C6FE0000007ED8D8D87000C3 +:102F20000000666666667CC00076DC18181818001B +:102F30007E183C66663C187E386CC6FEC66C38004F +:102F4000386CC6C66C6CEE000E180C3E66663C0013 +:102F500000007EDBDB7E0000060C7EDBDB7E60C0DB +:102F60001E30607E60301E00007CC6C6C6C6C6002D +:102F700000FE00FE00FE000018187E1818007E00FB +:102F800030180C1830007E000C1830180C007E0031 +:102F90000E1B1B18181818181818181818D8D870DD +:102FA0000018007E001800000076DC0076DC0000CF +:102FB000386C6C3800000000000000181800000099 +:102FC00000000018000000000F0C0C0CEC6C3C1C06 +:102FD0006C36363636000000780C18307C00000065 +:102FE00000003C3C3C3C00000000000000000000F1 +:102FF0000101010000000000141517000B0B09006F +:103000000B110C0000183C6C7EFFFF0000002D002F +:043010007800F00054 :00000001FF diff --git a/tama.lst b/tama.lst index bd67310..c2a737f 100644 --- a/tama.lst +++ b/tama.lst @@ -11,38 +11,38 @@ Disassembly of section .init: { #if !defined(FUNCONF_TINYVECTOR) || !FUNCONF_TINYVECTOR asm volatile( DEFAULT_INTERRUPT_VECTOR_CONTENTS ); - 0: 16d0006f j 96c + 0: 3af0006f j bae 4: 00000000 .word 0x00000000 - 8: 000009e0 .word 0x000009e0 - c: 000009de .word 0x000009de + 8: 00000c22 .word 0x00000c22 + c: 00000c20 .word 0x00000c20 ... - 30: 000009de .word 0x000009de + 30: 00000c20 .word 0x00000c20 34: 00000000 .word 0x00000000 - 38: 000009de .word 0x000009de + 38: 00000c20 .word 0x00000c20 3c: 00000000 .word 0x00000000 - 40: 000009de .word 0x000009de - 44: 000009de .word 0x000009de - 48: 000009de .word 0x000009de - 4c: 000009de .word 0x000009de - 50: 000009de .word 0x000009de - 54: 000009de .word 0x000009de - 58: 000009de .word 0x000009de - 5c: 000009de .word 0x000009de - 60: 000009de .word 0x000009de - 64: 000009de .word 0x000009de - 68: 000009de .word 0x000009de - 6c: 000009de .word 0x000009de - 70: 000009de .word 0x000009de - 74: 000009de .word 0x000009de - 78: 000009de .word 0x000009de - 7c: 000009de .word 0x000009de - 80: 000009de .word 0x000009de - 84: 000009de .word 0x000009de - 88: 000009de .word 0x000009de - 8c: 000009de .word 0x000009de - 90: 000009de .word 0x000009de - 94: 000009de .word 0x000009de - 98: 000009de .word 0x000009de + 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 ... @@ -149,7 +149,7 @@ void ssd1306_i2c_setup(void) 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 + 154: fc068693 addi a3,a3,-64 # ffc0 158: 8f75 and a4,a4,a3 tempreg |= (FUNCONF_SYSTEM_CORE_CLOCK/SSD1306_I2C_PRERATE)&I2C_CTLR2_FREQ; 15a: 01876713 ori a4,a4,24 @@ -206,7 +206,7 @@ void ssd1306_drawPixel(uint32_t x, uint32_t y, int color) /* set/clear bit in buffer */ if(color) ssd1306_buffer[addr] |= (1<<(y&7)); - 19c: c6818513 addi a0,gp,-920 # 20000064 + 19c: c5c18513 addi a0,gp,-932 # 20000058 1a0: 953e add a0,a0,a5 1a2: 899d andi a1,a1,7 1a4: 4705 li a4,1 @@ -315,7 +315,7 @@ void ssd1306_drawstr(int x, int y, const char *str, uint8_t color) 234: 00339793 slli a5,t2,0x3 238: 6609 lui a2,0x2 23a: 97ba add a5,a5,a4 - 23c: 67060613 addi a2,a2,1648 # 2670 + 23c: 7f060613 addi a2,a2,2032 # 27f0 240: 97b2 add a5,a5,a2 242: 0007c303 lbu t1,0(a5) 246: 4781 li a5,0 @@ -454,7 +454,7 @@ static void beep(uint16_t freq, uint16_t ms) 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 + 328: 12050513 addi a0,a0,288 # 7a120 { 32c: c806 sw ra,16(sp) 32e: c426 sw s1,8(sp) @@ -532,7 +532,7 @@ static void led_blink(void) funDigitalWrite(LED_PIN, FUN_HIGH); 39a: c81c sw a5,16(s0) Delay_Ms(30); - 39c: f2050513 addi a0,a0,-224 # 2bf20 + 39c: f2050513 addi a0,a0,-224 # 2bf20 3a0: 3bbd jal 11e funDigitalWrite(LED_PIN, FUN_LOW); 3a2: 000207b7 lui a5,0x20 @@ -552,14 +552,14 @@ static void led_blink(void) static void add_xp(uint8_t n) { if (!pet.alive) return; - 3b0: c5418713 addi a4,gp,-940 # 20000050 + 3b0: c4818713 addi a4,gp,-952 # 20000044 3b4: 01074703 lbu a4,16(a4) 3b8: c371 beqz a4,47c - 3ba: c5418793 addi a5,gp,-940 # 20000050 + 3ba: c4818793 addi a5,gp,-952 # 20000044 if (pet.xp < 60000) pet.xp += n; - 3be: 0087d683 lhu a3,8(a5) # 20008 + 3be: 0087d683 lhu a3,8(a5) # 20008 3c2: 673d lui a4,0xf - 3c4: a5f70713 addi a4,a4,-1441 # ea5f + 3c4: a5f70713 addi a4,a4,-1441 # ea5f 3c8: 02d76663 bltu a4,a3,3f4 3cc: 9536 add a0,a0,a3 3ce: 0542 slli a0,a0,0x10 @@ -618,7 +618,7 @@ static void add_xp(uint8_t n) 43c: 03c00593 li a1,60 440: 31000513 li a0,784 evo_anim = 30; // ~1.8 s celebratory banner - 444: c4e18823 sb a4,-944(gp) # 2000004c + 444: c4e18223 sb a4,-956(gp) # 20000040 beep(784, 60); beep(988, 60); beep(1175, 60); beep(1568, 140); 448: 35f9 jal 316 44a: 03c00593 li a1,60 @@ -664,7 +664,7 @@ static void notify(uint8_t idx, int8_t val) { 488: 87aa mv a5,a0 if (val < 20) { - 48a: c4c18413 addi s0,gp,-948 # 20000048 + 48a: c4018413 addi s0,gp,-960 # 2000003c 48e: 04b74463 blt a4,a1,4d6 if (!crit_flag[idx]) { // urgent: descending triple 492: 942a add s0,s0,a0 @@ -683,7 +683,7 @@ static void notify(uint8_t idx, int8_t val) 4b8: 3db9 jal 316 crit_flag[idx] = 1; warn_flag[idx] = 1; 4ba: 4782 lw a5,0(sp) - 4bc: c4818713 addi a4,gp,-952 # 20000044 + 4bc: c3c18713 addi a4,gp,-964 # 20000038 4c0: 4685 li a3,1 4c2: 97ba add a5,a5,a4 4c4: 00d40023 sb a3,0(s0) @@ -700,7 +700,7 @@ static void notify(uint8_t idx, int8_t val) 4d2: 0141 addi sp,sp,16 4d4: 8082 ret } else if (val < 50) { - 4d6: c4818493 addi s1,gp,-952 # 20000044 + 4d6: c3c18493 addi s1,gp,-964 # 20000038 4da: 03100713 li a4,49 if (!warn_flag[idx]) { // gentle: single chirp 4de: 94aa add s1,s1,a0 @@ -727,3137 +727,3388 @@ static void notify(uint8_t idx, int8_t val) 506: 00048023 sb zero,0(s1) 50a: bfd5 j 4fe -0000050c : +0000050c : +} + +// ----------------------------------------------------------------- game tick +static void game_tick(void) +{ + pet.age_min++; + 50c: c4818793 addi a5,gp,-952 # 20000044 + 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 + 53a: 08e7d663 bge a5,a4,5c6 + 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 + pet.energy = clamp100(pet.energy + 6); + 546: 00668793 addi a5,a3,6 # 40006 +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 + 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 + 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 + 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 + 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 + 592: 4689 li a3,2 + 594: 0066ed63 bltu a3,t1,5ae + ((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 + 5a2: 96ae add a3,a3,a1 + 5a4: 8afd andi a3,a3,31 + if (!pet.sleeping && pet.poop < 3 && + 5a6: e6d1 bnez a3,632 + 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 + 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 + 5be: 86ae mv a3,a1 + 5c0: 00d400a3 sb a3,1(s0) + 5c4: a88d j 636 + 5c6: fff74793 not a5,a4 + 5ca: 87fd srai a5,a5,0x1f + 5cc: 8f7d and a4,a4,a5 + 5ce: bf8d j 540 + 5d0: fff7c513 not a0,a5 + 5d4: 857d srai a0,a0,0x1f + 5d6: 8fe9 and a5,a5,a0 + 5d8: bfb5 j 554 + 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 + 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 +static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } + 604: 00d55b63 bge a0,a3,61a + 608: 86aa mv a3,a0 + 60a: 00d300a3 sb a3,1(t1) + 60e: b795 j 572 + 610: fff7c693 not a3,a5 + 614: 86fd srai a3,a3,0x1f + 616: 8ff5 and a5,a5,a3 + 618: bfe1 j 5f0 + 61a: fff6c513 not a0,a3 + 61e: 857d srai a0,a0,0x1f + 620: 8ee9 and a3,a3,a0 + 622: b7e5 j 60a + 624: fff6c313 not t1,a3 + 628: 41f35313 srai t1,t1,0x1f + 62c: 0066f6b3 and a3,a3,t1 + 630: bfa1 j 588 + if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); + 632: f6031ee3 bnez t1,5ae + 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 + 640: c919 beqz a0,656 + 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 + 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 + 664: 869a mv a3,t1 + 666: 01869593 slli a1,a3,0x18 + 66a: 85e1 srai a1,a1,0x18 + 66c: 00b7d363 bge a5,a1,672 + 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 + 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 + 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 + 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(N_FUN, pet.happy); + 6a8: 00140583 lb a1,1(s0) + 6ac: 4505 li a0,1 + 6ae: 3bc1 jal 47e + notify(N_ENGY, pet.energy); + 6b0: 00240583 lb a1,2(s0) + 6b4: 4509 li a0,2 + 6b6: 33e1 jal 47e + notify(N_WASH, pet.hygiene); + 6b8: 00340583 lb a1,3(s0) + 6bc: 450d li a0,3 + 6be: 33c1 jal 47e + // 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 + 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 + beep(330, 200); beep(247, 200); beep(165, 400); + 6da: 3935 jal 316 + 6dc: 0c800593 li a1,200 + 6e0: 0f700513 li a0,247 + 6e4: 390d jal 316 } } + 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 +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 + 700: fff6c593 not a1,a3 + 704: 85fd srai a1,a1,0x1f + 706: 8eed and a3,a3,a1 + 708: b7a9 j 652 + 70a: fff7c713 not a4,a5 + 70e: 877d srai a4,a4,0x1f + 710: 8ff9 and a5,a5,a4 + 712: b769 j 69c + else if (lo > 50) pet.health = clamp100(pet.health + 2); + 714: 03200693 li a3,50 + 718: f8e6d4e3 bge a3,a4,6a0 + 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 + 726: 87ba mv a5,a4 + 728: 00f40223 sb a5,4(s0) + if (lo > 50 && !pet.sleeping) add_xp(3); + 72c: fa35 bnez a2,6a0 + 72e: 450d li a0,3 + 730: 3141 jal 3b0 + 732: b7bd j 6a0 +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 +} + 73e: 4092 lw ra,4(sp) + 740: 4402 lw s0,0(sp) + 742: 0121 addi sp,sp,8 + 744: 8082 ret + +00000746 : // ----------------------------------------------------------------- drawing static void draw_center_str(int y, const char *s) { - 50c: 862e mv a2,a1 + 746: 862e mv a2,a1 int len = 0; - 50e: 4701 li a4,0 + 748: 4701 li a4,0 while (s[len]) len++; - 510: 00e607b3 add a5,a2,a4 - 514: 0007c783 lbu a5,0(a5) - 518: ef81 bnez a5,530 + 74a: 00e607b3 add a5,a2,a4 + 74e: 0007c783 lbu a5,0(a5) + 752: ef81 bnez a5,76a int x = (SSD1306_W - len * 8) / 2; - 51a: 47c1 li a5,16 - 51c: 8f99 sub a5,a5,a4 - 51e: 078a slli a5,a5,0x2 + 754: 47c1 li a5,16 + 756: 8f99 sub a5,a5,a4 + 758: 078a slli a5,a5,0x2 if (x < 0) x = 0; - 520: fff7c713 not a4,a5 - 524: 877d srai a4,a4,0x1f + 75a: fff7c713 not a4,a5 + 75e: 877d srai a4,a4,0x1f ssd1306_drawstr(x, y, s, 1); - 526: 85aa mv a1,a0 - 528: 4685 li a3,1 - 52a: 00e7f533 and a0,a5,a4 - 52e: b1ed j 218 + 760: 85aa mv a1,a0 + 762: 4685 li a3,1 + 764: 00e7f533 and a0,a5,a4 + 768: bc45 j 218 while (s[len]) len++; - 530: 0705 addi a4,a4,1 - 532: bff9 j 510 + 76a: 0705 addi a4,a4,1 + 76c: bff9 j 74a -00000534 : +0000076e : static Buttons read_buttons(void) { // active-low: pressed reads 0 Buttons b; b.ok = !funDigitalRead(BTN_OK); - 534: 400117b7 lui a5,0x40011 - 538: 4788 lw a0,8(a5) + 76e: 400117b7 lui a5,0x40011 + 772: 4788 lw a0,8(a5) b.left = !funDigitalRead(BTN_LEFT); - 53a: 40078793 addi a5,a5,1024 # 40011400 <_eusrstack+0x20010c00> - 53e: 4798 lw a4,8(a5) + 774: 40078793 addi a5,a5,1024 # 40011400 <_eusrstack+0x20010c00> + 778: 4798 lw a4,8(a5) b.right = !funDigitalRead(BTN_RIGHT); - 540: 479c lw a5,8(a5) + 77a: 479c lw a5,8(a5) b.ok = !funDigitalRead(BTN_OK); - 542: fff54513 not a0,a0 + 77c: fff54513 not a0,a0 b.left = !funDigitalRead(BTN_LEFT); - 546: 8319 srli a4,a4,0x6 - 548: fff74713 not a4,a4 + 780: 8319 srli a4,a4,0x6 + 782: fff74713 not a4,a4 b.right = !funDigitalRead(BTN_RIGHT); - 54c: 8395 srli a5,a5,0x5 - 54e: fff7c793 not a5,a5 + 786: 8395 srli a5,a5,0x5 + 788: fff7c793 not a5,a5 return b; - 552: 8b05 andi a4,a4,1 - 554: 8905 andi a0,a0,1 - 556: 0722 slli a4,a4,0x8 - 558: 8b85 andi a5,a5,1 + 78c: 8b05 andi a4,a4,1 + 78e: 8905 andi a0,a0,1 + 790: 0722 slli a4,a4,0x8 + 792: 8b85 andi a5,a5,1 { - 55a: 1171 addi sp,sp,-4 + 794: 1171 addi sp,sp,-4 return b; - 55c: 07c2 slli a5,a5,0x10 - 55e: 8d59 or a0,a0,a4 + 796: 07c2 slli a5,a5,0x10 + 798: 8d59 or a0,a0,a4 } - 560: 8d5d or a0,a0,a5 - 562: 0111 addi sp,sp,4 - 564: 8082 ret + 79a: 8d5d or a0,a0,a5 + 79c: 0111 addi sp,sp,4 + 79e: 8082 ret -00000566 : +000007a0 : void ssd1306_drawFastHLine(uint32_t x, uint32_t y, uint32_t w, uint32_t color) - 566: 87b2 mv a5,a2 - 568: 1131 addi sp,sp,-20 + 7a0: 87b2 mv a5,a2 + 7a2: 1131 addi sp,sp,-20 if((x+w-1) >= SSD1306_W) w = SSD1306_W-x; - 56a: fff78713 addi a4,a5,-1 + 7a4: fff78713 addi a4,a5,-1 void ssd1306_drawFastHLine(uint32_t x, uint32_t y, uint32_t w, uint32_t color) - 56e: 8636 mv a2,a3 - 570: c806 sw ra,16(sp) - 572: c622 sw s0,12(sp) - 574: c426 sw s1,8(sp) + 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; - 576: 972a add a4,a4,a0 - 578: 07f00693 li a3,127 - 57c: 00e6f563 bgeu a3,a4,586 - 580: 08000793 li a5,128 - 584: 8f89 sub a5,a5,a0 - 586: 00f50433 add s0,a0,a5 + 7b0: 972a add a4,a4,a0 + 7b2: 07f00693 li a3,127 + 7b6: 00e6f563 bgeu a3,a4,7c0 + 7ba: 08000793 li a5,128 + 7be: 8f89 sub a5,a5,a0 + 7c0: 00f50433 add s0,a0,a5 while (w--) - 58a: 00851763 bne a0,s0,598 + 7c4: 00851763 bne a0,s0,7d2 } - 58e: 40c2 lw ra,16(sp) - 590: 4432 lw s0,12(sp) - 592: 44a2 lw s1,8(sp) - 594: 0151 addi sp,sp,20 - 596: 8082 ret + 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); - 598: 00150493 addi s1,a0,1 - 59c: c232 sw a2,4(sp) - 59e: c02e sw a1,0(sp) - 5a0: 36d5 jal 184 - 5a2: 4612 lw a2,4(sp) - 5a4: 4582 lw a1,0(sp) - 5a6: 8526 mv a0,s1 - 5a8: b7cd j 58a + 7d2: 00150493 addi s1,a0,1 + 7d6: c232 sw a2,4(sp) + 7d8: c02e sw a1,0(sp) + 7da: 326d jal 184 + 7dc: 4612 lw a2,4(sp) + 7de: 4582 lw a1,0(sp) + 7e0: 8526 mv a0,s1 + 7e2: b7cd j 7c4 -000005aa : +000007e4 : void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color) - 5aa: fd810113 addi sp,sp,-40 + 7e4: fd810113 addi sp,sp,-40 steep = (gfx_abs(y1 - y0) > gfx_abs(x1 - x0)); - 5ae: 40b68333 sub t1,a3,a1 + 7e8: 40b68333 sub t1,a3,a1 void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color) - 5b2: d022 sw s0,32(sp) - 5b4: 8436 mv s0,a3 + 7ec: d022 sw s0,32(sp) + 7ee: 8436 mv s0,a3 return (x<0) ? -x : x; - 5b6: 41f35693 srai a3,t1,0x1f - 5ba: 0066c333 xor t1,a3,t1 + 7f0: 41f35693 srai a3,t1,0x1f + 7f4: 0066c333 xor t1,a3,t1 steep = (gfx_abs(y1 - y0) > gfx_abs(x1 - x0)); - 5be: 40a602b3 sub t0,a2,a0 + 7f8: 40a602b3 sub t0,a2,a0 return (x<0) ? -x : x; - 5c2: 40d30333 sub t1,t1,a3 - 5c6: 41f2d693 srai a3,t0,0x1f - 5ca: 0056c2b3 xor t0,a3,t0 + 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) - 5ce: ce26 sw s1,28(sp) - 5d0: d206 sw ra,36(sp) + 808: ce26 sw s1,28(sp) + 80a: d206 sw ra,36(sp) return (x<0) ? -x : x; - 5d2: 40d282b3 sub t0,t0,a3 + 80c: 40d282b3 sub t0,t0,a3 void ssd1306_drawLine(int x0, int y0, int x1, int y1, uint32_t color) - 5d6: 84ae mv s1,a1 - 5d8: 87b2 mv a5,a2 + 810: 84ae mv s1,a1 + 812: 87b2 mv a5,a2 if(steep) - 5da: 0062c763 blt t0,t1,5e8 - 5de: 86a2 mv a3,s0 - 5e0: 84aa mv s1,a0 - 5e2: 8432 mv s0,a2 - 5e4: 87b6 mv a5,a3 - 5e6: 852e mv a0,a1 + 814: 0062c763 blt t0,t1,822 + 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) - 5e8: 00944863 blt s0,s1,5f8 - 5ec: 86be mv a3,a5 - 5ee: 87aa mv a5,a0 - 5f0: 8536 mv a0,a3 - 5f2: 86a2 mv a3,s0 - 5f4: 8426 mv s0,s1 - 5f6: 84b6 mv s1,a3 + 822: 00944863 blt s0,s1,832 + 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); - 5f8: 40f503b3 sub t2,a0,a5 + 832: 40f503b3 sub t2,a0,a5 return (x<0) ? -x : x; - 5fc: 41f3d693 srai a3,t2,0x1f + 836: 41f3d693 srai a3,t2,0x1f deltax = x1 - x0; - 600: 40848733 sub a4,s1,s0 + 83a: 40848733 sub a4,s1,s0 return (x<0) ? -x : x; - 604: 0076c3b3 xor t2,a3,t2 - 608: 40d383b3 sub t2,t2,a3 + 83e: 0076c3b3 xor t2,a3,t2 + 842: 40d383b3 sub t2,t2,a3 error = deltax/2; - 60c: 01f75693 srli a3,a4,0x1f - 610: 96ba add a3,a3,a4 + 846: 01f75693 srli a3,a4,0x1f + 84a: 96ba add a3,a3,a4 deltax = x1 - x0; - 612: c23a sw a4,4(sp) + 84c: c23a sw a4,4(sp) ystep = -1; - 614: 577d li a4,-1 - 616: c03a sw a4,0(sp) + 84e: 577d li a4,-1 + 850: c03a sw a4,0(sp) error = deltax/2; - 618: 8685 srai a3,a3,0x1 + 852: 8685 srai a3,a3,0x1 if(y0 < y1) - 61a: 00a7d463 bge a5,a0,622 + 854: 00a7d463 bge a5,a0,85c ystep = 1; - 61e: 4705 li a4,1 - 620: c03a sw a4,0(sp) + 858: 4705 li a4,1 + 85a: c03a sw a4,0(sp) for(x=x0;x<=x1;x++) - 622: 0084d863 bge s1,s0,632 + 85c: 0084d863 bge s1,s0,86c } - 626: 5092 lw ra,36(sp) - 628: 5402 lw s0,32(sp) - 62a: 44f2 lw s1,28(sp) - 62c: 02810113 addi sp,sp,40 - 630: 8082 ret - 632: cc36 sw a3,24(sp) - 634: ca1e sw t2,20(sp) - 636: c816 sw t0,16(sp) - 638: c61a sw t1,12(sp) + 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); - 63a: 4601 li a2,0 + 874: 4601 li a2,0 if(steep) - 63c: 0262d563 bge t0,t1,666 + 876: 0262d563 bge t0,t1,8a0 ssd1306_drawPixel(y, x, color); - 640: 853e mv a0,a5 - 642: 85a2 mv a1,s0 - 644: c43e sw a5,8(sp) - 646: 3e3d jal 184 - 648: 47a2 lw a5,8(sp) - 64a: 4332 lw t1,12(sp) - 64c: 42c2 lw t0,16(sp) - 64e: 43d2 lw t2,20(sp) - 650: 46e2 lw a3,24(sp) + 87a: 853e mv a0,a5 + 87c: 85a2 mv a1,s0 + 87e: c43e sw a5,8(sp) + 880: 3211 jal 184 + 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; - 652: 407686b3 sub a3,a3,t2 + 88c: 407686b3 sub a3,a3,t2 if(error < 0) - 656: 0006d663 bgez a3,662 + 890: 0006d663 bgez a3,89c y = y + ystep; - 65a: 4702 lw a4,0(sp) - 65c: 97ba add a5,a5,a4 + 894: 4702 lw a4,0(sp) + 896: 97ba add a5,a5,a4 error = error + deltax; - 65e: 4712 lw a4,4(sp) - 660: 96ba add a3,a3,a4 + 898: 4712 lw a4,4(sp) + 89a: 96ba add a3,a3,a4 for(x=x0;x<=x1;x++) - 662: 0405 addi s0,s0,1 - 664: bf7d j 622 + 89c: 0405 addi s0,s0,1 + 89e: bf7d j 85c ssd1306_drawPixel(x, y, color); - 666: 85be mv a1,a5 - 668: 8522 mv a0,s0 - 66a: c43e sw a5,8(sp) - 66c: 3e21 jal 184 - 66e: 46e2 lw a3,24(sp) - 670: 43d2 lw t2,20(sp) - 672: 42c2 lw t0,16(sp) - 674: 4332 lw t1,12(sp) - 676: 47a2 lw a5,8(sp) - 678: bfe9 j 652 + 8a0: 85be mv a1,a5 + 8a2: 8522 mv a0,s0 + 8a4: c43e sw a5,8(sp) + 8a6: 38f9 jal 184 + 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 -0000067a : +000008b4 : if((x >= SSD1306_W) || (y >= SSD1306_H)) return; - 67a: 07f00793 li a5,127 - 67e: 02a7cf63 blt a5,a0,6bc + 8b4: 07f00793 li a5,127 + 8b8: 04a7c063 blt a5,a0,8f8 void ssd1306_drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color) - 682: 1141 addi sp,sp,-16 - 684: c422 sw s0,8(sp) - 686: c606 sw ra,12(sp) - 688: c226 sw s1,4(sp) + 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; - 68a: 00c587b3 add a5,a1,a2 - 68e: 04000713 li a4,64 - 692: 842e mv s0,a1 - 694: 00f75463 bge a4,a5,69c - 698: 40b70633 sub a2,a4,a1 - 69c: 008604b3 add s1,a2,s0 + 8c4: 00c587b3 add a5,a1,a2 + 8c8: 04000713 li a4,64 + 8cc: 842e mv s0,a1 + 8ce: 00f75463 bge a4,a5,8d6 + 8d2: 40b70633 sub a2,a4,a1 + 8d6: 008604b3 add s1,a2,s0 while(h--) - 6a0: 00941763 bne s0,s1,6ae + 8da: 00941763 bne s0,s1,8e8 } - 6a4: 40b2 lw ra,12(sp) - 6a6: 4422 lw s0,8(sp) - 6a8: 4492 lw s1,4(sp) - 6aa: 0141 addi sp,sp,16 - 6ac: 8082 ret + 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); - 6ae: 85a2 mv a1,s0 - 6b0: 4605 li a2,1 - 6b2: c02a sw a0,0(sp) - 6b4: 3cc1 jal 184 - 6b6: 4502 lw a0,0(sp) - 6b8: 0405 addi s0,s0,1 - 6ba: b7dd j 6a0 - 6bc: 8082 ret + 8e8: 85a2 mv a1,s0 + 8ea: 4605 li a2,1 + 8ec: c02a sw a0,0(sp) + 8ee: 897ff0ef jal 184 + 8f2: 4502 lw a0,0(sp) + 8f4: 0405 addi s0,s0,1 + 8f6: b7d5 j 8da + 8f8: 8082 ret -000006be : +000008fa : void ssd1306_drawRect(int32_t x, int32_t y, uint32_t w, uint32_t h, uint32_t color) - 6be: 1131 addi sp,sp,-20 - 6c0: c426 sw s1,8(sp) - 6c2: 84b2 mv s1,a2 + 8fa: 1131 addi sp,sp,-20 + 8fc: c426 sw s1,8(sp) + 8fe: 84b2 mv s1,a2 ssd1306_drawFastVLine(x, y, h, color); - 6c4: 8636 mv a2,a3 + 900: 8636 mv a2,a3 void ssd1306_drawRect(int32_t x, int32_t y, uint32_t w, uint32_t h, uint32_t color) - 6c6: c806 sw ra,16(sp) - 6c8: c236 sw a3,4(sp) - 6ca: c622 sw s0,12(sp) - 6cc: c02e sw a1,0(sp) - 6ce: 842a mv s0,a0 + 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); - 6d0: 376d jal 67a + 90c: 3765 jal 8b4 ssd1306_drawFastVLine(x+w-1, y, h, color); - 6d2: 4612 lw a2,4(sp) - 6d4: 4582 lw a1,0(sp) - 6d6: fff48513 addi a0,s1,-1 - 6da: 9522 add a0,a0,s0 - 6dc: 3f79 jal 67a - 6de: 4582 lw a1,0(sp) - 6e0: 4685 li a3,1 - 6e2: 8626 mv a2,s1 - 6e4: 8522 mv a0,s0 - 6e6: 3541 jal 566 + 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 + 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(x, y+h-1, w, color); - 6e8: 4782 lw a5,0(sp) - 6ea: fff78593 addi a1,a5,-1 - 6ee: 4792 lw a5,4(sp) - 6f0: 95be add a1,a1,a5 + 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; - 6f2: 03f00793 li a5,63 - 6f6: 00b7ea63 bltu a5,a1,70a - 6fa: 8522 mv a0,s0 + 92e: 03f00793 li a5,63 + 932: 00b7ea63 bltu a5,a1,946 + 936: 8522 mv a0,s0 } - 6fc: 4432 lw s0,12(sp) - 6fe: 40c2 lw ra,16(sp) - 700: 8626 mv a2,s1 - 702: 44a2 lw s1,8(sp) - 704: 4685 li a3,1 - 706: 0151 addi sp,sp,20 - 708: bdb9 j 566 - 70a: 40c2 lw ra,16(sp) - 70c: 4432 lw s0,12(sp) - 70e: 44a2 lw s1,8(sp) - 710: 0151 addi sp,sp,20 - 712: 8082 ret + 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 + 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 -00000714 : +00000950 : { - 714: 1151 addi sp,sp,-12 - 716: c222 sw s0,4(sp) - 718: c026 sw s1,0(sp) - 71a: 842a mv s0,a0 - 71c: 84b2 mv s1,a2 + 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); - 71e: 4685 li a3,1 - 720: 862e mv a2,a1 - 722: 85aa mv a1,a0 - 724: 4501 li a0,0 + 95a: 4685 li a3,1 + 95c: 862e mv a2,a1 + 95e: 85aa mv a1,a0 + 960: 4501 li a0,0 { - 726: c406 sw ra,8(sp) + 962: c406 sw ra,8(sp) ssd1306_drawstr(0, y, label, 1); - 728: 3cc5 jal 218 + 964: 8b5ff0ef jal 218 ssd1306_drawRect(bx, y, bw, 7, 1); - 72a: 03000513 li a0,48 - 72e: 469d li a3,7 - 730: 04c00613 li a2,76 - 734: 85a2 mv a1,s0 - 736: 3761 jal 6be + 968: 03000513 li a0,48 + 96c: 469d li a3,7 + 96e: 04c00613 li a2,76 + 972: 85a2 mv a1,s0 + 974: 3759 jal 8fa int fill = (val * (bw - 2)) / 100; - 738: 00349513 slli a0,s1,0x3 - 73c: 9526 add a0,a0,s1 - 73e: 050a slli a0,a0,0x2 - 740: 9526 add a0,a0,s1 - 742: 0506 slli a0,a0,0x1 + 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); - 744: 06300793 li a5,99 - 748: 02a7d263 bge a5,a0,76c + 982: 06300793 li a5,99 + 986: 02a7d463 bge a5,a0,9ae int fill = (val * (bw - 2)) / 100; - 74c: 06400593 li a1,100 - 750: 3a81 jal a0 <__divsi3> + 98a: 06400593 li a1,100 + 98e: f12ff0ef jal a0 <__divsi3> if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1); - 752: 4705 li a4,1 - 754: 00e405b3 add a1,s0,a4 + 992: 4705 li a4,1 + 994: 00e405b3 add a1,s0,a4 } - 758: 4412 lw s0,4(sp) - 75a: 40a2 lw ra,8(sp) - 75c: 4482 lw s1,0(sp) + 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); - 75e: 0ff57613 zext.b a2,a0 - 762: 4695 li a3,5 - 764: 03100513 li a0,49 + 99e: 0ff57613 zext.b a2,a0 + 9a2: 4695 li a3,5 + 9a4: 03100513 li a0,49 } - 768: 0131 addi sp,sp,12 + 9a8: 0131 addi sp,sp,12 if (fill > 0) ssd1306_fillRect(bx + 1, y + 1, fill, 5, 1); - 76a: bc99 j 1c0 + 9aa: 817ff06f j 1c0 } - 76c: 40a2 lw ra,8(sp) - 76e: 4412 lw s0,4(sp) - 770: 4482 lw s1,0(sp) - 772: 0131 addi sp,sp,12 - 774: 8082 ret + 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 -00000776 : +000009b8 : void ssd1306_drawImage(uint32_t x, uint32_t y, const unsigned char* input, uint32_t width, uint32_t height, uint32_t color_mode) { - 776: fd810113 addi sp,sp,-40 - 77a: 00e587b3 add a5,a1,a4 - 77e: d222 sw s0,36(sp) - 780: d026 sw s1,32(sp) - 782: c82a sw a0,16(sp) - 784: ca32 sw a2,20(sp) + 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; - 786: 0036d413 srli s0,a3,0x3 - 78a: c63e sw a5,12(sp) - 78c: 4381 li t2,0 + 9c8: 0036d413 srli s0,a3,0x3 + 9cc: c63e sw a5,12(sp) + 9ce: 4381 li t2,0 if (y_absolute >= SSD1306_H) { - 78e: 03f00793 li a5,63 - 792: 08b7ed63 bltu a5,a1,82c + 9d0: 03f00793 li a5,63 + 9d4: 08b7ed63 bltu a5,a1,a6e uint32_t v_mask = 1 << (y_absolute & 7); - 796: 0075f793 andi a5,a1,7 - 79a: 4705 li a4,1 - 79c: 00f717b3 sll a5,a4,a5 - 7a0: c03e sw a5,0(sp) + 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]; - 7a2: 47d2 lw a5,20(sp) + 9e4: 47d2 lw a5,20(sp) for (uint32_t byte = 0; byte < bytes_to_draw; byte++) { - 7a4: 4681 li a3,0 + 9e6: 4681 li a3,0 uint32_t input_byte = input[byte + line * bytes_to_draw]; - 7a6: 979e add a5,a5,t2 - 7a8: cc3e sw a5,24(sp) + 9e8: 979e add a5,a5,t2 + 9ea: cc3e sw a5,24(sp) buffer_addr = x_absolute + SSD1306_W * (y_absolute / 8); - 7aa: 0035d793 srli a5,a1,0x3 - 7ae: 079e slli a5,a5,0x7 - 7b0: ce3e sw a5,28(sp) + 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]; - 7b2: 47e2 lw a5,24(sp) + 9f4: 47e2 lw a5,24(sp) x_absolute = x + 8 * byte + pixel; - 7b4: 00369293 slli t0,a3,0x3 + 9f6: 00369293 slli t0,a3,0x3 for (pixel = 0; pixel < 8; pixel++) { - 7b8: 4701 li a4,0 + 9fa: 4701 li a4,0 uint32_t input_byte = input[byte + line * bytes_to_draw]; - 7ba: 97b6 add a5,a5,a3 - 7bc: 0007c783 lbu a5,0(a5) - 7c0: c23e sw a5,4(sp) + 9fc: 97b6 add a5,a5,a3 + 9fe: 0007c783 lbu a5,0(a5) + a02: c23e sw a5,4(sp) x_absolute = x + 8 * byte + pixel; - 7c2: 47c2 lw a5,16(sp) - 7c4: 92be add t0,t0,a5 + a04: 47c2 lw a5,16(sp) + a06: 92be add t0,t0,a5 buffer_addr = x_absolute + SSD1306_W * (y_absolute / 8); - 7c6: 47f2 lw a5,28(sp) - 7c8: 005784b3 add s1,a5,t0 + a08: 47f2 lw a5,28(sp) + a0a: 005784b3 add s1,a5,t0 if (x_absolute >= SSD1306_W) { - 7cc: 00e287b3 add a5,t0,a4 - 7d0: 07f00613 li a2,127 - 7d4: 04f66463 bltu a2,a5,81c + a0e: 00e287b3 add a5,t0,a4 + a12: 07f00613 li a2,127 + a16: 04f66463 bltu a2,a5,a5e uint8_t input_pixel = input_byte & (0x80 >> pixel); // MSB first (default) - 7d8: 4512 lw a0,4(sp) - 7da: 08000793 li a5,128 - 7de: 40e7d7b3 sra a5,a5,a4 - 7e2: 8fe9 and a5,a5,a0 + 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); - 7e4: 00e48633 add a2,s1,a4 + a26: 00e48633 add a2,s1,a4 ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0); - 7e8: c6818513 addi a0,gp,-920 # 20000064 - 7ec: 9532 add a0,a0,a2 - 7ee: 00014303 lbu t1,0(sp) + a2a: c5c18513 addi a0,gp,-932 # 20000058 + a2e: 9532 add a0,a0,a2 + a30: 00014303 lbu t1,0(sp) uint8_t input_pixel = input_byte & (0x80 >> pixel); // MSB first (default) - 7f2: c43e sw a5,8(sp) + a34: c43e sw a5,8(sp) ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0); - 7f4: 00054783 lbu a5,0(a0) - 7f8: fff34613 not a2,t1 + a36: 00054783 lbu a5,0(a0) + a3a: fff34613 not a2,t1 for (pixel = 0; pixel < 8; pixel++) { - 7fc: 0705 addi a4,a4,1 + a3e: 0705 addi a4,a4,1 ssd1306_buffer[buffer_addr] = (ssd1306_buffer[buffer_addr] & ~v_mask) | (input_pixel ? v_mask : 0); - 7fe: 8e7d and a2,a2,a5 - 800: 47a2 lw a5,8(sp) - 802: 00f037b3 snez a5,a5 - 806: 40f007b3 neg a5,a5 - 80a: 00f37333 and t1,t1,a5 - 80e: 00666633 or a2,a2,t1 - 812: 00c50023 sb a2,0(a0) + 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++) { - 816: 47a1 li a5,8 - 818: faf71ae3 bne a4,a5,7cc + a58: 47a1 li a5,8 + a5a: faf71ae3 bne a4,a5,a0e for (uint32_t byte = 0; byte < bytes_to_draw; byte++) { - 81c: 0685 addi a3,a3,1 # 40001 - 81e: f8d41ae3 bne s0,a3,7b2 + a5e: 0685 addi a3,a3,1 + a60: f8d41ae3 bne s0,a3,9f4 for (uint32_t line = 0; line < height; line++) { - 822: 47b2 lw a5,12(sp) - 824: 0585 addi a1,a1,1 - 826: 93a2 add t2,t2,s0 - 828: f6b793e3 bne a5,a1,78e + a64: 47b2 lw a5,12(sp) + a66: 0585 addi a1,a1,1 + a68: 93a2 add t2,t2,s0 + a6a: f6b793e3 bne a5,a1,9d0 } - 82c: 5412 lw s0,36(sp) - 82e: 5482 lw s1,32(sp) - 830: 02810113 addi sp,sp,40 - 834: 8082 ret + a6e: 5412 lw s0,36(sp) + a70: 5482 lw s1,32(sp) + a72: 02810113 addi sp,sp,40 + a76: 8082 ret -00000836 : +00000a78 : uint8_t ssd1306_i2c_send(uint8_t addr, const uint8_t *data, int sz) { int32_t timeout; // wait for not busy timeout = TIMEOUT_MAX; - 836: 6761 lui a4,0x18 + a78: 6761 lui a4,0x18 while((I2C1->STAR2 & I2C_STAR2_BUSY) && (timeout--)); - 838: 400057b7 lui a5,0x40005 + a7a: 400057b7 lui a5,0x40005 timeout = TIMEOUT_MAX; - 83c: 6a070713 addi a4,a4,1696 # 186a0 + a7e: 6a070713 addi a4,a4,1696 # 186a0 while((I2C1->STAR2 & I2C_STAR2_BUSY) && (timeout--)); - 840: 40078793 addi a5,a5,1024 # 40005400 <_eusrstack+0x20004c00> - 844: 567d li a2,-1 - 846: 0187d683 lhu a3,24(a5) - 84a: 8a89 andi a3,a3,2 - 84c: c2f9 beqz a3,912 - 84e: 177d addi a4,a4,-1 - 850: fec71be3 bne a4,a2,846 + 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 + a90: 177d addi a4,a4,-1 + a92: fec71be3 bne a4,a2,a88 uint8_t ssd1306_i2c_send(uint8_t addr, const uint8_t *data, int sz) - 854: 1171 addi sp,sp,-4 - 856: c006 sw ra,0(sp) + a96: 1171 addi sp,sp,-4 + a98: c006 sw ra,0(sp) ssd1306_i2c_setup(); - 858: 8d9ff0ef jal 130 + a9a: e96ff0ef jal 130 // set STOP condition I2C1->CTLR1 |= I2C_CTLR1_STOP; // we're happy return 0; } - 85c: 4082 lw ra,0(sp) + a9e: 4082 lw ra,0(sp) return ssd1306_i2c_error(0); - 85e: 4505 li a0,1 + aa0: 4505 li a0,1 } - 860: 0111 addi sp,sp,4 - 862: 8082 ret - 864: 67e1 lui a5,0x18 - 866: 6a178793 addi a5,a5,1697 # 186a1 + aa2: 0111 addi sp,sp,4 + aa4: 8082 ret + aa6: 67e1 lui a5,0x18 + aa8: 6a178793 addi a5,a5,1697 # 186a1 while(!(I2C1->STAR1 & I2C_STAR1_TXE) && (timeout--)); - 86a: 01475683 lhu a3,20(a4) - 86e: 0806f693 andi a3,a3,128 - 872: e681 bnez a3,87a - 874: 17fd addi a5,a5,-1 - 876: fbf5 bnez a5,86a - 878: bff1 j 854 + aac: 01475683 lhu a3,20(a4) + ab0: 0806f693 andi a3,a3,128 + ab4: e681 bnez a3,abc + ab6: 17fd addi a5,a5,-1 + ab8: fbf5 bnez a5,aac + aba: bff1 j a96 I2C1->DATAR = *data++; - 87a: 00054783 lbu a5,0(a0) - 87e: 0505 addi a0,a0,1 - 880: 00f71823 sh a5,16(a4) + abc: 00054783 lbu a5,0(a0) + ac0: 0505 addi a0,a0,1 + ac2: 00f71823 sh a5,16(a4) while(sz--) - 884: feb510e3 bne a0,a1,864 + ac6: feb510e3 bne a0,a1,aa6 timeout = TIMEOUT_MAX; - 888: 66e1 lui a3,0x18 + aca: 66e1 lui a3,0x18 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 88a: 40005737 lui a4,0x40005 + acc: 40005737 lui a4,0x40005 while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (timeout--)); - 88e: 00070637 lui a2,0x70 + ad0: 00070637 lui a2,0x70 timeout = TIMEOUT_MAX; - 892: 6a068693 addi a3,a3,1696 # 186a0 + ad4: 6a068693 addi a3,a3,1696 # 186a0 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 896: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> + ad8: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (timeout--)); - 89a: 08460613 addi a2,a2,132 # 70084 - 89e: 55fd li a1,-1 + adc: 08460613 addi a2,a2,132 # 70084 + ae0: 55fd li a1,-1 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 8a0: 01475503 lhu a0,20(a4) - 8a4: 01875783 lhu a5,24(a4) - 8a8: 07c2 slli a5,a5,0x10 - 8aa: 8fc9 or a5,a5,a0 + 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--)); - 8ac: 8ff1 and a5,a5,a2 - 8ae: 00c78663 beq a5,a2,8ba - 8b2: 16fd addi a3,a3,-1 - 8b4: feb696e3 bne a3,a1,8a0 - 8b8: bf71 j 854 + aee: 8ff1 and a5,a5,a2 + af0: 00c78663 beq a5,a2,afc + af4: 16fd addi a3,a3,-1 + af6: feb696e3 bne a3,a1,ae2 + afa: bf71 j a96 I2C1->CTLR1 |= I2C_CTLR1_STOP; - 8ba: 00075783 lhu a5,0(a4) + afc: 00075783 lhu a5,0(a4) return 0; - 8be: 4501 li a0,0 + b00: 4501 li a0,0 I2C1->CTLR1 |= I2C_CTLR1_STOP; - 8c0: 2007e793 ori a5,a5,512 - 8c4: 00f71023 sh a5,0(a4) + b02: 2007e793 ori a5,a5,512 + b06: 00f71023 sh a5,0(a4) } - 8c8: 8082 ret + b0a: 8082 ret while(!(I2C1->STAR1 & I2C_STAR1_TXE) && (timeout--)); - 8ca: 40005737 lui a4,0x40005 - 8ce: 95aa add a1,a1,a0 - 8d0: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> - 8d4: bf45 j 884 + b0c: 40005737 lui a4,0x40005 + b10: 95aa add a1,a1,a0 + b12: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> + b16: bf45 j ac6 I2C1->DATAR = addr<<1; - 8d6: 07800793 li a5,120 - 8da: 00f71823 sh a5,16(a4) + b18: 07800793 li a5,120 + b1c: 00f71823 sh a5,16(a4) timeout = TIMEOUT_MAX; - 8de: 6661 lui a2,0x18 + b20: 6661 lui a2,0x18 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 8e0: 400056b7 lui a3,0x40005 + b22: 400056b7 lui a3,0x40005 while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (timeout--)); - 8e4: 00070737 lui a4,0x70 + b26: 00070737 lui a4,0x70 timeout = TIMEOUT_MAX; - 8e8: 6a060613 addi a2,a2,1696 # 186a0 + b2a: 6a060613 addi a2,a2,1696 # 186a0 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 8ec: 40068693 addi a3,a3,1024 # 40005400 <_eusrstack+0x20004c00> + b2e: 40068693 addi a3,a3,1024 # 40005400 <_eusrstack+0x20004c00> while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (timeout--)); - 8f0: 08270713 addi a4,a4,130 # 70082 - 8f4: 537d li t1,-1 + b32: 08270713 addi a4,a4,130 # 70082 + b36: 537d li t1,-1 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 8f6: 0146d283 lhu t0,20(a3) - 8fa: 0186d783 lhu a5,24(a3) - 8fe: 07c2 slli a5,a5,0x10 - 900: 0057e7b3 or a5,a5,t0 + 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--)); - 904: 8ff9 and a5,a5,a4 - 906: fce782e3 beq a5,a4,8ca - 90a: 167d addi a2,a2,-1 - 90c: fe6615e3 bne a2,t1,8f6 - 910: b791 j 854 + b46: 8ff9 and a5,a5,a4 + b48: fce782e3 beq a5,a4,b0c + b4c: 167d addi a2,a2,-1 + b4e: fe6615e3 bne a2,t1,b38 + b52: b791 j a96 I2C1->CTLR1 |= I2C_CTLR1_START; - 912: 0007d703 lhu a4,0(a5) + b54: 0007d703 lhu a4,0(a5) timeout = TIMEOUT_MAX; - 916: 66e1 lui a3,0x18 + b58: 66e1 lui a3,0x18 while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_MODE_SELECT)) && (timeout--)); - 918: 00030637 lui a2,0x30 + b5a: 00030637 lui a2,0x30 I2C1->CTLR1 |= I2C_CTLR1_START; - 91c: 10076713 ori a4,a4,256 - 920: 00e79023 sh a4,0(a5) + b5e: 10076713 ori a4,a4,256 + b62: 00e79023 sh a4,0(a5) uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 924: 40005737 lui a4,0x40005 + b66: 40005737 lui a4,0x40005 timeout = TIMEOUT_MAX; - 928: 6a068693 addi a3,a3,1696 # 186a0 + b6a: 6a068693 addi a3,a3,1696 # 186a0 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 92c: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> + b6e: 40070713 addi a4,a4,1024 # 40005400 <_eusrstack+0x20004c00> while((!ssd1306_i2c_chk_evt(SSD1306_I2C_EVENT_MASTER_MODE_SELECT)) && (timeout--)); - 930: 0605 addi a2,a2,1 # 30001 - 932: 537d li t1,-1 + b72: 0605 addi a2,a2,1 # 30001 + b74: 537d li t1,-1 uint32_t status = I2C1->STAR1 | (I2C1->STAR2<<16); - 934: 01475283 lhu t0,20(a4) - 938: 01875783 lhu a5,24(a4) - 93c: 07c2 slli a5,a5,0x10 - 93e: 0057e7b3 or a5,a5,t0 + 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--)); - 942: 8ff1 and a5,a5,a2 - 944: f8c789e3 beq a5,a2,8d6 - 948: 16fd addi a3,a3,-1 - 94a: fe6695e3 bne a3,t1,934 - 94e: b719 j 854 + b84: 8ff1 and a5,a5,a2 + b86: f8c789e3 beq a5,a2,b18 + b8a: 16fd addi a3,a3,-1 + b8c: fe6695e3 bne a3,t1,b76 + b90: b719 j a96 -00000950 : +00000b92 : { - 950: fd810113 addi sp,sp,-40 + b92: fd810113 addi sp,sp,-40 /* build command or data packets */ if(cmd) { pkt[0] = 0; pkt[1] = *data; - 954: 00a100a3 sb a0,1(sp) + 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); - 958: 4589 li a1,2 - 95a: 850a mv a0,sp - 95c: d206 sw ra,36(sp) + b9a: 4589 li a1,2 + b9c: 850a mv a0,sp + b9e: d206 sw ra,36(sp) pkt[0] = 0; - 95e: 00010023 sb zero,0(sp) + ba0: 00010023 sb zero,0(sp) return ssd1306_i2c_send(SSD1306_I2C_ADDR, pkt, sz+1); - 962: 3dd1 jal 836 + ba4: 3dd1 jal a78 } - 964: 5092 lw ra,36(sp) - 966: 02810113 addi sp,sp,40 - 96a: 8082 ret + ba6: 5092 lw ra,36(sp) + ba8: 02810113 addi sp,sp,40 + bac: 8082 ret -0000096c : +00000bae : asm volatile( "\n\ - 96c: 20000197 auipc gp,0x20000 - 970: a9018193 addi gp,gp,-1392 # 200003fc <__global_pointer$> - 974: 40418113 addi sp,gp,1028 # 20000800 <_eusrstack> - 978: 6509 lui a0,0x2 - 97a: 88050513 addi a0,a0,-1920 # 1880 - 97e: 30051073 csrw mstatus,a0 - 982: fffff697 auipc a3,0xfffff - 986: 67e68693 addi a3,a3,1662 # 0 - 98a: 0036e693 ori a3,a3,3 - 98e: 30569073 csrw mtvec,a3 + 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 + bc0: 30051073 csrw mstatus,a0 + bc4: fffff697 auipc a3,0xfffff + bc8: 43c68693 addi a3,a3,1084 # 0 + bcc: 0036e693 ori a3,a3,3 + bd0: 30569073 csrw mtvec,a3 asm volatile( - 992: c3018513 addi a0,gp,-976 # 2000002c - 996: 06818593 addi a1,gp,104 # 20000464 <_ebss> - 99a: 4601 li a2,0 - 99c: 00b55663 bge a0,a1,9a8 - 9a0: c110 sw a2,0(a0) - 9a2: 0511 addi a0,a0,4 - 9a4: feb54ee3 blt a0,a1,9a0 - 9a8: 00002517 auipc a0,0x2 - 9ac: 4c850513 addi a0,a0,1224 # 2e70 <_data_lma> - 9b0: c0418593 addi a1,gp,-1020 # 20000000 - 9b4: c3018613 addi a2,gp,-976 # 2000002c - 9b8: 00c58863 beq a1,a2,9c8 - 9bc: 4114 lw a3,0(a0) - 9be: c194 sw a3,0(a1) - 9c0: 0511 addi a0,a0,4 - 9c2: 0591 addi a1,a1,4 - 9c4: fec59ae3 bne a1,a2,9b8 + bd4: c2818513 addi a0,gp,-984 # 20000024 + bd8: 05c18593 addi a1,gp,92 # 20000458 <_ebss> + bdc: 4601 li a2,0 + bde: 00b55663 bge a0,a1,bea + be2: c110 sw a2,0(a0) + be4: 0511 addi a0,a0,4 + be6: feb54ee3 blt a0,a1,be2 + bea: 00002517 auipc a0,0x2 + bee: 40650513 addi a0,a0,1030 # 2ff0 <_data_lma> + bf2: c0418593 addi a1,gp,-1020 # 20000000 + bf6: c2818613 addi a2,gp,-984 # 20000024 + bfa: 00c58863 beq a1,a2,c0a + 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 SysTick->CTLR = 1; - 9c8: e000f7b7 lui a5,0xe000f - 9cc: 4705 li a4,1 - 9ce: c398 sw a4,0(a5) + c0a: e000f7b7 lui a5,0xe000f + c0e: 4705 li a4,1 + c10: c398 sw a4,0(a5) asm volatile( - 9d0: 6785 lui a5,0x1 - 9d2: ac878793 addi a5,a5,-1336 # ac8
- 9d6: 34179073 csrw mepc,a5 - 9da: 30200073 mret + c12: 6785 lui a5,0x1 + c14: d0a78793 addi a5,a5,-758 # d0a
+ c18: 34179073 csrw mepc,a5 + c1c: 30200073 mret -000009de : +00000c20 : asm volatile( "1: j 1b" ); - 9de: a001 j 9de + c20: a001 j c20 -000009e0 : +00000c22 : RCC->INTR |= RCC_CSSC; // clear the clock security int flag - 9e0: 40021737 lui a4,0x40021 - 9e4: 471c lw a5,8(a4) - 9e6: 008006b7 lui a3,0x800 - 9ea: 8fd5 or a5,a5,a3 - 9ec: c71c sw a5,8(a4) + 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) -000009ee : +00000c30 : WEAK void *memset(void *dest, int c, size_t n) { unsigned char *s = dest; for (; n; n--, s++) *s = c; return dest; } - 9ee: 962a add a2,a2,a0 - 9f0: 87aa mv a5,a0 - 9f2: 00c79363 bne a5,a2,9f8 - 9f6: 8082 ret - 9f8: 00b78023 sb a1,0(a5) - 9fc: 0785 addi a5,a5,1 - 9fe: bfd5 j 9f2 + c30: 962a add a2,a2,a0 + c32: 87aa mv a5,a0 + c34: 00c79363 bne a5,a2,c3a + c38: 8082 ret + c3a: 00b78023 sb a1,0(a5) + c3e: 0785 addi a5,a5,1 + c40: bfd5 j c34 -00000a00 : +00000c42 : memset(ssd1306_buffer, color ? 0xFF : 0x00, sizeof(ssd1306_buffer)); - a00: 40000613 li a2,1024 - a04: 4581 li a1,0 - a06: c6818513 addi a0,gp,-920 # 20000064 - a0a: b7d5 j 9ee + c42: 40000613 li a2,1024 + c46: 4581 li a1,0 + c48: c5c18513 addi a0,gp,-932 # 20000058 + c4c: b7d5 j c30 -00000a0c : +00000c4e : for (; n; n--) *d++ = *s++; - a0c: 4781 li a5,0 - a0e: 00f61363 bne a2,a5,a14 + c4e: 4781 li a5,0 + c50: 00f61363 bne a2,a5,c56 } - a12: 8082 ret + c54: 8082 ret for (; n; n--) *d++ = *s++; - a14: 00f58733 add a4,a1,a5 - a18: 00074683 lbu a3,0(a4) # 40021000 <_eusrstack+0x20020800> - a1c: 00f50733 add a4,a0,a5 - a20: 0785 addi a5,a5,1 - a22: 00d70023 sb a3,0(a4) - a26: b7e5 j a0e + 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 -00000a28 : +00000c6a : { - a28: 7179 addi sp,sp,-48 + c6a: 7179 addi sp,sp,-48 ssd1306_cmd(SSD1306_COLUMNADDR); - a2a: 02100513 li a0,33 + c6c: 02100513 li a0,33 { - a2e: d606 sw ra,44(sp) - a30: d422 sw s0,40(sp) - a32: d226 sw s1,36(sp) + c70: d606 sw ra,44(sp) + c72: d422 sw s0,40(sp) + c74: d226 sw s1,36(sp) ssd1306_cmd(SSD1306_COLUMNADDR); - a34: 3f31 jal 950 + c76: 3f31 jal b92 ssd1306_cmd(SSD1306_OFFSET); // Column start address (0 = reset) - a36: 4501 li a0,0 - a38: 3f21 jal 950 + c78: 4501 li a0,0 + c7a: 3f21 jal b92 ssd1306_cmd(SSD1306_OFFSET+SSD1306_W-1); // Column end address (127 = reset) - a3a: 07f00513 li a0,127 - a3e: 3f09 jal 950 + c7c: 07f00513 li a0,127 + c80: 3f09 jal b92 ssd1306_cmd(SSD1306_PAGEADDR); - a40: 02200513 li a0,34 - a44: 3731 jal 950 + c82: 02200513 li a0,34 + c86: 3731 jal b92 ssd1306_cmd(0); // Page start address (0 = reset) - a46: 4501 li a0,0 - a48: 3721 jal 950 + c88: 4501 li a0,0 + c8a: 3721 jal b92 ssd1306_cmd(7); // Page end address - a4a: 451d li a0,7 - a4c: c6818413 addi s0,gp,-920 # 20000064 - a50: 3701 jal 950 + c8c: 451d li a0,7 + c8e: c5c18413 addi s0,gp,-932 # 20000058 + c92: 3701 jal b92 for(i=0;i + caa: 3755 jal c4e return ssd1306_i2c_send(SSD1306_I2C_ADDR, pkt, sz+1); - a6a: 02100593 li a1,33 - a6e: 850a mv a0,sp - a70: 02040413 addi s0,s0,32 - a74: 33c9 jal 836 - a76: fe9410e3 bne s0,s1,a56 + cac: 02100593 li a1,33 + cb0: 850a mv a0,sp + cb2: 02040413 addi s0,s0,32 + cb6: 33c9 jal a78 + cb8: fe9410e3 bne s0,s1,c98 } - a7a: 50b2 lw ra,44(sp) - a7c: 5422 lw s0,40(sp) - a7e: 5492 lw s1,36(sp) - a80: 6145 addi sp,sp,48 - a82: 8082 ret + 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 -00000a84 : +00000cc6 : //#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 - a84: 400227b7 lui a5,0x40022 - a88: 4705 li a4,1 - a8a: c398 sw a4,0(a5) + 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; - a8c: 400217b7 lui a5,0x40021 + cce: 400217b7 lui a5,0x40021 RCC->CTLR = BASE_CTLR | RCC_HSION | RCC_PLLON; // Use HSI, enable PLL. - a90: 01080737 lui a4,0x1080 + cd2: 01080737 lui a4,0x1080 RCC->CFGR0 = BASE_CFGR0; - a94: 0007a223 sw zero,4(a5) # 40021004 <_eusrstack+0x20020804> + cd6: 0007a223 sw zero,4(a5) # 40021004 <_eusrstack+0x20020804> RCC->CTLR = BASE_CTLR | RCC_HSION | RCC_PLLON; // Use HSI, enable PLL. - a98: 08170713 addi a4,a4,129 # 1080081 - a9c: c398 sw a4,0(a5) + cda: 08170713 addi a4,a4,129 # 1080081 + 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. - a9e: 009f0737 lui a4,0x9f0 - aa2: c798 sw a4,8(a5) + 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 - aa4: 4398 lw a4,0(a5) - aa6: 00671693 slli a3,a4,0x6 - aaa: fe06dde3 bgez a3,aa4 + ce6: 4398 lw a4,0(a5) + ce8: 00671693 slli a3,a4,0x6 + cec: fe06dde3 bgez a3,ce6 #if defined(CH32H41x) RCC->PLLCFGR |= RCC_SYSPLL_GATE; #endif uint32_t tmp32 = RCC->CFGR0 & ~(0x03); // clr the SW - aae: 43d8 lw a4,4(a5) + 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 - ab0: 400216b7 lui a3,0x40021 + cf2: 400216b7 lui a3,0x40021 uint32_t tmp32 = RCC->CFGR0 & ~(0x03); // clr the SW - ab4: 9b71 andi a4,a4,-4 + cf6: 9b71 andi a4,a4,-4 RCC->CFGR0 = tmp32 | RCC_SW_PLL; // Select PLL as system clock source - ab6: 00276713 ori a4,a4,2 - aba: c3d8 sw a4,4(a5) + 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 - abc: 4721 li a4,8 - abe: 42dc lw a5,4(a3) - ac0: 8bb1 andi a5,a5,12 - ac2: fee79ee3 bne a5,a4,abe + cfe: 4721 li a4,8 + d00: 42dc lw a5,4(a3) + d02: 8bb1 andi a5,a5,12 + d04: fee79ee3 bne a5,a4,d00 SetupDebugPrintf(); #endif #if defined(FUNCONF_SUPPORT_CONSTRUCTORS) && FUNCONF_SUPPORT_CONSTRUCTORS CallConstructors(); #endif } - ac6: 8082 ret + d08: 8082 ret -00000ac8
: +00000d0a
: } } // ----------------------------------------------------------------- main int main(void) { - ac8: f8410113 addi sp,sp,-124 - acc: dc86 sw ra,120(sp) - ace: daa2 sw s0,116(sp) - ad0: d8a6 sw s1,112(sp) + 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(); - ad2: 3f4d jal a84 + d12: 3f55 jal cc6 funGpioInitAll(); - ad4: 400214b7 lui s1,0x40021 - ad8: 4c9c lw a5,24(s1) + d14: 400214b7 lui s1,0x40021 + d18: 4c9c lw a5,24(s1) funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - ada: 40011437 lui s0,0x40011 + d1a: 40011437 lui s0,0x40011 funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - ade: 76fd lui a3,0xfffff + d1e: 76fd lui a3,0xfffff funGpioInitAll(); - ae0: 0357e793 ori a5,a5,53 - ae4: cc9c sw a5,24(s1) + d20: 0357e793 ori a5,a5,53 + d24: cc9c sw a5,24(s1) funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - ae6: 80040793 addi a5,s0,-2048 # 40010800 <_eusrstack+0x20010000> - aea: 4398 lw a4,0(a5) + d26: 80040793 addi a5,s0,-2048 # 40010800 <_eusrstack+0x20010000> + d2a: 4398 lw a4,0(a5) funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - aec: 0ff68693 addi a3,a3,255 # fffff0ff <_eusrstack+0xdfffe8ff> + d2c: 0ff68693 addi a3,a3,255 # fffff0ff <_eusrstack+0xdfffe8ff> funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD); - af0: f1000637 lui a2,0xf1000 + d30: f1000637 lui a2,0xf1000 funPinMode(LED_PIN, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - af4: f0f77713 andi a4,a4,-241 - af8: 01076713 ori a4,a4,16 - afc: c398 sw a4,0(a5) + d34: f0f77713 andi a4,a4,-241 + d38: 01076713 ori a4,a4,16 + d3c: c398 sw a4,0(a5) funDigitalWrite(LED_PIN, FUN_LOW); - afe: 00020737 lui a4,0x20 - b02: cb98 sw a4,16(a5) + d3e: 00020737 lui a4,0x20 + d42: cb98 sw a4,16(a5) funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - b04: 40040793 addi a5,s0,1024 - b08: 4398 lw a4,0(a5) + d44: 40040793 addi a5,s0,1024 + d48: 4398 lw a4,0(a5) funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD); - b0a: 167d addi a2,a2,-1 # f0ffffff <_eusrstack+0xd0fff7ff> + 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 + 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 + 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 + 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 - b0c: 000b0537 lui a0,0xb0 - funPinMode(BUZZER, GPIO_Speed_10MHz | GPIO_CNF_OUT_PP); - b10: 8f75 and a4,a4,a3 - b12: 10076713 ori a4,a4,256 - b16: c398 sw a4,0(a5) - funDigitalWrite(BUZZER, FUN_LOW); - b18: 00040737 lui a4,0x40 - b1c: cb98 sw a4,16(a5) - funPinMode(BTN_OK, GPIO_CNF_IN_PUPD); - b1e: 4018 lw a4,0(s0) - Delay_Ms(120); // let the OLED rail settle - b20: c8050513 addi a0,a0,-896 # afc80 - funPinMode(BTN_OK, GPIO_CNF_IN_PUPD); - b24: 9b41 andi a4,a4,-16 - b26: 00876713 ori a4,a4,8 - b2a: c018 sw a4,0(s0) - funPinMode(BTN_LEFT, GPIO_CNF_IN_PUPD); - b2c: 4398 lw a4,0(a5) - b2e: 8f71 and a4,a4,a2 - b30: 08000637 lui a2,0x8000 - b34: 8f51 or a4,a4,a2 - b36: c398 sw a4,0(a5) - funPinMode(BTN_RIGHT, GPIO_CNF_IN_PUPD); - b38: 4398 lw a4,0(a5) - b3a: ff100637 lui a2,0xff100 - b3e: 167d addi a2,a2,-1 # ff0fffff <_eusrstack+0xdf0ff7ff> - b40: 8f71 and a4,a4,a2 - b42: 00800637 lui a2,0x800 - b46: 8f51 or a4,a4,a2 - b48: c398 sw a4,0(a5) - funDigitalWrite(BTN_OK, FUN_HIGH); - b4a: 4705 li a4,1 - b4c: c818 sw a4,16(s0) - funDigitalWrite(BTN_LEFT, FUN_HIGH); - b4e: 04000713 li a4,64 - b52: cb98 sw a4,16(a5) - funDigitalWrite(BTN_RIGHT, FUN_HIGH); - b54: 02000713 li a4,32 - b58: cb98 sw a4,16(a5) - Delay_Ms(120); // let the OLED rail settle - b5a: dc4ff0ef jal 11e + df8: 000b0537 lui a0,0xb0 + dfc: c8050513 addi a0,a0,-896 # afc80 + e00: b1eff0ef jal 11e * init I2C and GPIO */ uint8_t ssd1306_i2c_init(void) { // Enable GPIOC and I2C RCC->APB1PCENR |= RCC_APB1Periph_I2C1; - b5e: 4cdc lw a5,28(s1) - b60: 00200737 lui a4,0x200 - b64: 8fd9 or a5,a5,a4 - b66: ccdc sw a5,28(s1) + 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; - b68: 4c9c lw a5,24(s1) + 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)); - b6a: 777d lui a4,0xfffff - b6c: 0ff70693 addi a3,a4,255 # fffff0ff <_eusrstack+0xdfffe8ff> + e10: 777d lui a4,0xfffff + e12: 0ff70693 addi a3,a4,255 # fffff0ff <_eusrstack+0xdfffe8ff> RCC->APB2PCENR |= RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO; - b70: 0117e793 ori a5,a5,17 - b74: cc9c sw a5,24(s1) + e16: 0117e793 ori a5,a5,17 + e1a: cc9c sw a5,24(s1) GPIOC->CFGLR &= ~(0xf<<(4*1)); - b76: 401c lw a5,0(s0) + e1c: 401c lw a5,0(s0) GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*2); - b78: 6705 lui a4,0x1 - b7a: d0070713 addi a4,a4,-768 # d00 + e1e: 6705 lui a4,0x1 + e20: d0070713 addi a4,a4,-768 # d00 GPIOC->CFGLR &= ~(0xf<<(4*1)); - b7e: f0f7f793 andi a5,a5,-241 - b82: c01c sw a5,0(s0) + e24: f0f7f793 andi a5,a5,-241 + e28: c01c sw a5,0(s0) GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_OD_AF)<<(4*1); - b84: 401c lw a5,0(s0) - b86: 0d07e793 ori a5,a5,208 - b8a: c01c sw a5,0(s0) + e2a: 401c lw a5,0(s0) + e2c: 0d07e793 ori a5,a5,208 + e30: c01c sw a5,0(s0) GPIOC->CFGLR &= ~(0xf<<(4*2)); - b8c: 401c lw a5,0(s0) - b8e: 8ff5 and a5,a5,a3 - b90: c01c sw a5,0(s0) + 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); - b92: 401c lw a5,0(s0) - b94: 8fd9 or a5,a5,a4 - b96: c01c sw a5,0(s0) + 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; - b98: 6409 lui s0,0x2 + 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(); - b9a: d96ff0ef jal 130 - b9e: 40440413 addi s0,s0,1028 # 2404 + e40: af0ff0ef jal 130 + e44: 57040413 addi s0,s0,1392 # 2570 ssd1306_setbuf(0); - ba2: 3db9 jal a00 + e48: 3bed jal c42 while(*cmd_list != SSD1306_TERMINATE_CMDS) - ba4: 00044503 lbu a0,0(s0) - ba8: 0ff00793 li a5,255 - bac: 00f51463 bne a0,a5,bb4 + e4a: 00044503 lbu a0,0(s0) + e4e: 0ff00793 li a5,255 + e52: 00f51463 bne a0,a5,e5a { if(ssd1306_cmd(*cmd_list++)) return 1; } ssd1306_refresh(); - bb0: 3da5 jal a28 + e56: 3d11 jal c6a #endif return 0; - bb2: a021 j bba + e58: a021 j e60 if(ssd1306_cmd(*cmd_list++)) - bb4: 0405 addi s0,s0,1 - bb6: 3b69 jal 950 - bb8: d575 beqz a0,ba4 + e5a: 0405 addi s0,s0,1 + e5c: 3b1d jal b92 + e5e: d575 beqz a0,e4a ssd1306_setbuf(0); - bba: 6489 lui s1,0x2 - bbc: 3591 jal a00 + e60: 6489 lui s1,0x2 + e62: 33c5 jal c42 for (uint8_t i = 0; i < 5; i++) { - bbe: 42048493 addi s1,s1,1056 # 2420 + e64: 58c48493 addi s1,s1,1420 # 258c ssd1306_setbuf(0); - bc2: 4401 li s0,0 + e68: 4401 li s0,0 ssd1306_drawstr(0, i * 10, boot[i], 1); - bc4: 4090 lw a2,0(s1) - bc6: 4685 li a3,1 - bc8: 85a2 mv a1,s0 - bca: 4501 li a0,0 - bcc: e4cff0ef jal 218 + 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_refresh(); - bd0: 3da1 jal a28 + e76: 3bd5 jal c6a beep(1200 + i * 120, 25); - bd2: 00141513 slli a0,s0,0x1 - bd6: 9522 add a0,a0,s0 - bd8: 050a slli a0,a0,0x2 - bda: 4b050513 addi a0,a0,1200 - bde: 0542 slli a0,a0,0x10 - be0: 8141 srli a0,a0,0x10 - be2: 45e5 li a1,25 - be4: f32ff0ef jal 316 + 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 Delay_Ms(220); - be8: 00142537 lui a0,0x142 - bec: 44050513 addi a0,a0,1088 # 142440 - bf0: d2eff0ef jal 11e + e8e: 00142537 lui a0,0x142 + e92: 44050513 addi a0,a0,1088 # 142440 + e96: a88ff0ef jal 11e for (uint8_t i = 0; i < 5; i++) { - bf4: 0429 addi s0,s0,10 - bf6: 03200793 li a5,50 - bfa: 0491 addi s1,s1,4 - bfc: fcf414e3 bne s0,a5,bc4 + e9a: 0429 addi s0,s0,10 + e9c: 03200793 li a5,50 + ea0: 0491 addi s1,s1,4 + ea2: fcf414e3 bne s0,a5,e6a draw_center_str(54, "press any key"); - c00: 6589 lui a1,0x2 - c02: 9a858593 addi a1,a1,-1624 # 19a8 - c06: 03600513 li a0,54 - c0a: 903ff0ef jal 50c + ea6: 6589 lui a1,0x2 + ea8: b0c58593 addi a1,a1,-1268 # 1b0c + eac: 03600513 li a0,54 + eb0: 897ff0ef jal 746 ssd1306_refresh(); - c0e: 3d29 jal a28 + eb4: 3b5d jal c6a beep(988, 120); - c10: 07800593 li a1,120 - c14: 3dc00513 li a0,988 - c18: efeff0ef jal 316 - c1c: 0c800413 li s0,200 + eb6: 07800593 li a1,120 + eba: 3dc00513 li a0,988 + ebe: c58ff0ef jal 316 + ec2: 0c800413 li s0,200 Buttons b = read_buttons(); - c20: 915ff0ef jal 534 - c24: 00855713 srli a4,a0,0x8 - c28: 01055793 srli a5,a0,0x10 - c2c: 02e10ea3 sb a4,61(sp) + ec6: 8a9ff0ef jal 76e + 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; - c30: 8f49 or a4,a4,a0 + ed6: 8f49 or a4,a4,a0 Buttons b = read_buttons(); - c32: 02f10f23 sb a5,62(sp) + ed8: 04f10123 sb a5,66(sp) if (b.ok || b.left || b.right) break; - c36: 8fd9 or a5,a5,a4 + edc: 8fd9 or a5,a5,a4 Buttons b = read_buttons(); - c38: 02a10e23 sb a0,60(sp) + ede: 04a10023 sb a0,64(sp) if (b.ok || b.left || b.right) break; - c3c: 0ff7f793 zext.b a5,a5 - c40: eb81 bnez a5,c50 + ee2: 0ff7f793 zext.b a5,a5 + ee6: eb81 bnez a5,ef6 Delay_Ms(20); - c42: 6575 lui a0,0x1d - c44: 4c050513 addi a0,a0,1216 # 1d4c0 + ee8: 6575 lui a0,0x1d + eea: 4c050513 addi a0,a0,1216 # 1d4c0 for (int i = 0; i < 200; i++) { - c48: 147d addi s0,s0,-1 + eee: 147d addi s0,s0,-1 Delay_Ms(20); - c4a: cd4ff0ef jal 11e + ef0: a2eff0ef jal 11e for (int i = 0; i < 200; i++) { - c4e: f869 bnez s0,c20 + ef4: f869 bnez s0,ec6 while (1) { led_blink(); Delay_Ms(700); } } ssd1306_init(); splash(); screen = SCR_SELECT; // pick a species before a pet is born - c50: c4018223 sb zero,-956(gp) # 20000040 + ef6: c2018b23 sb zero,-970(gp) # 20000032 Buttons prev = {0, 0, 0}; - c54: 4701 li a4,0 - c56: 4481 li s1,0 - c58: 4401 li s0,0 - c5a: c23a sw a4,4(sp) + 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 + f04: eadd bnez a3,fba + 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 + tick_wake = 0; + f14: c2018a23 sb zero,-972(gp) # 20000030 + 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 + 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 + f4c: c721 beqz a4,f94 + ssd1306_cmd(SSD1306_DISPLAYON); + f4e: 0af00513 li a0,175 + f52: 3181 jal b92 + disp_on = 1; + f54: 4785 li a5,1 + f56: c0f182a3 sb a5,-1019(gp) # 20000001 + idle_frames = 0; + f5a: c201a823 sw zero,-976(gp) # 2000002c + tick_acc = 0; + f5e: c2019523 sh zero,-982(gp) # 20000026 + // 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 + 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 + if (pet.alive) { + f94: c4818493 addi s1,gp,-952 # 20000044 + f98: 0104c703 lbu a4,16(s1) + f9c: db35 beqz a4,f10 + game_tick(); + f9e: d6eff0ef jal 50c + if (!pet.alive) { // it died in its sleep: show the grave + fa2: 0104c783 lbu a5,16(s1) + fa6: f3a5 bnez a5,f06 + ssd1306_cmd(SSD1306_DISPLAYON); + fa8: 0af00513 li a0,175 + fac: 36dd jal b92 + disp_on = 1; + fae: 4785 li a5,1 + fb0: c0f182a3 sb a5,-1019(gp) # 20000001 + idle_frames = 0; + fb4: c201a823 sw zero,-976(gp) # 2000002c + return; + fb8: b76d j f62 + fba: c43e sw a5,8(sp) + fbc: c23a sw a4,4(sp) + continue; + } + Buttons b = read_buttons(); - c5c: 8d9ff0ef jal 534 - c60: 01055793 srli a5,a0,0x10 - c64: 0ff57713 zext.b a4,a0 - c68: cc3a sw a4,24(sp) - c6a: 02f10923 sb a5,50(sp) - c6e: 0ff7f793 zext.b a5,a5 - c72: 00855693 srli a3,a0,0x8 - c76: ce3e sw a5,28(sp) + fbe: fb0ff0ef jal 76e + 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; - c78: 47e2 lw a5,24(sp) + fdc: 47d2 lw a5,20(sp) Buttons b = read_buttons(); - c7a: 0ff6f713 zext.b a4,a3 - c7e: ca3a sw a4,20(sp) - c80: 02a10823 sb a0,48(sp) - c84: 02d108a3 sb a3,49(sp) + 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; - c88: c002 sw zero,0(sp) - c8a: 4712 lw a4,4(sp) - c8c: c781 beqz a5,c94 - c8e: 00143793 seqz a5,s0 - c92: c03e sw a5,0(sp) + fea: c002 sw zero,0(sp) + fec: 4712 lw a4,4(sp) + fee: c789 beqz a5,ff8 + 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; - c94: 46d2 lw a3,20(sp) + ff8: 46e2 lw a3,24(sp) uint8_t ok_edge = b.ok && !prev.ok; - c96: 00014783 lbu a5,0(sp) + ffa: 00014783 lbu a5,0(sp) uint8_t left_edge = b.left && !prev.left; - c9a: 4581 li a1,0 - c9c: c299 beqz a3,ca2 - c9e: 0014b593 seqz a1,s1 + ffe: 4581 li a1,0 + 1000: c299 beqz a3,1006 + 1002: 00173593 seqz a1,a4 uint8_t right_edge = b.right && !prev.right; - ca2: 4572 lw a0,28(sp) + 1006: 4672 lw a2,28(sp) uint8_t left_edge = b.left && !prev.left; - ca4: 0ff5f613 zext.b a2,a1 + 1008: 0ff5f713 zext.b a4,a1 uint8_t right_edge = b.right && !prev.right; - ca8: 4681 li a3,0 - caa: c119 beqz a0,cb0 - cac: 00173693 seqz a3,a4 + 100c: 4681 li a3,0 + 100e: c219 beqz a2,1014 + 1010: 0014b693 seqz a3,s1 uint8_t any_edge = ok_edge | left_edge | right_edge; - cb0: 8fd1 or a5,a5,a2 - cb2: 8fd5 or a5,a5,a3 + 1014: 8fd9 or a5,a5,a4 + 1016: 8fd5 or a5,a5,a3 prev = b; if (any_edge) idle_frames = 0; - cb4: c399 beqz a5,cba - cb6: c401a023 sw zero,-960(gp) # 2000003c + 1018: c399 beqz a5,101e + 101a: c201a823 sw zero,-976(gp) # 2000002c - if (!disp_on) { - cba: c051c703 lbu a4,-1019(gp) # 20000001 - cbe: eb35 bnez a4,d32 - // screen is asleep: the first press only wakes it (not an action) - if (any_edge) { - cc0: c799 beqz a5,cce - ssd1306_cmd(SSD1306_DISPLAYON); - cc2: 0af00513 li a0,175 - cc6: 3169 jal 950 - disp_on = 1; - cc8: 4785 li a5,1 - cca: c0f182a3 sb a5,-1019(gp) # 20000001 + { + switch (screen) { + 101e: c361c703 lbu a4,-970(gp) # 20000032 + 1022: 4611 li a2,4 + 1024: 7ee66963 bltu a2,a4,1816 + 1028: 6609 lui a2,0x2 + 102a: 070a slli a4,a4,0x2 + 102c: ce060613 addi a2,a2,-800 # 1ce0 + 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 + sel_species = (sel_species + SPECIES_COUNT - 1) % SPECIES_COUNT; + 1038: c2f1c503 lbu a0,-977(gp) # 2000002b + 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 + beep(1047, 25); + 104a: 45e5 li a1,25 + 104c: 41700513 li a0,1047 + 1050: ac6ff0ef jal 316 + 1054: 4692 lw a3,4(sp) + } + if (right_edge) { + 1056: ce91 beqz a3,1072 + sel_species = (sel_species + 1) % SPECIES_COUNT; + 1058: c2f1c503 lbu a0,-977(gp) # 2000002b + 105c: 458d li a1,3 + 105e: 0505 addi a0,a0,1 + 1060: 898ff0ef jal f8 <__modsi3> + 1064: c2a187a3 sb a0,-977(gp) # 2000002b + beep(1047, 25); + 1068: 45e5 li a1,25 + 106a: 41700513 li a0,1047 + 106e: aa8ff0ef jal 316 + } + if (ok_edge) { // born! boot the chosen species + 1072: 4782 lw a5,0(sp) + 1074: c3b5 beqz a5,10d8 + 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.health = 100; + 1082: c4818793 addi a5,gp,-952 # 20000044 + 1086: 06400713 li a4,100 + 108a: 00e78223 sb a4,4(a5) + pet.species = sel_species; + 108e: c2f1c703 lbu a4,-977(gp) # 2000002b + 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 + evo_anim = 0; + 10b0: c4018223 sb zero,-956(gp) # 20000040 + for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; } + 10b4: c201ae23 sw zero,-964(gp) # 20000038 + 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 + for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; } + 10c4: c401a023 sw zero,-960(gp) # 2000003c + beep(659, 80); beep(988, 120); + 10c8: a4eff0ef jal 316 + 10cc: 07800593 li a1,120 + 10d0: 3dc00513 li a0,988 + 10d4: a42ff0ef jal 316 + ssd1306_setbuf(0); + 10d8: 36ad jal c42 + draw_center_str(0, "~ $ adopt --pet"); + 10da: 6589 lui a1,0x2 + 10dc: b1c58593 addi a1,a1,-1252 # 1b1c + 10e0: 4501 li a0,0 + 10e2: e64ff0ef jal 746 + 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_drawImage(48, 13, species_frames[sel_species][EXP_IDLE], + 10f4: c2f1c403 lbu s0,-977(gp) # 2000002b + 10f8: 6789 lui a5,0x2 + 10fa: 6ac78793 addi a5,a5,1708 # 26ac + 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 + p = s_cat(p, "< "); + 111a: 6589 lui a1,0x2 + 111c: b2c58593 addi a1,a1,-1236 # 1b2c + 1120: 0088 addi a0,sp,64 + 1122: 982ff0ef jal 2a4 + 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 + 112e: 97a2 add a5,a5,s0 + 1130: 438c lw a1,0(a5) + 1132: 972ff0ef jal 2a4 + p = s_cat(p, " >"); + 1136: 6589 lui a1,0x2 + 1138: b3058593 addi a1,a1,-1232 # 1b30 + 113c: 968ff0ef jal 2a4 + *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(56, "L/R pick OK go"); + 114e: 6589 lui a1,0x2 + 1150: b3458593 addi a1,a1,-1228 # 1b34 + draw_center_str(56, "OK: respawn"); + 1154: 03800513 li a0,56 + 1158: a98d j 15ca + } + draw_select(); + break; + + case SCR_MAIN: + if (left_edge) { + 115a: c185 beqz a1,117a + cursor = (cursor + ICON_COUNT - 1) % ICON_COUNT; + 115c: c2e1c503 lbu a0,-978(gp) # 2000002a + 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 + beep(1047, 25); + 116e: 45e5 li a1,25 + 1170: 41700513 li a0,1047 + 1174: 9a2ff0ef jal 316 + 1178: 4692 lw a3,4(sp) + } + if (right_edge) { + 117a: ce91 beqz a3,1196 + cursor = (cursor + 1) % ICON_COUNT; + 117c: c2e1c503 lbu a0,-978(gp) # 2000002a + 1180: 459d li a1,7 + 1182: 0505 addi a0,a0,1 + 1184: f75fe0ef jal f8 <__modsi3> + 1188: c2a18723 sb a0,-978(gp) # 2000002a + beep(1047, 25); + 118c: 45e5 li a1,25 + 118e: 41700513 li a0,1047 + 1192: 984ff0ef jal 316 + } + if (ok_edge) do_action(cursor); + 1196: 4782 lw a5,0(sp) + 1198: c4818493 addi s1,gp,-952 # 20000044 + 119c: 0e078e63 beqz a5,1298 + switch (act) { + 11a0: c2e1c783 lbu a5,-978(gp) # 2000002a + 11a4: 4699 li a3,6 + 11a6: 0ef6e963 bltu a3,a5,1298 + 11aa: 6689 lui a3,0x2 + 11ac: 078a slli a5,a5,0x2 + 11ae: cf468693 addi a3,a3,-780 # 1cf4 + 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 + 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 + 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 + 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 + beep(880, 60); beep(1175, 80); + 11f4: 922ff0ef jal 316 + 11f8: 05000593 li a1,80 + 11fc: 49700513 li a0,1175 + beep(784, 60); beep(1047, 60); beep(1319, 90); + 1200: 916ff0ef jal 316 + led_blink(); + 1204: 982ff0ef jal 386 + add_xp(4); + 1208: 4511 li a0,4 + 120a: a069 j 1294 +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 + 1216: fff7c713 not a4,a5 + 121a: 877d srai a4,a4,0x1f + 121c: 8ff9 and a5,a5,a4 + 121e: bf7d j 11dc + 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 + 122a: 07800593 li a1,120 + 122e: 0dc00513 li a0,220 + beep(659, 40); + 1232: 8e4ff0ef jal 316 + break; + 1236: a08d j 1298 + 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 + 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 + 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 + 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 + beep(988, 60); beep(1319, 60); beep(1568, 90); + 1272: 8a4ff0ef jal 316 + 1276: 03c00593 li a1,60 + 127a: 52700513 li a0,1319 + 127e: 898ff0ef jal 316 + 1282: 62000513 li a0,1568 + 1286: 05a00593 li a1,90 + 128a: 88cff0ef jal 316 + led_blink(); + 128e: 8f8ff0ef jal 386 + add_xp(6); + 1292: 4519 li a0,6 + add_xp(4); + 1294: 91cff0ef jal 3b0 + ssd1306_setbuf(0); + 1298: 9abff0ef jal c42 + draw_center_str(0, menu_labels[cursor]); + 129c: c2e1c783 lbu a5,-978(gp) # 2000002a + 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 + 12ac: 070a slli a4,a4,0x2 + 12ae: 97ba add a5,a5,a4 + 12b0: 438c lw a1,0(a5) + 12b2: c94ff0ef jal 746 + 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 + 12be: 00448703 lb a4,4(s1) + 12c2: 47f5 li a5,29 + 12c4: 00e7ce63 blt a5,a4,12e0 + 12c8: c381a783 lw a5,-968(gp) # 20000034 + 12cc: 8ba1 andi a5,a5,8 + 12ce: cb89 beqz a5,12e0 + ssd1306_drawstr(0, 0, "!", 1); + 12d0: 6609 lui a2,0x2 + 12d2: 4685 li a3,1 + 12d4: b4460613 addi a2,a2,-1212 # 1b44 + 12d8: 4581 li a1,0 + 12da: 4501 li a0,0 + 12dc: f3dfe0ef jal 218 + 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 + *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 + 1306: 4685 li a3,1 + 1308: 08000613 li a2,128 + 130c: 45a9 li a1,10 + 130e: 4501 li a0,0 + 1310: c90ff0ef jal 7a0 + if (pet.sleeping) { + 1314: 00f4c403 lbu s0,15(s1) + 1318: 38040463 beqz s0,16a0 + 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 + 1324: 45b9 li a1,14 + 1326: 04e00513 li a0,78 + 132a: eeffe0ef jal 218 + 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 + 1336: 45b1 li a1,12 + 1338: 05400513 li a0,84 + 133c: eddfe0ef jal 218 + 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 + 135a: c63e sw a5,12(sp) + 135c: 4732 lw a4,12(sp) + 135e: 478d li a5,3 + 1360: 02f70b63 beq a4,a5,1396 + 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 + 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 + if (anim_timer) return anim_exp; + 1376: c2c1c703 lbu a4,-980(gp) # 20000028 + 137a: 34070f63 beqz a4,16d8 + 137e: c281c503 lbu a0,-984(gp) # 20000024 + 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 + 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 + 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 + 13ae: 10f60f63 beq a2,a5,14cc + 13b2: 6789 lui a5,0x2 + 13b4: 5ac78793 addi a5,a5,1452 # 25ac + 13b8: 10f60a63 beq a2,a5,14cc + 13bc: 10041863 bnez s0,14cc + if (pet.form >= FORM_USER) { // shades + 13c0: 47b2 lw a5,12(sp) + 13c2: 14078263 beqz a5,1506 + 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 + 13ce: 97ba add a5,a5,a4 + 13d0: 0007c403 lbu s0,0(a5) + 13d4: c1418693 addi a3,gp,-1004 # 20000010 + 13d8: c1018793 addi a5,gp,-1008 # 2000000c + 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(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 + 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 + 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 + 143c: fff28593 addi a1,t0,-1 + 1440: 03f00793 li a5,63 + 1444: 00b7c663 blt a5,a1,1450 + 1448: 4681 li a3,0 + 144a: 1665 addi a2,a2,-7 + 144c: b54ff0ef jal 7a0 + 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 + 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(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(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_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_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 + if (pet.form == FORM_CLAUDE) { + 14cc: 4732 lw a4,12(sp) + 14ce: 478d li a5,3 + 14d0: 02f71b63 bne a4,a5,1506 + ssd1306_drawPixel(x - 2 + (frame & 3), y + 4, 1); + 14d4: c381a403 lw s0,-968(gp) # 20000034 + 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(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 + 1506: 4685 li a3,1 + 1508: 08000613 li a2,128 + 150c: 02e00593 li a1,46 + 1510: 4501 li a0,0 + 1512: a8eff0ef jal 7a0 + 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 + 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 + 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 + if (i == cursor) + 1548: 5702 lw a4,32(sp) + 154a: 0ff47793 zext.b a5,s0 + 154e: 00f71963 bne a4,a5,1560 + 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 + 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 + if (evo_anim) draw_evo_banner(); // celebratory overlay on top + 1568: c441c783 lbu a5,-956(gp) # 20000040 + 156c: 2a078363 beqz a5,1812 + 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_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 + draw_center_str(21, ">> evolving"); + 158e: 6589 lui a1,0x2 + 1590: b5058593 addi a1,a1,-1200 # 1b50 + 1594: 4555 li a0,21 + 1596: 9b0ff0ef jal 746 + p = s_cat(p, "[ "); + 159a: 6589 lui a1,0x2 + 159c: b5c58593 addi a1,a1,-1188 # 1b5c + 15a0: 0088 addi a0,sp,64 + 15a2: d03fe0ef jal 2a4 + 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 + 15ae: 078a slli a5,a5,0x2 + 15b0: 97ba add a5,a5,a4 + 15b2: 438c lw a1,0(a5) + 15b4: cf1fe0ef jal 2a4 + p = s_cat(p, " ]"); + 15b8: 6589 lui a1,0x2 + 15ba: b6058593 addi a1,a1,-1184 # 1b60 + 15be: ce7fe0ef jal 2a4 + *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 + 15ce: a491 j 1812 +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 + 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 + 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 +static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } + 1612: 02f6d363 bge a3,a5,1638 + 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 + 1628: 41700513 li a0,1047 + 162c: 03200593 li a1,50 + 1630: ce7fe0ef jal 316 + add_xp(3); + 1634: 450d li a0,3 + 1636: b9b9 j 1294 +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 + 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 + 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 + 1664: 03c00593 li a1,60 + 1668: 41700513 li a0,1047 + 166c: cabfe0ef jal 316 + 1670: 05a00593 li a1,90 + 1674: 52700513 li a0,1319 + 1678: b661 j 1200 +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 + screen = SCR_STATS; + 1684: 4789 li a5,2 + 1686: c2f18b23 sb a5,-970(gp) # 20000032 + beep(659, 40); + 168a: 02800593 li a1,40 + 168e: 29300513 li a0,659 + 1692: b645 j 1232 + screen = SCR_SETTINGS; + 1694: 4791 li a5,4 + 1696: c2f18b23 sb a5,-970(gp) # 20000032 + set_sel = 0; + 169a: c20186a3 sb zero,-979(gp) # 20000029 + 169e: b7f5 j 168a + uint32_t t = frame % 80; + 16a0: c381a783 lw a5,-968(gp) # 20000034 + 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 + 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 + 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 + if (pet.sleeping) return EXP_SLEEP; + 16d8: 4515 li a0,5 + 16da: ca0414e3 bnez s0,1382 + 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 + 16ea: 00148603 lb a2,1(s1) + 16ee: 4761 li a4,24 + 16f0: c8c759e3 bge a4,a2,1382 + 16f4: 00048603 lb a2,0(s1) + 16f8: 474d li a4,19 + 16fa: c8c754e3 bge a4,a2,1382 + if ((frame % 50) < 4) return EXP_BLINK; + 16fe: c381a503 lw a0,-968(gp) # 20000034 + 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 + else if (pet.form == FORM_GLITCH) spr = spr_glitch; + 1714: 6609 lui a2,0x2 + 1716: 5ac60613 addi a2,a2,1452 # 25ac + 171a: b9b5 j 1396 + 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 + 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 + for (uint8_t i = 0; i < pet.poop; i++) + 1738: 0ff47413 zext.b s0,s0 + 173c: bbf1 j 1518 + draw_main(); + break; + + case SCR_STATS: + if (any_edge) { screen = SCR_MAIN; beep(880, 30); } + 173e: cb89 beqz a5,1750 + 1740: 4785 li a5,1 + 1742: 45f9 li a1,30 + 1744: 37000513 li a0,880 + 1748: c2f18b23 sb a5,-970(gp) # 20000032 + 174c: bcbfe0ef jal 316 + ssd1306_setbuf(0); + 1750: cf2ff0ef jal c42 + draw_center_str(0, "~/pet $ stat"); + 1754: 6589 lui a1,0x2 + 1756: b6458593 addi a1,a1,-1180 # 1b64 + 175a: 4501 li a0,0 + draw_bar(10, "FOOD", pet.satiety); + 175c: c4818413 addi s0,gp,-952 # 20000044 + draw_center_str(0, "~/pet $ stat"); + 1760: fe7fe0ef jal 746 + draw_bar(10, "FOOD", pet.satiety); + 1764: 00040603 lb a2,0(s0) + 1768: 6589 lui a1,0x2 + 176a: b7458593 addi a1,a1,-1164 # 1b74 + 176e: 4529 li a0,10 + 1770: 9e0ff0ef jal 950 + draw_bar(19, "HAPPY", pet.happy); + 1774: 00140603 lb a2,1(s0) + 1778: 6589 lui a1,0x2 + 177a: b7c58593 addi a1,a1,-1156 # 1b7c + 177e: 454d li a0,19 + 1780: 9d0ff0ef jal 950 + draw_bar(28, "ENERGY", pet.energy); + 1784: 00240603 lb a2,2(s0) + 1788: 6589 lui a1,0x2 + 178a: b8458593 addi a1,a1,-1148 # 1b84 + 178e: 4571 li a0,28 + 1790: 9c0ff0ef jal 950 + draw_bar(37, "CLEAN", pet.hygiene); + 1794: 00340603 lb a2,3(s0) + 1798: 6589 lui a1,0x2 + 179a: b8c58593 addi a1,a1,-1140 # 1b8c + 179e: 02500513 li a0,37 + 17a2: 9aeff0ef jal 950 + draw_bar(46, "HEALTH", pet.health); + 17a6: 00440603 lb a2,4(s0) + 17aa: 6589 lui a1,0x2 + 17ac: b9458593 addi a1,a1,-1132 # 1b94 + 17b0: 02e00513 li a0,46 + 17b4: 99cff0ef jal 950 + 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 + p = s_cat(p, " xp "); + 17ce: 6589 lui a1,0x2 + 17d0: b9c58593 addi a1,a1,-1124 # 1b9c + 17d4: ad1fe0ef jal 2a4 + if (pet.level < MAX_LEVEL) { + 17d8: 478d li a5,3 + 17da: 0a97ec63 bltu a5,s1,1892 + 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 + *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 + 17f4: 94be add s1,s1,a5 + 17f6: 0004d583 lhu a1,0(s1) + 17fa: 0505 addi a0,a0,1 + 17fc: abbfe0ef jal 2b6 + *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_refresh(); + 1812: c58ff0ef jal c6a + 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 + 181a: 6789 lui a5,0x2 + 181c: 7e478793 addi a5,a5,2020 # 27e4 + 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 + 182c: cb89 beqz a5,183e + 182e: 00f46863 bltu s0,a5,183e ssd1306_cmd(SSD1306_DISPLAYOFF); + 1832: 0ae00513 li a0,174 + 1836: b5cff0ef jal b92 disp_on = 0; + 183a: c00182a3 sb zero,-1019(gp) # 20000001 } } if (anim_timer) anim_timer--; - cce: c3a1c783 lbu a5,-966(gp) # 20000036 - cd2: c781 beqz a5,cda - cd4: 17fd addi a5,a5,-1 - cd6: c2f18d23 sb a5,-966(gp) # 20000036 + 183e: c2c1c783 lbu a5,-980(gp) # 20000028 + 1842: c781 beqz a5,184a + 1844: 17fd addi a5,a5,-1 + 1846: c2f18623 sb a5,-980(gp) # 20000028 if (evo_anim) evo_anim--; - cda: c501c783 lbu a5,-944(gp) # 2000004c - cde: c781 beqz a5,ce6 - ce0: 17fd addi a5,a5,-1 - ce2: c4f18823 sb a5,-944(gp) # 2000004c + 184a: c441c783 lbu a5,-956(gp) # 20000040 + 184e: c781 beqz a5,1856 + 1850: 17fd addi a5,a5,-1 + 1852: c4f18223 sb a5,-956(gp) # 20000040 // advance game time independent of screen / display state if (pet.alive && ++tick_acc >= TICK_FRAMES) { - ce6: c5418793 addi a5,gp,-940 # 20000050 - cea: 0107c783 lbu a5,16(a5) - cee: c5418413 addi s0,gp,-940 # 20000050 - cf2: cf81 beqz a5,d0a - cf4: c381d783 lhu a5,-968(gp) # 20000034 - cf8: 0f900693 li a3,249 - cfc: 0785 addi a5,a5,1 - cfe: 07c2 slli a5,a5,0x10 - d00: 83c1 srli a5,a5,0x10 - d02: 24f6e7e3 bltu a3,a5,1750 - d06: c2f19c23 sh a5,-968(gp) # 20000034 + 1856: c581c783 lbu a5,-936(gp) # 20000054 + 185a: cf81 beqz a5,1872 + 185c: c2a1d783 lhu a5,-982(gp) # 20000026 + 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 + 186e: c2f19523 sh a5,-982(gp) # 20000026 tick_acc = 0; game_tick(); } frame++; - d0a: c341a783 lw a5,-972(gp) # 20000030 + 1872: c381a783 lw a5,-968(gp) # 20000034 idle_frames++; Delay_Ms(FRAME_MS); - d0e: 00058537 lui a0,0x58 - d12: e4050513 addi a0,a0,-448 # 57e40 + 1876: 00058537 lui a0,0x58 + idle_frames++; + 187a: 0405 addi s0,s0,1 frame++; - d16: 0785 addi a5,a5,1 - d18: c2f1aa23 sw a5,-972(gp) # 20000030 - idle_frames++; - d1c: c401a783 lw a5,-960(gp) # 2000003c - d20: 0785 addi a5,a5,1 - d22: c4f1a023 sw a5,-960(gp) # 2000003c + 187c: 0785 addi a5,a5,1 Delay_Ms(FRAME_MS); - d26: bf8ff0ef jal 11e - prev = b; - d2a: 4772 lw a4,28(sp) - d2c: 44d2 lw s1,20(sp) - d2e: 4462 lw s0,24(sp) - while (1) { - d30: b72d j c5a - switch (screen) { - d32: c441c703 lbu a4,-956(gp) # 20000040 - d36: 4611 li a2,4 - d38: 7ee66963 bltu a2,a4,152a - d3c: 6609 lui a2,0x2 - d3e: 070a slli a4,a4,0x2 - d40: b7460613 addi a2,a2,-1164 # 1b74 - d44: 9732 add a4,a4,a2 - d46: 4318 lw a4,0(a4) - d48: 8702 jr a4 - if (left_edge) { - d4a: c185 beqz a1,d6a - sel_species = (sel_species + SPECIES_COUNT - 1) % SPECIES_COUNT; - d4c: c3d1c503 lbu a0,-963(gp) # 20000039 - d50: 458d li a1,3 - d52: c236 sw a3,4(sp) - d54: 0509 addi a0,a0,2 - d56: ba2ff0ef jal f8 <__modsi3> - d5a: c2a18ea3 sb a0,-963(gp) # 20000039 - beep(1047, 25); - d5e: 45e5 li a1,25 - d60: 41700513 li a0,1047 - d64: db2ff0ef jal 316 - d68: 4692 lw a3,4(sp) - if (right_edge) { - d6a: ce91 beqz a3,d86 - sel_species = (sel_species + 1) % SPECIES_COUNT; - d6c: c3d1c503 lbu a0,-963(gp) # 20000039 - d70: 458d li a1,3 - d72: 0505 addi a0,a0,1 - d74: b84ff0ef jal f8 <__modsi3> - d78: c2a18ea3 sb a0,-963(gp) # 20000039 - beep(1047, 25); - d7c: 45e5 li a1,25 - d7e: 41700513 li a0,1047 - d82: d94ff0ef jal 316 - if (ok_edge) { // born! boot the chosen species - d86: 4782 lw a5,0(sp) - d88: c3b5 beqz a5,dec - pet.satiety = 80; - d8a: 645a5737 lui a4,0x645a5 - d8e: 05070713 addi a4,a4,80 # 645a5050 <_eusrstack+0x445a4850> - d92: c4e1aa23 sw a4,-940(gp) # 20000050 - pet.health = 100; - d96: c5418793 addi a5,gp,-940 # 20000050 - d9a: 06400713 li a4,100 - d9e: 00e78223 sb a4,4(a5) - pet.species = sel_species; - da2: c3d1c703 lbu a4,-963(gp) # 20000039 - pet.age_min = 0; - da6: 00079323 sh zero,6(a5) - pet.xp = 0; - daa: 00079423 sh zero,8(a5) - pet.species = sel_species; - dae: 00e78523 sb a4,10(a5) - pet.level = 1; - db2: 4705 li a4,1 - db4: 00e785a3 sb a4,11(a5) - pet.form = FORM_PROC; - db8: 0007a623 sw zero,12(a5) - pet.alive = 1; - dbc: 00e78823 sb a4,16(a5) - cursor = 0; - dc0: c2018e23 sb zero,-964(gp) # 20000038 - evo_anim = 0; - dc4: c4018823 sb zero,-944(gp) # 2000004c - for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; } - dc8: c401a423 sw zero,-952(gp) # 20000044 - beep(659, 80); beep(988, 120); - dcc: 05000593 li a1,80 - dd0: 29300513 li a0,659 - screen = SCR_MAIN; - dd4: c4e18223 sb a4,-956(gp) # 20000040 - for (int i = 0; i < N_COUNT; i++) { warn_flag[i] = 0; crit_flag[i] = 0; } - dd8: c401a623 sw zero,-948(gp) # 20000048 - beep(659, 80); beep(988, 120); - ddc: d3aff0ef jal 316 - de0: 07800593 li a1,120 - de4: 3dc00513 li a0,988 - de8: d2eff0ef jal 316 - ssd1306_setbuf(0); - dec: 3911 jal a00 - draw_center_str(0, "~ $ adopt --pet"); - dee: 6589 lui a1,0x2 - df0: 9b858593 addi a1,a1,-1608 # 19b8 - df4: 4501 li a0,0 - df6: f16ff0ef jal 50c - if((x >= SSD1306_W) || (y >= SSD1306_H)) return; - dfa: 4685 li a3,1 - dfc: 08000613 li a2,128 - e00: 45a9 li a1,10 - e02: 4501 li a0,0 - e04: f62ff0ef jal 566 - ssd1306_drawImage(48, 13, species_frames[sel_species][EXP_IDLE], - e08: c3d1c403 lbu s0,-963(gp) # 20000039 - e0c: 6789 lui a5,0x2 - e0e: 54078793 addi a5,a5,1344 # 2540 - e12: 00341713 slli a4,s0,0x3 - e16: 8f01 sub a4,a4,s0 - e18: 070a slli a4,a4,0x2 - e1a: 97ba add a5,a5,a4 - e1c: 4390 lw a2,0(a5) - e1e: 02000713 li a4,32 - e22: 86ba mv a3,a4 - e24: 45b5 li a1,13 - e26: 03000513 li a0,48 - e2a: 94dff0ef jal 776 - p = s_cat(p, "< "); - e2e: 6589 lui a1,0x2 - e30: 9c858593 addi a1,a1,-1592 # 19c8 - e34: 1868 addi a0,sp,60 - e36: c6eff0ef jal 2a4 - p = s_cat(p, species_names[sel_species]); - e3a: 6789 lui a5,0x2 - e3c: 040a slli s0,s0,0x2 - e3e: 43478793 addi a5,a5,1076 # 2434 - e42: 97a2 add a5,a5,s0 - e44: 438c lw a1,0(a5) - e46: c5eff0ef jal 2a4 - p = s_cat(p, " >"); - e4a: 6589 lui a1,0x2 - e4c: 9cc58593 addi a1,a1,-1588 # 19cc - e50: c54ff0ef jal 2a4 - *p = 0; - e54: 00050023 sb zero,0(a0) - draw_center_str(47, line); - e58: 186c addi a1,sp,60 - e5a: 02f00513 li a0,47 - e5e: eaeff0ef jal 50c - draw_center_str(56, "L/R pick OK go"); - e62: 6589 lui a1,0x2 - e64: 9d058593 addi a1,a1,-1584 # 19d0 - draw_center_str(56, "OK: respawn"); - e68: 03800513 li a0,56 - e6c: a98d j 12de - if (left_edge) { - e6e: c185 beqz a1,e8e - cursor = (cursor + ICON_COUNT - 1) % ICON_COUNT; - e70: c3c1c503 lbu a0,-964(gp) # 20000038 - e74: 459d li a1,7 - e76: c236 sw a3,4(sp) - e78: 0519 addi a0,a0,6 - e7a: a7eff0ef jal f8 <__modsi3> - e7e: c2a18e23 sb a0,-964(gp) # 20000038 - beep(1047, 25); - e82: 45e5 li a1,25 - e84: 41700513 li a0,1047 - e88: c8eff0ef jal 316 - e8c: 4692 lw a3,4(sp) - if (right_edge) { - e8e: ce91 beqz a3,eaa - cursor = (cursor + 1) % ICON_COUNT; - e90: c3c1c503 lbu a0,-964(gp) # 20000038 - e94: 459d li a1,7 - e96: 0505 addi a0,a0,1 - e98: a60ff0ef jal f8 <__modsi3> - e9c: c2a18e23 sb a0,-964(gp) # 20000038 - beep(1047, 25); - ea0: 45e5 li a1,25 - ea2: 41700513 li a0,1047 - ea6: c70ff0ef jal 316 - if (ok_edge) do_action(cursor); - eaa: 4782 lw a5,0(sp) - eac: c5418493 addi s1,gp,-940 # 20000050 - eb0: 0e078e63 beqz a5,fac - switch (act) { - eb4: c3c1c783 lbu a5,-964(gp) # 20000038 - eb8: 4699 li a3,6 - eba: 0ef6e963 bltu a3,a5,fac - ebe: 6689 lui a3,0x2 - ec0: 078a slli a5,a5,0x2 - ec2: b8868693 addi a3,a3,-1144 # 1b88 - ec6: 97b6 add a5,a5,a3 - ec8: 439c lw a5,0(a5) - eca: 8782 jr a5 - pet.satiety = clamp100(pet.satiety + 30); - ecc: 00048783 lb a5,0(s1) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - ed0: 06400713 li a4,100 - pet.satiety = clamp100(pet.satiety + 30); - ed4: 07f9 addi a5,a5,30 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - ed6: 04f75563 bge a4,a5,f20 - eda: 87ba mv a5,a4 - edc: 00f48023 sb a5,0(s1) - pet.hygiene = clamp100(pet.hygiene - 5); - ee0: 00348783 lb a5,3(s1) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - ee4: 06400713 li a4,100 - pet.hygiene = clamp100(pet.hygiene - 5); - ee8: 17ed addi a5,a5,-5 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - eea: 04f75063 bge a4,a5,f2a - eee: 87ba mv a5,a4 - ef0: 00f481a3 sb a5,3(s1) -static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; } - ef4: 4411 li s0,4 - ef6: c2818823 sb s0,-976(gp) # 2000002c - efa: 4731 li a4,12 - beep(880, 60); beep(1175, 80); - efc: 03c00593 li a1,60 - f00: 37000513 li a0,880 -static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; } - f04: c2e18d23 sb a4,-966(gp) # 20000036 - beep(880, 60); beep(1175, 80); - f08: c0eff0ef jal 316 - f0c: 05000593 li a1,80 - f10: 49700513 li a0,1175 - beep(784, 60); beep(1047, 60); beep(1319, 90); - f14: c02ff0ef jal 316 - led_blink(); - f18: c6eff0ef jal 386 - add_xp(4); - f1c: 4511 li a0,4 - f1e: a069 j fa8 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - f20: fff7c713 not a4,a5 - f24: 877d srai a4,a4,0x1f - f26: 8ff9 and a5,a5,a4 - f28: bf55 j edc - f2a: fff7c713 not a4,a5 - f2e: 877d srai a4,a4,0x1f - f30: 8ff9 and a5,a5,a4 - f32: bf7d j ef0 - if (pet.energy < 15) { beep(220, 120); break; } // too tired - f34: 00248703 lb a4,2(s1) - f38: 47b9 li a5,14 - f3a: 00e7c963 blt a5,a4,f4c - f3e: 07800593 li a1,120 - f42: 0dc00513 li a0,220 - beep(659, 40); - f46: bd0ff0ef jal 316 - break; - f4a: a08d j fac - pet.happy = clamp100(pet.happy + 25); - f4c: 00148783 lb a5,1(s1) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - f50: 06400693 li a3,100 - pet.happy = clamp100(pet.happy + 25); - f54: 07e5 addi a5,a5,25 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - f56: 38f6d763 bge a3,a5,12e4 - f5a: 87b6 mv a5,a3 - f5c: 00f480a3 sb a5,1(s1) - pet.energy = clamp100(pet.energy - 12); - f60: ff470793 addi a5,a4,-12 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - f64: 06400713 li a4,100 - f68: 00f75363 bge a4,a5,f6e - f6c: 87ba mv a5,a4 - f6e: 00f48123 sb a5,2(s1) -static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; } - f72: 4709 li a4,2 - f74: c2e18823 sb a4,-976(gp) # 2000002c - beep(988, 60); beep(1319, 60); beep(1568, 90); - f78: 03c00593 li a1,60 -static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; } - f7c: 4731 li a4,12 - beep(988, 60); beep(1319, 60); beep(1568, 90); - f7e: 3dc00513 li a0,988 -static void react(uint8_t exp) { anim_exp = exp; anim_timer = ANIM_FRAMES; } - f82: c2e18d23 sb a4,-966(gp) # 20000036 - beep(988, 60); beep(1319, 60); beep(1568, 90); - f86: b90ff0ef jal 316 - f8a: 03c00593 li a1,60 - f8e: 52700513 li a0,1319 - f92: b84ff0ef jal 316 - f96: 62000513 li a0,1568 - f9a: 05a00593 li a1,90 - f9e: b78ff0ef jal 316 - led_blink(); - fa2: be4ff0ef jal 386 - add_xp(6); - fa6: 4519 li a0,6 - add_xp(4); - fa8: c08ff0ef jal 3b0 - ssd1306_setbuf(0); - fac: a55ff0ef jal a00 - draw_center_str(0, menu_labels[cursor]); - fb0: c3c1c783 lbu a5,-964(gp) # 20000038 - fb4: 4501 li a0,0 - fb6: d03e sw a5,32(sp) - fb8: 5702 lw a4,32(sp) - fba: 6789 lui a5,0x2 - fbc: 5c478793 addi a5,a5,1476 # 25c4 - fc0: 070a slli a4,a4,0x2 - fc2: 97ba add a5,a5,a4 - fc4: 438c lw a1,0(a5) - fc6: d46ff0ef jal 50c - if (pet.alive && pet.health < 30 && (frame & 8)) - fca: 0104c783 lbu a5,16(s1) - fce: c83e sw a5,16(sp) - fd0: c395 beqz a5,ff4 - fd2: 00448703 lb a4,4(s1) - fd6: 47f5 li a5,29 - fd8: 00e7ce63 blt a5,a4,ff4 - fdc: c341a783 lw a5,-972(gp) # 20000030 - fe0: 8ba1 andi a5,a5,8 - fe2: cb89 beqz a5,ff4 - ssd1306_drawstr(0, 0, "!", 1); - fe4: 6609 lui a2,0x2 - fe6: 4685 li a3,1 - fe8: 9e060613 addi a2,a2,-1568 # 19e0 - fec: 4581 li a1,0 - fee: 4501 li a0,0 - ff0: a28ff0ef jal 218 - bp = u_cat(bp, pet.level); - ff4: 00b4c583 lbu a1,11(s1) - *bp++ = 'L'; - ff8: 04c00793 li a5,76 - bp = u_cat(bp, pet.level); - ffc: 03510513 addi a0,sp,53 - *bp++ = 'L'; - 1000: 02f10a23 sb a5,52(sp) - bp = u_cat(bp, pet.level); - 1004: ab2ff0ef jal 2b6 - *bp = 0; - 1008: 00050023 sb zero,0(a0) - ssd1306_drawstr(SSD1306_W - 2 * 8, 0, badge, 1); - 100c: 4685 li a3,1 - 100e: 1850 addi a2,sp,52 - 1010: 4581 li a1,0 - 1012: 07000513 li a0,112 - 1016: a02ff0ef jal 218 - 101a: 4685 li a3,1 - 101c: 08000613 li a2,128 - 1020: 45a9 li a1,10 - 1022: 4501 li a0,0 - 1024: d42ff0ef jal 566 - if (pet.sleeping) { - 1028: 00f4c403 lbu s0,15(s1) - 102c: 38040463 beqz s0,13b4 - ssd1306_drawstr(px + PANA_W - 2, 14, "z", 1); - 1030: 6609 lui a2,0x2 - 1032: 4685 li a3,1 - 1034: 9e460613 addi a2,a2,-1564 # 19e4 - 1038: 45b9 li a1,14 - 103a: 04e00513 li a0,78 - 103e: 9daff0ef jal 218 - ssd1306_drawstr(px + PANA_W + 4, 12, "Z", 1); - 1042: 6609 lui a2,0x2 - 1044: 4685 li a3,1 - 1046: 9e860613 addi a2,a2,-1560 # 19e8 - 104a: 45b1 li a1,12 - 104c: 05400513 li a0,84 - 1050: 9c8ff0ef jal 218 - 1054: 03000793 li a5,48 - 1058: c43e sw a5,8(sp) - px = 48; py = 16; - 105a: 47c1 li a5,16 - 105c: c03e sw a5,0(sp) - 105e: 03000793 li a5,48 - 1062: c23e sw a5,4(sp) - if (pet.form == FORM_CLAUDE) spr = spr_claude; - 1064: 00c4c783 lbu a5,12(s1) - 1068: 6609 lui a2,0x2 - 106a: 4c060613 addi a2,a2,1216 # 24c0 - 106e: c63e sw a5,12(sp) - 1070: 4732 lw a4,12(sp) - 1072: 478d li a5,3 - 1074: 02f70b63 beq a4,a5,10aa - else if (pet.form == FORM_GLITCH) spr = spr_glitch; - 1078: 46b2 lw a3,12(sp) - 107a: 4711 li a4,4 - 107c: 3ae68663 beq a3,a4,1428 - if (!pet.alive) return EXP_DEAD; - 1080: 4742 lw a4,16(sp) - else spr = species_frames[pet.species][current_expression()]; - 1082: 00a4c683 lbu a3,10(s1) - if (!pet.alive) return EXP_DEAD; - 1086: 4519 li a0,6 - 1088: c719 beqz a4,1096 - if (anim_timer) return anim_exp; - 108a: c3a1c703 lbu a4,-966(gp) # 20000036 - 108e: 34070f63 beqz a4,13ec - 1092: c301c503 lbu a0,-976(gp) # 2000002c - else spr = species_frames[pet.species][current_expression()]; - 1096: 00369793 slli a5,a3,0x3 - 109a: 8f95 sub a5,a5,a3 - 109c: 6709 lui a4,0x2 - 109e: 97aa add a5,a5,a0 - 10a0: 078a slli a5,a5,0x2 - 10a2: 54070713 addi a4,a4,1344 # 2540 - 10a6: 97ba add a5,a5,a4 - 10a8: 4390 lw a2,0(a5) - ssd1306_drawImage(x, y, spr, PANA_W, PANA_H, 0); - 10aa: 4582 lw a1,0(sp) - 10ac: 4522 lw a0,8(sp) - 10ae: 02000713 li a4,32 - 10b2: 86ba mv a3,a4 - 10b4: c832 sw a2,16(sp) - 10b6: ec0ff0ef jal 776 - if (spr != spr_claude && spr != spr_glitch && !pet.sleeping) - 10ba: 4642 lw a2,16(sp) - 10bc: 6789 lui a5,0x2 - 10be: 4c078793 addi a5,a5,1216 # 24c0 - 10c2: 10f60f63 beq a2,a5,11e0 - 10c6: 6789 lui a5,0x2 - 10c8: 44078793 addi a5,a5,1088 # 2440 - 10cc: 10f60a63 beq a2,a5,11e0 - 10d0: 10041863 bnez s0,11e0 - if (pet.form >= FORM_USER) { // shades - 10d4: 47b2 lw a5,12(sp) - 10d6: 14078263 beqz a5,121a - uint8_t cy = eye_cy[sp], lx = eye_lx[sp], rx = eye_rx[sp]; - 10da: 00a4c703 lbu a4,10(s1) - 10de: c0c18793 addi a5,gp,-1012 # 20000008 - 10e2: 97ba add a5,a5,a4 - 10e4: 0007c403 lbu s0,0(a5) - 10e8: c1418693 addi a3,gp,-1004 # 20000010 - 10ec: c1018793 addi a5,gp,-1008 # 2000000c - 10f0: 97ba add a5,a5,a4 - 10f2: 9736 add a4,a4,a3 - ssd1306_fillRect(x + lx - 3, y + cy - 2, 7, 4, 0); - 10f4: 0007c303 lbu t1,0(a5) - 10f8: 00074703 lbu a4,0(a4) - 10fc: 4682 lw a3,0(sp) - 10fe: 4792 lw a5,4(sp) - 1100: 461d li a2,7 - 1102: 00d702b3 add t0,a4,a3 - 1106: 979a add a5,a5,t1 - 1108: ffe28593 addi a1,t0,-2 - 110c: ffd78513 addi a0,a5,-3 - 1110: 4701 li a4,0 - 1112: 4691 li a3,4 - 1114: d61a sw t1,44(sp) - 1116: d416 sw t0,40(sp) - 1118: d22e sw a1,36(sp) - 111a: c83e sw a5,16(sp) - 111c: 8a4ff0ef jal 1c0 - ssd1306_fillRect(x + rx - 3, y + cy - 2, 7, 4, 0); - 1120: 4792 lw a5,4(sp) - 1122: 5592 lw a1,36(sp) - 1124: 4701 li a4,0 - 1126: 00878533 add a0,a5,s0 - 112a: 461d li a2,7 - 112c: 4691 li a3,4 - 112e: 1575 addi a0,a0,-3 - 1130: 890ff0ef jal 1c0 - if (rx - lx > 7) - 1134: 5332 lw t1,44(sp) - 1136: 471d li a4,7 - 1138: 47c2 lw a5,16(sp) - 113a: 40640633 sub a2,s0,t1 - 113e: 52a2 lw t0,40(sp) - 1140: 02c75263 bge a4,a2,1164 - ssd1306_drawFastHLine(x + lx + 4, y + cy - 1, rx - lx - 7, 0); - 1144: 00478513 addi a0,a5,4 - 1148: 07f00793 li a5,127 - 114c: 00a7cc63 blt a5,a0,1164 - 1150: fff28593 addi a1,t0,-1 - 1154: 03f00793 li a5,63 - 1158: 00b7c663 blt a5,a1,1164 - 115c: 4681 li a3,0 - 115e: 1665 addi a2,a2,-7 - 1160: c06ff0ef jal 566 - if (pet.form >= FORM_ROOT) { // gaming headset + mic boom - 1164: 4732 lw a4,12(sp) - 1166: 4785 li a5,1 - 1168: 0af70963 beq a4,a5,121a - ssd1306_drawLine(x + 3, y + 10, x + 9, y + 2, 0); - 116c: 4792 lw a5,4(sp) - 116e: 078d addi a5,a5,3 - 1170: d23e sw a5,36(sp) - 1172: 4782 lw a5,0(sp) - 1174: 5512 lw a0,36(sp) - 1176: 00a78413 addi s0,a5,10 - 117a: 4792 lw a5,4(sp) - 117c: 85a2 mv a1,s0 - 117e: 07a5 addi a5,a5,9 - 1180: d43e sw a5,40(sp) - 1182: 4782 lw a5,0(sp) - 1184: 5622 lw a2,40(sp) - 1186: 0789 addi a5,a5,2 - 1188: 86be mv a3,a5 - 118a: c83e sw a5,16(sp) - 118c: c1eff0ef jal 5aa - ssd1306_drawLine(x + 9, y + 2, x + 23, y + 2, 0); - 1190: 4792 lw a5,4(sp) - 1192: 46c2 lw a3,16(sp) - 1194: 5522 lw a0,40(sp) - 1196: 07dd addi a5,a5,23 - 1198: 863e mv a2,a5 - 119a: 85b6 mv a1,a3 - 119c: d63e sw a5,44(sp) - 119e: c0cff0ef jal 5aa - ssd1306_drawLine(x + 23, y + 2, x + 29, y + 10, 0); - 11a2: 4792 lw a5,4(sp) - 11a4: 45c2 lw a1,16(sp) - 11a6: 5532 lw a0,44(sp) - 11a8: 01d78613 addi a2,a5,29 - 11ac: 86a2 mv a3,s0 - 11ae: bfcff0ef jal 5aa - ssd1306_fillRect(x + 1, y + 12, 4, 7, 0); - 11b2: 4782 lw a5,0(sp) - 11b4: 469d li a3,7 - 11b6: 4611 li a2,4 - 11b8: 00c78593 addi a1,a5,12 - 11bc: 4792 lw a5,4(sp) - 11be: 4701 li a4,0 - 11c0: 00178513 addi a0,a5,1 - 11c4: ffdfe0ef jal 1c0 - ssd1306_drawLine(x + 3, y + 18, x + 10, y + 24, 0); - 11c8: 4782 lw a5,0(sp) - 11ca: 5512 lw a0,36(sp) - 11cc: 01878693 addi a3,a5,24 - 11d0: 4792 lw a5,4(sp) - 11d2: 00a78613 addi a2,a5,10 - 11d6: 4782 lw a5,0(sp) - 11d8: 01278593 addi a1,a5,18 - 11dc: bceff0ef jal 5aa - if (pet.form == FORM_CLAUDE) { - 11e0: 4732 lw a4,12(sp) - 11e2: 478d li a5,3 - 11e4: 02f71b63 bne a4,a5,121a - ssd1306_drawPixel(x - 2 + (frame & 3), y + 4, 1); - 11e8: c341a403 lw s0,-972(gp) # 20000030 - 11ec: 4782 lw a5,0(sp) - 11ee: 4605 li a2,1 - 11f0: 00347513 andi a0,s0,3 - 11f4: 00478593 addi a1,a5,4 - 11f8: 47a2 lw a5,8(sp) - 11fa: 1579 addi a0,a0,-2 - 11fc: 953e add a0,a0,a5 - 11fe: f87fe0ef jal 184 - ssd1306_drawPixel(x + PANA_W + (frame & 1), y + 10, 1); - 1202: 4782 lw a5,0(sp) - 1204: 00147513 andi a0,s0,1 - 1208: 02050513 addi a0,a0,32 - 120c: 00a78593 addi a1,a5,10 - 1210: 47a2 lw a5,8(sp) - 1212: 4605 li a2,1 - 1214: 953e add a0,a0,a5 - 1216: f6ffe0ef jal 184 - 121a: 4685 li a3,1 - 121c: 08000613 li a2,128 - 1220: 02e00593 li a1,46 - 1224: 4501 li a0,0 - 1226: b40ff0ef jal 566 - for (uint8_t i = 0; i < pet.poop; i++) - 122a: 4401 li s0,0 - 122c: 00e4c783 lbu a5,14(s1) - 1230: 20f46063 bltu s0,a5,1430 - 1234: 4401 li s0,0 - ssd1306_drawImage(x, 48, menu_icons[i], ICON_W, ICON_H, 0); - 1236: 6709 lui a4,0x2 - 1238: 59470713 addi a4,a4,1428 # 2594 - 123c: 00241793 slli a5,s0,0x2 - 1240: 97ba add a5,a5,a4 - 1242: 00341493 slli s1,s0,0x3 - 1246: 4390 lw a2,0(a5) - 1248: 94a2 add s1,s1,s0 - 124a: 4741 li a4,16 - 124c: 0486 slli s1,s1,0x1 - 124e: 86ba mv a3,a4 - 1250: 03000593 li a1,48 - 1254: 00148513 addi a0,s1,1 - 1258: d1eff0ef jal 776 - if (i == cursor) - 125c: 5702 lw a4,32(sp) - 125e: 0ff47793 zext.b a5,s0 - 1262: 00f71963 bne a4,a5,1274 - ssd1306_drawRect(x - 1, 47, ICON_W + 1, ICON_H + 1, 1); - 1266: 46c5 li a3,17 - 1268: 8636 mv a2,a3 - 126a: 02f00593 li a1,47 - 126e: 8526 mv a0,s1 - 1270: c4eff0ef jal 6be - for (uint8_t i = 0; i < ICON_COUNT; i++) { - 1274: 0405 addi s0,s0,1 - 1276: 479d li a5,7 - 1278: faf41fe3 bne s0,a5,1236 - if (evo_anim) draw_evo_banner(); // celebratory overlay on top - 127c: c501c783 lbu a5,-944(gp) # 2000004c - 1280: 2a078363 beqz a5,1526 - ssd1306_fillRect(6, 18, SSD1306_W - 12, 24, 0); - 1284: 4701 li a4,0 - 1286: 46e1 li a3,24 - 1288: 07400613 li a2,116 - 128c: 45c9 li a1,18 - 128e: 4519 li a0,6 - 1290: f31fe0ef jal 1c0 - ssd1306_drawRect(6, 18, SSD1306_W - 12, 24, 1); - 1294: 46e1 li a3,24 - 1296: 07400613 li a2,116 - 129a: 45c9 li a1,18 - 129c: 4519 li a0,6 - 129e: c20ff0ef jal 6be - draw_center_str(21, ">> evolving"); - 12a2: 6589 lui a1,0x2 - 12a4: 9ec58593 addi a1,a1,-1556 # 19ec - 12a8: 4555 li a0,21 - 12aa: a62ff0ef jal 50c - p = s_cat(p, "[ "); - 12ae: 6589 lui a1,0x2 - 12b0: 9f858593 addi a1,a1,-1544 # 19f8 - 12b4: 1868 addi a0,sp,60 - 12b6: feffe0ef jal 2a4 - p = s_cat(p, form_names[pet.form]); - 12ba: 47b2 lw a5,12(sp) - 12bc: 6709 lui a4,0x2 - 12be: 5b070713 addi a4,a4,1456 # 25b0 - 12c2: 078a slli a5,a5,0x2 - 12c4: 97ba add a5,a5,a4 - 12c6: 438c lw a1,0(a5) - 12c8: fddfe0ef jal 2a4 - p = s_cat(p, " ]"); - 12cc: 6589 lui a1,0x2 - 12ce: 9fc58593 addi a1,a1,-1540 # 19fc - 12d2: fd3fe0ef jal 2a4 - *p = 0; - 12d6: 00050023 sb zero,0(a0) - draw_center_str(31, b); - 12da: 186c addi a1,sp,60 - 12dc: 457d li a0,31 - draw_center_str(56, "OK: respawn"); - 12de: a2eff0ef jal 50c - 12e2: a491 j 1526 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 12e4: fff7c693 not a3,a5 - 12e8: 86fd srai a3,a3,0x1f - 12ea: 8ff5 and a5,a5,a3 - 12ec: b985 j f5c - pet.sleeping = !pet.sleeping; - 12ee: 00f4c503 lbu a0,15(s1) - beep(pet.sleeping ? 440 : 660, 120); - 12f2: 07800593 li a1,120 - pet.sleeping = !pet.sleeping; - 12f6: 00153793 seqz a5,a0 - beep(pet.sleeping ? 440 : 660, 120); - 12fa: 00a03533 snez a0,a0 - 12fe: 40a00533 neg a0,a0 - 1302: 0dc57513 andi a0,a0,220 - pet.sleeping = !pet.sleeping; - 1306: 00f487a3 sb a5,15(s1) - beep(pet.sleeping ? 440 : 660, 120); - 130a: 1b850513 addi a0,a0,440 - 130e: b925 j f46 - pet.happy = clamp100(pet.happy + 5); - 1310: 00148783 lb a5,1(s1) - pet.hygiene = 100; - 1314: 06400693 li a3,100 - pet.poop = 0; - 1318: 00048723 sb zero,14(s1) - pet.hygiene = 100; - 131c: 00d481a3 sb a3,3(s1) - pet.happy = clamp100(pet.happy + 5); - 1320: 0795 addi a5,a5,5 - 1322: c5418713 addi a4,gp,-940 # 20000050 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1326: 02f6d363 bge a3,a5,134c - 132a: 87b6 mv a5,a3 - beep(1319, 50); beep(1047, 50); - 132c: 03200593 li a1,50 - 1330: 52700513 li a0,1319 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1334: 00f700a3 sb a5,1(a4) - beep(1319, 50); beep(1047, 50); - 1338: fdffe0ef jal 316 - 133c: 41700513 li a0,1047 - 1340: 03200593 li a1,50 - 1344: fd3fe0ef jal 316 - add_xp(3); - 1348: 450d li a0,3 - 134a: b9b9 j fa8 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 134c: fff7c693 not a3,a5 - 1350: 86fd srai a3,a3,0x1f - 1352: 8ff5 and a5,a5,a3 - 1354: bfe1 j 132c - pet.health = clamp100(pet.health + 35); - 1356: 00448783 lb a5,4(s1) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 135a: 06400713 li a4,100 - pet.health = clamp100(pet.health + 35); - 135e: 02378793 addi a5,a5,35 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1362: 02f75663 bge a4,a5,138e - 1366: 87ba mv a5,a4 - beep(784, 60); beep(1047, 60); beep(1319, 90); - 1368: 03c00593 li a1,60 - 136c: 31000513 li a0,784 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1370: 00f48223 sb a5,4(s1) - beep(784, 60); beep(1047, 60); beep(1319, 90); - 1374: fa3fe0ef jal 316 - 1378: 03c00593 li a1,60 - 137c: 41700513 li a0,1047 - 1380: f97fe0ef jal 316 - 1384: 05a00593 li a1,90 - 1388: 52700513 li a0,1319 - 138c: b661 j f14 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 138e: fff7c713 not a4,a5 - 1392: 877d srai a4,a4,0x1f - 1394: 8ff9 and a5,a5,a4 - 1396: bfc9 j 1368 - screen = SCR_STATS; - 1398: 4789 li a5,2 - 139a: c4f18223 sb a5,-956(gp) # 20000040 - beep(659, 40); - 139e: 02800593 li a1,40 - 13a2: 29300513 li a0,659 - 13a6: b645 j f46 - screen = SCR_SETTINGS; - 13a8: 4791 li a5,4 - 13aa: c4f18223 sb a5,-956(gp) # 20000040 - set_sel = 0; - 13ae: c2018da3 sb zero,-965(gp) # 20000037 - 13b2: b7f5 j 139e - uint32_t t = frame % 80; - 13b4: c341a783 lw a5,-972(gp) # 20000030 - 13b8: 05000593 li a1,80 - 13bc: 853e mv a0,a5 - 13be: c03e sw a5,0(sp) - 13c0: d15fe0ef jal d4 <__umodsi3> - px = (t < 40) ? 30 + t : 30 + (80 - t); // 30..70..30 - 13c4: 02700713 li a4,39 - 13c8: 4782 lw a5,0(sp) - 13ca: 00a76d63 bltu a4,a0,13e4 - 13ce: 01e50713 addi a4,a0,30 - 13d2: c43a sw a4,8(sp) - 13d4: 4722 lw a4,8(sp) - py = 14 + ((frame % 16) < 8 ? 0 : 1); - 13d6: 8ba1 andi a5,a5,8 - 13d8: 00f037b3 snez a5,a5 - 13dc: 07b9 addi a5,a5,14 - 13de: c23a sw a4,4(sp) - 13e0: c03e sw a5,0(sp) - 13e2: b149 j 1064 - px = (t < 40) ? 30 + t : 30 + (80 - t); // 30..70..30 - 13e4: 06e00713 li a4,110 - 13e8: 8f09 sub a4,a4,a0 - 13ea: b7e5 j 13d2 - if (pet.sleeping) return EXP_SLEEP; - 13ec: 4515 li a0,5 - 13ee: ca0414e3 bnez s0,1096 - if (pet.health < 30 || pet.happy < 25 || pet.satiety < 20) - 13f2: 00448603 lb a2,4(s1) - 13f6: 4775 li a4,29 - return EXP_SAD; - 13f8: 853e mv a0,a5 - if (pet.health < 30 || pet.happy < 25 || pet.satiety < 20) - 13fa: c8c75ee3 bge a4,a2,1096 - 13fe: 00148603 lb a2,1(s1) - 1402: 4761 li a4,24 - 1404: c8c759e3 bge a4,a2,1096 - 1408: 00048603 lb a2,0(s1) - 140c: 474d li a4,19 - 140e: c8c754e3 bge a4,a2,1096 - if ((frame % 50) < 4) return EXP_BLINK; - 1412: c341a503 lw a0,-972(gp) # 20000030 - 1416: 03200593 li a1,50 - 141a: c836 sw a3,16(sp) - 141c: cb9fe0ef jal d4 <__umodsi3> - 1420: 46c2 lw a3,16(sp) - 1422: 00453513 sltiu a0,a0,4 - 1426: b985 j 1096 - else if (pet.form == FORM_GLITCH) spr = spr_glitch; - 1428: 6609 lui a2,0x2 - 142a: 44060613 addi a2,a2,1088 # 2440 - 142e: b9b5 j 10aa - ssd1306_drawImage(8 + i * 12, 38, spr_poop, 8, 8, 0); - 1430: 00141513 slli a0,s0,0x1 - 1434: 9522 add a0,a0,s0 - 1436: 4721 li a4,8 - 1438: 050a slli a0,a0,0x2 - 143a: 86ba mv a3,a4 - 143c: c1818613 addi a2,gp,-1000 # 20000014 - 1440: 02600593 li a1,38 - 1444: 953a add a0,a0,a4 - for (uint8_t i = 0; i < pet.poop; i++) - 1446: 0405 addi s0,s0,1 - ssd1306_drawImage(8 + i * 12, 38, spr_poop, 8, 8, 0); - 1448: b2eff0ef jal 776 - for (uint8_t i = 0; i < pet.poop; i++) - 144c: 0ff47413 zext.b s0,s0 - 1450: bbf1 j 122c - if (any_edge) { screen = SCR_MAIN; beep(880, 30); } - 1452: cb89 beqz a5,1464 - 1454: 4785 li a5,1 - 1456: 45f9 li a1,30 - 1458: 37000513 li a0,880 - 145c: c4f18223 sb a5,-956(gp) # 20000040 - 1460: eb7fe0ef jal 316 - ssd1306_setbuf(0); - 1464: d9cff0ef jal a00 - draw_center_str(0, "~/pet $ stat"); - 1468: 6589 lui a1,0x2 - 146a: a0058593 addi a1,a1,-1536 # 1a00 - 146e: 4501 li a0,0 - draw_bar(10, "FOOD", pet.satiety); - 1470: c5418413 addi s0,gp,-940 # 20000050 - draw_center_str(0, "~/pet $ stat"); - 1474: 898ff0ef jal 50c - draw_bar(10, "FOOD", pet.satiety); - 1478: 00040603 lb a2,0(s0) - 147c: 6589 lui a1,0x2 - 147e: a1058593 addi a1,a1,-1520 # 1a10 - 1482: 4529 li a0,10 - 1484: a90ff0ef jal 714 - draw_bar(19, "HAPPY", pet.happy); - 1488: 00140603 lb a2,1(s0) - 148c: 6589 lui a1,0x2 - 148e: a1858593 addi a1,a1,-1512 # 1a18 - 1492: 454d li a0,19 - 1494: a80ff0ef jal 714 - draw_bar(28, "ENERGY", pet.energy); - 1498: 00240603 lb a2,2(s0) - 149c: 6589 lui a1,0x2 - 149e: a2058593 addi a1,a1,-1504 # 1a20 - 14a2: 4571 li a0,28 - 14a4: a70ff0ef jal 714 - draw_bar(37, "CLEAN", pet.hygiene); - 14a8: 00340603 lb a2,3(s0) - 14ac: 6589 lui a1,0x2 - 14ae: a2858593 addi a1,a1,-1496 # 1a28 - 14b2: 02500513 li a0,37 - 14b6: a5eff0ef jal 714 - draw_bar(46, "HEALTH", pet.health); - 14ba: 00440603 lb a2,4(s0) - 14be: 6589 lui a1,0x2 - 14c0: a3058593 addi a1,a1,-1488 # 1a30 - 14c4: 02e00513 li a0,46 - 14c8: a4cff0ef jal 714 - p = u_cat(p, pet.level); - 14cc: 00b44483 lbu s1,11(s0) - *p++ = 'L'; - 14d0: 04c00793 li a5,76 - p = u_cat(p, pet.level); - 14d4: 03d10513 addi a0,sp,61 - 14d8: 85a6 mv a1,s1 - *p++ = 'L'; - 14da: 02f10e23 sb a5,60(sp) - p = u_cat(p, pet.level); - 14de: dd9fe0ef jal 2b6 - p = s_cat(p, " xp "); - 14e2: 6589 lui a1,0x2 - 14e4: a3858593 addi a1,a1,-1480 # 1a38 - 14e8: dbdfe0ef jal 2a4 - if (pet.level < MAX_LEVEL) { - 14ec: 478d li a5,3 - 14ee: 0697e463 bltu a5,s1,1556 - p = u_cat(p, pet.xp); - 14f2: 00845583 lhu a1,8(s0) - p = u_cat(p, level_xp[pet.level]); - 14f6: 0486 slli s1,s1,0x1 - p = u_cat(p, pet.xp); - 14f8: dbffe0ef jal 2b6 - *p++ = '/'; - 14fc: 02f00793 li a5,47 - 1500: 00f50023 sb a5,0(a0) - p = u_cat(p, level_xp[pet.level]); - 1504: c2818793 addi a5,gp,-984 # 20000024 - 1508: 94be add s1,s1,a5 - 150a: 0004d583 lhu a1,0(s1) - 150e: 0505 addi a0,a0,1 - 1510: da7fe0ef jal 2b6 - *p = 0; - 1514: 00050023 sb zero,0(a0) - ssd1306_drawstr(0, 56, line, 1); - 1518: 4685 li a3,1 - 151a: 1870 addi a2,sp,60 - 151c: 03800593 li a1,56 - 1520: 4501 li a0,0 - 1522: cf7fe0ef jal 218 - ssd1306_refresh(); - 1526: d02ff0ef jal a28 - uint16_t timeout = screen_timeout_opts[timeout_idx]; - 152a: c041c703 lbu a4,-1020(gp) # 20000000 - 152e: c2018793 addi a5,gp,-992 # 2000001c - 1532: 0706 slli a4,a4,0x1 - 1534: 97ba add a5,a5,a4 - 1536: 0007d783 lhu a5,0(a5) - if (timeout && idle_frames >= timeout) { - 153a: f8078a63 beqz a5,cce - 153e: c401a703 lw a4,-960(gp) # 2000003c - 1542: f8f76663 bltu a4,a5,cce - ssd1306_cmd(SSD1306_DISPLAYOFF); - 1546: 0ae00513 li a0,174 - 154a: c06ff0ef jal 950 - disp_on = 0; - 154e: c00182a3 sb zero,-1019(gp) # 20000001 - 1552: f7cff06f j cce + 187e: e4050513 addi a0,a0,-448 # 57e40 + frame++; + 1882: c2f1ac23 sw a5,-968(gp) # 20000034 + idle_frames++; + 1886: c281a823 sw s0,-976(gp) # 2000002c + Delay_Ms(FRAME_MS); + 188a: 895fe0ef jal 11e + 188e: efeff06f j f8c p = s_cat(p, "MAX"); - 1556: 6589 lui a1,0x2 - 1558: a4058593 addi a1,a1,-1472 # 1a40 - 155c: d49fe0ef jal 2a4 - 1560: bf55 j 1514 + 1892: 6589 lui a1,0x2 + 1894: ba458593 addi a1,a1,-1116 # 1ba4 + 1898: a0dfe0ef jal 2a4 + 189c: b795 j 1800 if (left_edge) { - 1562: c185 beqz a1,1582 + 189e: c185 beqz a1,18be set_sel = (set_sel + SETTINGS_ROWS - 1) % SETTINGS_ROWS; - 1564: c3b1c503 lbu a0,-965(gp) # 20000037 - 1568: 458d li a1,3 - 156a: c236 sw a3,4(sp) - 156c: 0509 addi a0,a0,2 - 156e: b8bfe0ef jal f8 <__modsi3> - 1572: c2a18da3 sb a0,-965(gp) # 20000037 + 18a0: c2d1c503 lbu a0,-979(gp) # 20000029 + 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 beep(1047, 25); - 1576: 45e5 li a1,25 - 1578: 41700513 li a0,1047 - 157c: d9bfe0ef jal 316 - 1580: 4692 lw a3,4(sp) + 18b2: 45e5 li a1,25 + 18b4: 41700513 li a0,1047 + 18b8: a5ffe0ef jal 316 + 18bc: 4692 lw a3,4(sp) if (right_edge) { - 1582: ce91 beqz a3,159e + 18be: ce91 beqz a3,18da set_sel = (set_sel + 1) % SETTINGS_ROWS; - 1584: c3b1c503 lbu a0,-965(gp) # 20000037 - 1588: 458d li a1,3 - 158a: 0505 addi a0,a0,1 - 158c: b6dfe0ef jal f8 <__modsi3> - 1590: c2a18da3 sb a0,-965(gp) # 20000037 + 18c0: c2d1c503 lbu a0,-979(gp) # 20000029 + 18c4: 458d li a1,3 + 18c6: 0505 addi a0,a0,1 + 18c8: 831fe0ef jal f8 <__modsi3> + 18cc: c2a186a3 sb a0,-979(gp) # 20000029 beep(1047, 25); - 1594: 45e5 li a1,25 - 1596: 41700513 li a0,1047 - 159a: d7dfe0ef jal 316 + 18d0: 45e5 li a1,25 + 18d2: 41700513 li a0,1047 + 18d6: a41fe0ef jal 316 if (ok_edge) { - 159e: 4782 lw a5,0(sp) - 15a0: cf95 beqz a5,15dc + 18da: 4782 lw a5,0(sp) + 18dc: c3a1 beqz a5,191c if (set_sel == 0) { // cycle screen-off timeout - 15a2: c3b1c703 lbu a4,-965(gp) # 20000037 - 15a6: ef01 bnez a4,15be + 18de: c2d1c703 lbu a4,-979(gp) # 20000029 + 18e2: ef11 bnez a4,18fe timeout_idx = (timeout_idx + 1) % TIMEOUT_OPT_COUNT; - 15a8: c041c783 lbu a5,-1020(gp) # 20000000 + 18e4: c041c503 lbu a0,-1020(gp) # 20000000 + 18e8: 4599 li a1,6 + 18ea: 0505 addi a0,a0,1 + 18ec: 80dfe0ef jal f8 <__modsi3> + 18f0: c0a18223 sb a0,-1020(gp) # 20000000 beep(880, 40); - 15ac: 02800593 li a1,40 - timeout_idx = (timeout_idx + 1) % TIMEOUT_OPT_COUNT; - 15b0: 0785 addi a5,a5,1 - 15b2: 8b8d andi a5,a5,3 - 15b4: c0f18223 sb a5,-1020(gp) # 20000000 + 18f4: 02800593 li a1,40 beep(880, 30); - 15b8: 37000513 li a0,880 - 15bc: a831 j 15d8 + 18f8: 37000513 li a0,880 + 18fc: a831 j 1918 } else if (set_sel == 1) { // toggle sound - 15be: 4785 li a5,1 - 15c0: 0ef71963 bne a4,a5,16b2 + 18fe: 4785 li a5,1 + 1900: 0ef71963 bne a4,a5,19f2 sound_on = !sound_on; - 15c4: c061c783 lbu a5,-1018(gp) # 20000002 + 1904: c061c783 lbu a5,-1018(gp) # 20000002 beep(988, 60); // only audible if just enabled - 15c8: 03c00593 li a1,60 - 15cc: 3dc00513 li a0,988 + 1908: 03c00593 li a1,60 + 190c: 3dc00513 li a0,988 sound_on = !sound_on; - 15d0: 0017b793 seqz a5,a5 - 15d4: c0f18323 sb a5,-1018(gp) # 20000002 + 1910: 0017b793 seqz a5,a5 + 1914: c0f18323 sb a5,-1018(gp) # 20000002 beep(880, 30); - 15d8: d3ffe0ef jal 316 + 1918: 9fffe0ef jal 316 ssd1306_setbuf(0); - 15dc: c24ff0ef jal a00 + 191c: b26ff0ef jal c42 draw_center_str(0, "- SETTINGS -"); - 15e0: 6589 lui a1,0x2 - 15e2: a4458593 addi a1,a1,-1468 # 1a44 - 15e6: 4501 li a0,0 - 15e8: f25fe0ef jal 50c - 15ec: 4685 li a3,1 - 15ee: 08000613 li a2,128 - 15f2: 45a9 li a1,10 - 15f4: 4501 li a0,0 - 15f6: f71fe0ef jal 566 + 1920: 6589 lui a1,0x2 + 1922: ba858593 addi a1,a1,-1112 # 1ba8 + 1926: 4501 li a0,0 + 1928: e1ffe0ef jal 746 + 192c: 4685 li a3,1 + 192e: 08000613 li a2,128 + 1932: 45a9 li a1,10 + 1934: 4501 li a0,0 + 1936: e6bfe0ef jal 7a0 *s_cat(s_cat(rows[0], "Screen off:"), screen_timeout_names[timeout_idx]) = 0; - 15fa: 6589 lui a1,0x2 - 15fc: a5458593 addi a1,a1,-1452 # 1a54 - 1600: 1868 addi a0,sp,60 - 1602: ca3fe0ef jal 2a4 - 1606: c041c703 lbu a4,-1020(gp) # 20000000 - 160a: 6789 lui a5,0x2 - 160c: 5e078793 addi a5,a5,1504 # 25e0 - 1610: 070a slli a4,a4,0x2 - 1612: 97ba add a5,a5,a4 - 1614: 438c lw a1,0(a5) - 1616: c8ffe0ef jal 2a4 + 193a: 6589 lui a1,0x2 + 193c: bb858593 addi a1,a1,-1096 # 1bb8 + 1940: 0088 addi a0,sp,64 + 1942: 963fe0ef jal 2a4 + 1946: c041c703 lbu a4,-1020(gp) # 20000000 + 194a: 6789 lui a5,0x2 + 194c: 74c78793 addi a5,a5,1868 # 274c + 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(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0; - 161a: 6589 lui a1,0x2 + 195a: 6589 lui a1,0x2 *s_cat(s_cat(rows[0], "Screen off:"), screen_timeout_names[timeout_idx]) = 0; - 161c: 00050023 sb zero,0(a0) + 195c: 00050023 sb zero,0(a0) *s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0; - 1620: a6058593 addi a1,a1,-1440 # 1a60 - 1624: 04d10513 addi a0,sp,77 - 1628: c7dfe0ef jal 2a4 - 162c: c061c783 lbu a5,-1018(gp) # 20000002 - 1630: c7c9 beqz a5,16ba - 1632: 6589 lui a1,0x2 - 1634: 97c58593 addi a1,a1,-1668 # 197c - 1638: c6dfe0ef jal 2a4 + 1960: bc458593 addi a1,a1,-1084 # 1bc4 + 1964: 05110513 addi a0,sp,81 + 1968: 93dfe0ef jal 2a4 + 196c: c061c783 lbu a5,-1018(gp) # 20000002 + 1970: c7c9 beqz a5,19fa + 1972: 6589 lui a1,0x2 + 1974: ae058593 addi a1,a1,-1312 # 1ae0 + 1978: 92dfe0ef jal 2a4 *s_cat(rows[2], "Back") = 0; - 163c: 6589 lui a1,0x2 + 197c: 6589 lui a1,0x2 *s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0; - 163e: 00050023 sb zero,0(a0) + 197e: 00050023 sb zero,0(a0) *s_cat(rows[2], "Back") = 0; - 1642: a6858593 addi a1,a1,-1432 # 1a68 - 1646: 05e10513 addi a0,sp,94 - 164a: c5bfe0ef jal 2a4 - 164e: 00050023 sb zero,0(a0) - 1652: 44c5 li s1,17 - 1654: 4401 li s0,0 + 1982: bcc58593 addi a1,a1,-1076 # 1bcc + 1986: 06210513 addi a0,sp,98 + 198a: 91bfe0ef jal 2a4 + 198e: 00050023 sb zero,0(a0) + 1992: 44c5 li s1,17 + 1994: 4401 li s0,0 int y = 18 + r * 12; - 1656: 00148793 addi a5,s1,1 - 165a: c03e sw a5,0(sp) + 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); - 165c: c3b1c303 lbu t1,-965(gp) # 20000037 - 1660: 0ff47293 zext.b t0,s0 - 1664: 00531e63 bne t1,t0,1680 - 1668: 4705 li a4,1 - 166a: 46a9 li a3,10 - 166c: 08000613 li a2,128 - 1670: 85a6 mv a1,s1 - 1672: 4501 li a0,0 - 1674: c216 sw t0,4(sp) - 1676: c01a sw t1,0(sp) - 1678: b49fe0ef jal 1c0 - 167c: 4292 lw t0,4(sp) - 167e: 4302 lw t1,0(sp) + 199c: c2d1c283 lbu t0,-979(gp) # 20000029 + 19a0: 0ff47313 zext.b t1,s0 + 19a4: 00531e63 bne t1,t0,19c0 + 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 + 19bc: 4292 lw t0,4(sp) + 19be: 4302 lw t1,0(sp) ssd1306_drawstr(4, y, rows[r], r == set_sel ? 0 : 1); - 1680: 00441613 slli a2,s0,0x4 - 1684: 405306b3 sub a3,t1,t0 - 1688: 9622 add a2,a2,s0 - 168a: 187c addi a5,sp,60 - 168c: 00148593 addi a1,s1,1 - 1690: 00d036b3 snez a3,a3 - 1694: 963e add a2,a2,a5 - 1696: 4511 li a0,4 - 1698: b81fe0ef jal 218 + 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 for (uint8_t r = 0; r < SETTINGS_ROWS; r++) { - 169c: 04b1 addi s1,s1,12 - 169e: 03500713 li a4,53 - 16a2: 0405 addi s0,s0,1 - 16a4: fae499e3 bne s1,a4,1656 + 19dc: 04b1 addi s1,s1,12 + 19de: 03500713 li a4,53 + 19e2: 0405 addi s0,s0,1 + 19e4: fae499e3 bne s1,a4,1996 draw_center_str(56, "L/R move OK use"); - 16a8: 6589 lui a1,0x2 - 16aa: a7058593 addi a1,a1,-1424 # 1a70 - 16ae: fbaff06f j e68 + 19e8: 6589 lui a1,0x2 + 19ea: bd458593 addi a1,a1,-1068 # 1bd4 + 19ee: f66ff06f j 1154 screen = SCR_MAIN; - 16b2: c4f18223 sb a5,-956(gp) # 20000040 + 19f2: c2f18b23 sb a5,-970(gp) # 20000032 beep(880, 30); - 16b6: 45f9 li a1,30 - 16b8: b701 j 15b8 + 19f6: 45f9 li a1,30 + 19f8: b701 j 18f8 *s_cat(s_cat(rows[1], "Sound: "), sound_on ? "On" : "Off") = 0; - 16ba: 6589 lui a1,0x2 - 16bc: 98458593 addi a1,a1,-1660 # 1984 - 16c0: bfa5 j 1638 + 19fa: 6589 lui a1,0x2 + 19fc: ae858593 addi a1,a1,-1304 # 1ae8 + 1a00: bfa5 j 1978 if (ok_edge) { // back to the welcome screen to re-pick - 16c2: 4782 lw a5,0(sp) - 16c4: cf99 beqz a5,16e2 + 1a02: 4782 lw a5,0(sp) + 1a04: cf99 beqz a5,1a22 beep(659, 80); beep(988, 120); - 16c6: 05000593 li a1,80 - 16ca: 29300513 li a0,659 + 1a06: 05000593 li a1,80 + 1a0a: 29300513 li a0,659 screen = SCR_SELECT; - 16ce: c4018223 sb zero,-956(gp) # 20000040 + 1a0e: c2018b23 sb zero,-970(gp) # 20000032 beep(659, 80); beep(988, 120); - 16d2: c45fe0ef jal 316 - 16d6: 07800593 li a1,120 - 16da: 3dc00513 li a0,988 - 16de: c39fe0ef jal 316 + 1a12: 905fe0ef jal 316 + 1a16: 07800593 li a1,120 + 1a1a: 3dc00513 li a0,988 + 1a1e: 8f9fe0ef jal 316 ssd1306_setbuf(0); - 16e2: b1eff0ef jal a00 + 1a22: a20ff0ef jal c42 ssd1306_drawImage(48, 2, spr_grave, 32, 32, 0); - 16e6: 02000713 li a4,32 - 16ea: 6609 lui a2,0x2 - 16ec: 86ba mv a3,a4 - 16ee: 5f060613 addi a2,a2,1520 # 25f0 - 16f2: 4589 li a1,2 - 16f4: 03000513 li a0,48 - 16f8: 87eff0ef jal 776 + 1a26: 02000713 li a4,32 + 1a2a: 6609 lui a2,0x2 + 1a2c: 86ba mv a3,a4 + 1a2e: 76460613 addi a2,a2,1892 # 2764 + 1a32: 4589 li a1,2 + 1a34: 03000513 li a0,48 + 1a38: f81fe0ef jal 9b8 draw_center_str(36, pet.ascend == 2 ? "** CORRUPTED **" : "SEGFAULT (11)"); - 16fc: c5418713 addi a4,gp,-940 # 20000050 - 1700: 00d74683 lbu a3,13(a4) - 1704: 4709 li a4,2 - 1706: c5418413 addi s0,gp,-940 # 20000050 - 170a: 02e69f63 bne a3,a4,1748 - 170e: 6589 lui a1,0x2 - 1710: 98858593 addi a1,a1,-1656 # 1988 - 1714: 02400513 li a0,36 - 1718: df5fe0ef jal 50c + 1a3c: c4818713 addi a4,gp,-952 # 20000044 + 1a40: 00d74683 lbu a3,13(a4) + 1a44: 4709 li a4,2 + 1a46: c4818413 addi s0,gp,-952 # 20000044 + 1a4a: 02e69f63 bne a3,a4,1a88 + 1a4e: 6589 lui a1,0x2 + 1a50: aec58593 addi a1,a1,-1300 # 1aec + 1a54: 02400513 li a0,36 + 1a58: ceffe0ef jal 746 p = s_cat(p, "core dumped L"); - 171c: 6589 lui a1,0x2 - 171e: a8458593 addi a1,a1,-1404 # 1a84 - 1722: 1868 addi a0,sp,60 - 1724: b81fe0ef jal 2a4 + 1a5c: 6589 lui a1,0x2 + 1a5e: be858593 addi a1,a1,-1048 # 1be8 + 1a62: 0088 addi a0,sp,64 + 1a64: 841fe0ef jal 2a4 p = u_cat(p, pet.level); - 1728: 00b44583 lbu a1,11(s0) - 172c: b8bfe0ef jal 2b6 + 1a68: 00b44583 lbu a1,11(s0) + 1a6c: 84bfe0ef jal 2b6 *p = 0; - 1730: 00050023 sb zero,0(a0) + 1a70: 00050023 sb zero,0(a0) draw_center_str(46, line); - 1734: 186c addi a1,sp,60 - 1736: 02e00513 li a0,46 - 173a: dd3fe0ef jal 50c + 1a74: 008c addi a1,sp,64 + 1a76: 02e00513 li a0,46 + 1a7a: ccdfe0ef jal 746 draw_center_str(56, "OK: respawn"); - 173e: 6589 lui a1,0x2 - 1740: a9458593 addi a1,a1,-1388 # 1a94 - 1744: f24ff06f j e68 + 1a7e: 6589 lui a1,0x2 + 1a80: bf858593 addi a1,a1,-1032 # 1bf8 + 1a84: ed0ff06f j 1154 draw_center_str(36, pet.ascend == 2 ? "** CORRUPTED **" : "SEGFAULT (11)"); - 1748: 6589 lui a1,0x2 - 174a: 99858593 addi a1,a1,-1640 # 1998 - 174e: b7d9 j 1714 - pet.age_min++; - 1750: 00645603 lhu a2,6(s0) - pet.satiety = clamp100(pet.satiety - 1); - 1754: 00040783 lb a5,0(s0) + 1a88: 6589 lui a1,0x2 + 1a8a: afc58593 addi a1,a1,-1284 # 1afc + 1a8e: b7d9 j 1a54 tick_acc = 0; - 1758: c2019c23 sh zero,-968(gp) # 20000034 - pet.age_min++; - 175c: 0605 addi a2,a2,1 - 175e: 0642 slli a2,a2,0x10 - 1760: 8241 srli a2,a2,0x10 - 1762: 00c41323 sh a2,6(s0) - pet.satiety = clamp100(pet.satiety - 1); - 1766: 17fd addi a5,a5,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1768: 06400713 li a4,100 - if (pet.sleeping) { - 176c: 00f44683 lbu a3,15(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1770: 08f75463 bge a4,a5,17f8 - 1774: 87ba mv a5,a4 - 1776: 07e2 slli a5,a5,0x18 - pet.energy = clamp100(pet.energy + 6); - 1778: 00240703 lb a4,2(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 177c: 87e1 srai a5,a5,0x18 - 177e: 06400513 li a0,100 - if (pet.sleeping) { - 1782: c6c9 beqz a3,180c - pet.energy = clamp100(pet.energy + 6); - 1784: 00670593 addi a1,a4,6 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1788: 06b55d63 bge a0,a1,1802 - 178c: 85aa mv a1,a0 - pet.satiety = clamp100(pet.satiety - 1); - 178e: 00f40023 sb a5,0(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1792: 00b40123 sb a1,2(s0) - if (pet.energy >= 100) pet.sleeping = 0; // wakes when rested - 1796: 05d00793 li a5,93 - 179a: 00e7d563 bge a5,a4,17a4 - 179e: 000407a3 sb zero,15(s0) - 17a2: 4681 li a3,0 - if (pet.age_min & 1) pet.hygiene = clamp100(pet.hygiene - 1); - 17a4: 00167713 andi a4,a2,1 - 17a8: cb19 beqz a4,17be - 17aa: 00340783 lb a5,3(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 17ae: 06400593 li a1,100 - if (pet.age_min & 1) pet.hygiene = clamp100(pet.hygiene - 1); - 17b2: 17fd addi a5,a5,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 17b4: 08f5da63 bge a1,a5,1848 - 17b8: 87ae mv a5,a1 - 17ba: 00f401a3 sb a5,3(s0) - if (!pet.sleeping && pet.poop < 3 && - 17be: 00e44583 lbu a1,14(s0) - 17c2: eac1 bnez a3,1852 - 17c4: 4789 li a5,2 - 17c6: 00b7ed63 bltu a5,a1,17e0 - ((pet.age_min * 7u + frame) & 0x1F) == 0) - 17ca: 00361793 slli a5,a2,0x3 - 17ce: 8f91 sub a5,a5,a2 - 17d0: c341a603 lw a2,-972(gp) # 20000030 - 17d4: 97b2 add a5,a5,a2 - 17d6: 8bfd andi a5,a5,31 - if (!pet.sleeping && pet.poop < 3 && - 17d8: efad bnez a5,1852 - pet.poop++; - 17da: 0585 addi a1,a1,1 - 17dc: 00b40723 sb a1,14(s0) - if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); - 17e0: cb35 beqz a4,1854 - 17e2: 00140783 lb a5,1(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 17e6: 06400613 li a2,100 - if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); - 17ea: 17fd addi a5,a5,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 17ec: 14f65363 bge a2,a5,1932 - 17f0: 87b2 mv a5,a2 - 17f2: 00f400a3 sb a5,1(s0) - 17f6: a8b9 j 1854 - 17f8: fff7c713 not a4,a5 - 17fc: 877d srai a4,a4,0x1f - 17fe: 8ff9 and a5,a5,a4 - 1800: bf9d j 1776 - 1802: fff5c513 not a0,a1 - 1806: 857d srai a0,a0,0x1f - 1808: 8de9 and a1,a1,a0 - 180a: b751 j 178e - pet.satiety = clamp100(pet.satiety - 1); - 180c: 00f40023 sb a5,0(s0) - pet.energy = clamp100(pet.energy - 1); - 1810: fff70793 addi a5,a4,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1814: 02f55063 bge a0,a5,1834 - 1818: 87aa mv a5,a0 - 181a: 00f40123 sb a5,2(s0) - pet.happy = clamp100(pet.happy - 1); - 181e: 00140783 lb a5,1(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1822: 06400713 li a4,100 - pet.happy = clamp100(pet.happy - 1); - 1826: 17fd addi a5,a5,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1828: 00f75b63 bge a4,a5,183e - 182c: 87ba mv a5,a4 - 182e: 00f400a3 sb a5,1(s0) - 1832: bf8d j 17a4 - 1834: fff7c713 not a4,a5 - 1838: 877d srai a4,a4,0x1f - 183a: 8ff9 and a5,a5,a4 - 183c: bff9 j 181a - 183e: fff7c713 not a4,a5 - 1842: 877d srai a4,a4,0x1f - 1844: 8ff9 and a5,a5,a4 - 1846: b7e5 j 182e - 1848: fff7c593 not a1,a5 - 184c: 85fd srai a1,a1,0x1f - 184e: 8fed and a5,a5,a1 - 1850: b7ad j 17ba - if (pet.poop && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); - 1852: f5d9 bnez a1,17e0 - if (pet.hygiene < 20 && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); - 1854: 00340603 lb a2,3(s0) - 1858: 47cd li a5,19 - 185a: 00c7cd63 blt a5,a2,1874 - 185e: cb19 beqz a4,1874 - 1860: 00140783 lb a5,1(s0) -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1864: 06400713 li a4,100 - if (pet.hygiene < 20 && (pet.age_min & 1)) pet.happy = clamp100(pet.happy - 1); - 1868: 17fd addi a5,a5,-1 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 186a: 0cf75963 bge a4,a5,193c - 186e: 87ba mv a5,a4 - 1870: 00f400a3 sb a5,1(s0) - if (pet.hygiene < lo) lo = pet.hygiene; - 1874: 00044703 lbu a4,0(s0) - 1878: 87ba mv a5,a4 - 187a: 0762 slli a4,a4,0x18 - 187c: 8761 srai a4,a4,0x18 - 187e: 00e65363 bge a2,a4,1884 - 1882: 87b2 mv a5,a2 - 1884: 00144703 lbu a4,1(s0) - 1888: 01879593 slli a1,a5,0x18 - 188c: 85e1 srai a1,a1,0x18 - 188e: 01871613 slli a2,a4,0x18 - 1892: 8661 srai a2,a2,0x18 - 1894: 00b65363 bge a2,a1,189a - 1898: 87ba mv a5,a4 - 189a: 00244703 lbu a4,2(s0) - 189e: 01879593 slli a1,a5,0x18 - 18a2: 85e1 srai a1,a1,0x18 - 18a4: 01871613 slli a2,a4,0x18 - 18a8: 8661 srai a2,a2,0x18 - 18aa: 00b65363 bge a2,a1,18b0 - 18ae: 87ba mv a5,a4 - 18b0: 01879713 slli a4,a5,0x18 - 18b4: 8761 srai a4,a4,0x18 - if (lo < 15) pet.health = clamp100(pet.health - 3); - 18b6: 4639 li a2,14 - 18b8: 00440783 lb a5,4(s0) - 18bc: 08e64a63 blt a2,a4,1950 - 18c0: 17f5 addi a5,a5,-3 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 18c2: 06400713 li a4,100 - 18c6: 08f75063 bge a4,a5,1946 - 18ca: 87ba mv a5,a4 - 18cc: 00f40223 sb a5,4(s0) - notify(N_FOOD, pet.satiety); - 18d0: 00040583 lb a1,0(s0) - 18d4: 4501 li a0,0 - 18d6: ba9fe0ef jal 47e - notify(N_FUN, pet.happy); - 18da: 00140583 lb a1,1(s0) - 18de: 4505 li a0,1 - 18e0: b9ffe0ef jal 47e - notify(N_ENGY, pet.energy); - 18e4: 00240583 lb a1,2(s0) - 18e8: 4509 li a0,2 - 18ea: b95fe0ef jal 47e - notify(N_WASH, pet.hygiene); - 18ee: 00340583 lb a1,3(s0) - 18f2: 450d li a0,3 - 18f4: b8bfe0ef jal 47e - if (pet.health <= 0) { - 18f8: 00440783 lb a5,4(s0) - 18fc: c0f04763 bgtz a5,d0a - screen = SCR_DEAD; - 1900: 470d li a4,3 - beep(330, 200); beep(247, 200); beep(165, 400); - 1902: 0c800593 li a1,200 - 1906: 14a00513 li a0,330 - screen = SCR_DEAD; - 190a: c4e18223 sb a4,-956(gp) # 20000040 - pet.alive = 0; - 190e: 00040823 sb zero,16(s0) - beep(330, 200); beep(247, 200); beep(165, 400); - 1912: a05fe0ef jal 316 - 1916: 0c800593 li a1,200 - 191a: 0f700513 li a0,247 - 191e: 9f9fe0ef jal 316 - 1922: 19000593 li a1,400 - 1926: 0a500513 li a0,165 - 192a: 9edfe0ef jal 316 - 192e: bdcff06f j d0a -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1932: fff7c613 not a2,a5 - 1936: 867d srai a2,a2,0x1f - 1938: 8ff1 and a5,a5,a2 - 193a: bd65 j 17f2 - 193c: fff7c713 not a4,a5 - 1940: 877d srai a4,a4,0x1f - 1942: 8ff9 and a5,a5,a4 - 1944: b735 j 1870 - 1946: fff7c713 not a4,a5 - 194a: 877d srai a4,a4,0x1f - 194c: 8ff9 and a5,a5,a4 - 194e: bfbd j 18cc - else if (lo > 50) pet.health = clamp100(pet.health + 2); - 1950: 03200613 li a2,50 - 1954: f6e65ee3 bge a2,a4,18d0 - 1958: 0789 addi a5,a5,2 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 195a: 06400713 li a4,100 - 195e: 00f75a63 bge a4,a5,1972 - 1962: 87ba mv a5,a4 - 1964: 00f40223 sb a5,4(s0) - if (lo > 50 && !pet.sleeping) add_xp(3); - 1968: f6a5 bnez a3,18d0 - 196a: 450d li a0,3 - 196c: a45fe0ef jal 3b0 - 1970: b785 j 18d0 -static int8_t clamp100(int v) { return v < 0 ? 0 : (v > 100 ? 100 : v); } - 1972: fff7c713 not a4,a5 - 1976: 877d srai a4,a4,0x1f - 1978: 8ff9 and a5,a5,a4 - 197a: b7ed j 1964 - 197c: 00006e4f .insn 4, 0x6e4f - 1980: 0000 unimp - 1982: 0000 unimp - 1984: 0066664f .insn 4, 0x0066664f - 1988: 2a2a .insn 2, 0x2a2a - 198a: 4320 lw s0,64(a4) - 198c: 5552524f .insn 4, 0x5552524f - 1990: 5450 lw a2,44(s0) - 1992: 4445 li s0,17 - 1994: 2a20 .insn 2, 0x2a20 - 1996: 002a c.slli zero,0xa - 1998: 46474553 .insn 4, 0x46474553 - 199c: 5541 li a0,-16 - 199e: 544c lw a1,44(s0) - 19a0: 2820 .insn 2, 0x2820 - 19a2: 3131 jal 15ae - 19a4: 0029 c.nop 10 - 19a6: 0000 unimp - 19a8: 7270 .insn 2, 0x7270 - 19aa: 7365 lui t1,0xffff9 - 19ac: 6e612073 .insn 4, 0x6e612073 - 19b0: 2079 jal 1a3e - 19b2: 0079656b .insn 4, 0x0079656b - 19b6: 0000 unimp - 19b8: 207e .insn 2, 0x207e - 19ba: 2024 .insn 2, 0x2024 - 19bc: 6461 lui s0,0x18 - 19be: 2074706f j 493c4 - 19c2: 2d2d jal 1ffc - 19c4: 6570 .insn 2, 0x6570 - 19c6: 0074 addi a3,sp,12 - 19c8: 203c .insn 2, 0x203c - 19ca: 0000 unimp - 19cc: 3e20 .insn 2, 0x3e20 - 19ce: 0000 unimp - 19d0: 2f4c .insn 2, 0x2f4c - 19d2: 2052 .insn 2, 0x2052 - 19d4: 6970 .insn 2, 0x6970 - 19d6: 20206b63 bltu zero,sp,1bec - 19da: 67204b4f .insn 4, 0x67204b4f - 19de: 0021006f j 119e0 - 19e2: 0000 unimp - 19e4: 007a c.slli zero,0x1e - 19e6: 0000 unimp - 19e8: 005a c.slli zero,0x16 - 19ea: 0000 unimp - 19ec: 3e3e .insn 2, 0x3e3e - 19ee: 6520 .insn 2, 0x6520 - 19f0: 6f76 .insn 2, 0x6f76 - 19f2: 766c .insn 2, 0x766c - 19f4: 6e69 lui t3,0x1a - 19f6: 205b0067 jr 517(s6) - 19fa: 0000 unimp - 19fc: 5d20 lw s0,120(a0) - 19fe: 0000 unimp - 1a00: 2f7e .insn 2, 0x2f7e - 1a02: 6570 .insn 2, 0x6570 - 1a04: 2074 .insn 2, 0x2074 - 1a06: 2024 .insn 2, 0x2024 - 1a08: 74617473 .insn 4, 0x74617473 - 1a0c: 0000 unimp - 1a0e: 0000 unimp - 1a10: 4f46 lw t5,80(sp) - 1a12: 0000444f .insn 4, 0x444f - 1a16: 0000 unimp - 1a18: 4148 lw a0,4(a0) - 1a1a: 5050 lw a2,36(s0) - 1a1c: 0059 c.nop 22 - 1a1e: 0000 unimp - 1a20: 4e45 li t3,17 - 1a22: 5245 li tp,-15 - 1a24: 00005947 .insn 4, 0x5947 - 1a28: 41454c43 .insn 4, 0x41454c43 - 1a2c: 004e c.slli zero,0x13 - 1a2e: 0000 unimp - 1a30: 4548 lw a0,12(a0) - 1a32: 4c41 li s8,16 - 1a34: 4854 lw a3,20(s0) - 1a36: 0000 unimp - 1a38: 2020 .insn 2, 0x2020 - 1a3a: 7078 .insn 2, 0x7078 - 1a3c: 0020 addi s0,sp,8 - 1a3e: 0000 unimp - 1a40: 414d li sp,19 - 1a42: 0058 addi a4,sp,4 - 1a44: 202d jal 1a6e - 1a46: 54544553 .insn 4, 0x54544553 - 1a4a: 4e49 li t3,18 - 1a4c: 2d205347 .insn 4, 0x2d205347 - 1a50: 0000 unimp - 1a52: 0000 unimp - 1a54: 65726353 .insn 4, 0x65726353 - 1a58: 6e65 lui t3,0x19 - 1a5a: 6f20 .insn 2, 0x6f20 - 1a5c: 6666 .insn 2, 0x6666 - 1a5e: 003a c.slli zero,0xe - 1a60: 6e756f53 .insn 4, 0x6e756f53 - 1a64: 3a64 .insn 2, 0x3a64 - 1a66: 0020 addi s0,sp,8 - 1a68: 6142 .insn 2, 0x6142 - 1a6a: 00006b63 bltu zero,zero,1a80 - 1a6e: 0000 unimp - 1a70: 2f4c .insn 2, 0x2f4c - 1a72: 2052 .insn 2, 0x2052 - 1a74: 6f6d lui t5,0x1b - 1a76: 6576 .insn 2, 0x6576 - 1a78: 2020 .insn 2, 0x2020 - 1a7a: 75204b4f .insn 4, 0x75204b4f - 1a7e: 00006573 .insn 4, 0x6573 - 1a82: 0000 unimp - 1a84: 65726f63 bltu tp,s7,20e2 - 1a88: 6420 .insn 2, 0x6420 - 1a8a: 6d75 lui s10,0x1d - 1a8c: 6570 .insn 2, 0x6570 - 1a8e: 2064 .insn 2, 0x2064 - 1a90: 004c addi a1,sp,4 - 1a92: 0000 unimp - 1a94: 203a4b4f .insn 4, 0x203a4b4f - 1a98: 6572 .insn 2, 0x6572 - 1a9a: 77617073 .insn 4, 0x77617073 - 1a9e: 006e c.slli zero,0x1b - 1aa0: 6170 .insn 2, 0x6170 - 1aa2: 616e .insn 2, 0x616e - 1aa4: 63746f67 .insn 4, 0x63746f67 - 1aa8: 6968 .insn 2, 0x6968 - 1aaa: 7620 .insn 2, 0x7620 - 1aac: 0032 c.slli zero,0xc - 1aae: 0000 unimp - 1ab0: 6f62 .insn 2, 0x6f62 - 1ab2: 6e69746f jal s0,99198 - 1ab6: 656b2067 .insn 4, 0x656b2067 - 1aba: 6e72 .insn 2, 0x6e72 - 1abc: 6c65 lui s8,0x19 - 1abe: 2e2e .insn 2, 0x2e2e - 1ac0: 0000 unimp - 1ac2: 0000 unimp - 1ac4: 6f6d lui t5,0x1b - 1ac6: 6e75 lui t3,0x1d - 1ac8: 2074 .insn 2, 0x2074 - 1aca: 7465702f .insn 4, 0x7465702f - 1ace: 2020 .insn 2, 0x2020 - 1ad0: 00006b6f jal s6,7ad0 - 1ad4: 77617073 .insn 4, 0x77617073 - 1ad8: 206e .insn 2, 0x206e - 1ada: 6c656873 .insn 4, 0x6c656873 - 1ade: 206c .insn 2, 0x206c - 1ae0: 6f20 .insn 2, 0x6f20 - 1ae2: 203e006b .insn 4, 0x203e006b - 1ae6: 2f2e .insn 2, 0x2f2e - 1ae8: 6174 .insn 2, 0x6174 - 1aea: 616d addi sp,sp,240 - 1aec: 63746f67 .insn 4, 0x63746f67 - 1af0: 6968 .insn 2, 0x6968 - 1af2: 005f 6853 6c65 .insn 6, 0x6c656853005f - 1af8: 006c addi a1,sp,12 - 1afa: 0000 unimp - 1afc: 6150 .insn 2, 0x6150 - 1afe: 6b6e .insn 2, 0x6b6e - 1b00: 0000006f j 1b00 - 1b04: 6d54 .insn 2, 0x6d54 - 1b06: 7875 lui a6,0xffffd - 1b08: 0000 unimp + 1a90: c2019523 sh zero,-982(gp) # 20000026 + game_tick(); + 1a94: a79fe0ef jal 50c + 1a98: bbe9 j 1872 + +00001a9a : +{ + 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 +} + 1ab4: 4712 lw a4,4(sp) + 1ab6: 4782 lw a5,0(sp) + 1ab8: 0121 addi sp,sp,8 + 1aba: 30200073 mret + +00001abe : +{ + 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 +} + 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 + 1b08: 0029 c.nop 10 1b0a: 0000 unimp 1b0c: 7270 .insn 2, 0x7270 - 1b0e: 0000636f jal t1,7b0e - 1b12: 0000 unimp - 1b14: 7375 lui t1,0xffffd - 1b16: 7265 lui tp,0xffff9 - 1b18: 0000 unimp + 1b0e: 7365 lui t1,0xffff9 + 1b10: 6e612073 .insn 4, 0x6e612073 + 1b14: 2079 jal 1ba2 + 1b16: 0079656b .insn 4, 0x0079656b 1b1a: 0000 unimp - 1b1c: 6f72 .insn 2, 0x6f72 - 1b1e: 0000746f jal s0,8b1e - 1b22: 0000 unimp - 1b24: 75616c43 .insn 4, 0x75616c43 - 1b28: 6564 .insn 2, 0x6564 - 1b2a: 0000 unimp - 1b2c: 74696c67 .insn 4, 0x74696c67 - 1b30: 00006863 bltu zero,zero,1b40 - 1b34: 4546 lw a0,80(sp) - 1b36: 4445 li s0,17 - 1b38: 0000 unimp - 1b3a: 0000 unimp - 1b3c: 4c50 lw a2,28(s0) - 1b3e: 5941 li s2,-16 - 1b40: 0000 unimp - 1b42: 0000 unimp - 1b44: 45454c53 .insn 4, 0x45454c53 - 1b48: 0050 addi a2,sp,4 + 1b1c: 207e .insn 2, 0x207e + 1b1e: 2024 .insn 2, 0x2024 + 1b20: 6461 lui s0,0x18 + 1b22: 2074706f j 49528 + 1b26: 2d2d jal 2160 + 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 + 1b3e: 67204b4f .insn 4, 0x67204b4f + 1b42: 0021006f j 11b44 + 1b46: 0000 unimp + 1b48: 007a c.slli zero,0x1e 1b4a: 0000 unimp - 1b4c: 4548 lw a0,12(a0) - 1b4e: 4c41 li s8,16 - 1b50: 0000 unimp - 1b52: 0000 unimp - 1b54: 54415453 .insn 4, 0x54415453 - 1b58: 00000053 .insn 4, 0x0053 - 1b5c: 54544553 .insn 4, 0x54544553 - 1b60: 4e49 li t3,18 - 1b62: 00005347 .insn 4, 0x5347 - 1b66: 0000 unimp - 1b68: 3531 jal 1974 - 1b6a: 30330073 .insn 4, 0x30330073 - 1b6e: 30360073 .insn 4, 0x30360073 - 1b72: 0d4a0073 .insn 4, 0x0d4a0073 - 1b76: 0000 unimp - 1b78: 0e6e slli t3,t3,0x1b + 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: 1452 slli s0,s0,0x34 - 1b7e: 0000 unimp - 1b80: 16c2 slli a3,a3,0x30 + 1b7c: 4148 lw a0,4(a0) + 1b7e: 5050 lw a2,36(s0) + 1b80: 0059 c.nop 22 1b82: 0000 unimp - 1b84: 1562 slli a0,a0,0x38 - 1b86: 0000 unimp - 1b88: 0ecc addi a1,sp,852 - 1b8a: 0000 unimp - 1b8c: 0f34 addi a3,sp,920 - 1b8e: 0000 unimp - 1b90: 12ee slli t0,t0,0x3b + 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: 1310 addi a2,sp,416 - 1b96: 0000 unimp - 1b98: 1356 slli t1,t1,0x35 + 1b94: 4548 lw a0,12(a0) + 1b96: 4c41 li s8,16 + 1b98: 4854 lw a3,20(s0) 1b9a: 0000 unimp - 1b9c: 1398 addi a4,sp,480 - 1b9e: 0000 unimp - 1ba0: 13a8 addi a0,sp,488 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 ... -00001ba4 : +00001d10 : ... - 1bb0: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?... - 1bc0: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1bd0: ff3f fc7f ff3f fc7f 073c 1c70 ff3f fc7f ?...?...<.p.?... - 1be0: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1bf0: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1c00: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'... - 1c10: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ............... - 1c20: 0000 0000 .... + 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 .... -00001c24 : +00001d90 : ... - 1c30: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?... - 1c40: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1c50: bf3f fc7e 1f3f 7c7c 0f3e 3c78 1f3f 7c7c ?.~.?.||>.x.x: +00001e10 : ... - 1cb0: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?... - 1cc0: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1cd0: 5f3f 7c7d af3e bc7a ff3f fc7f ff3f fc7f ?_}|>.z.?...?... - 1ce0: ff3f fc7f ff3f fc7f ff3f fc7f ff3f fc7f ?...?...?...?... - 1cf0: 033c 1c60 ff3f fc7f ff3f fc7f ff3f fc7f <.`.?...?...?... - 1d00: ff3f fcff 0020 0400 df27 0400 df27 0400 ?... ...'...'... - 1d10: 0020 0400 ff1f f8ff 0000 0000 0000 0000 ............... - 1d20: 0000 0000 .... + 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 .... -00001d24 : +00001e90 : ... - 1d30: ff1f f8ff ff3f fcff ff3f fc7f ff3f fc7f ....?...?...?... - 1d40: ff3f fc7f ff3f fc7f ff3f fc7f bf3f fc7e ?...?...?...?.~. - 1d50: 1f3f 7c7c 0f3e 3c78 1f3f 7c7c bf3f fc7e ?.||>.x.x: - 1da4: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 1db4: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 1dc4: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 1dd4: ff01 80ff ff03 c0ff ff03 c0ff db03 c0db ................ - 1de4: e703 c0e7 e703 c0e7 db03 c0db fd01 80df ................ - 1df4: fa01 80bf f700 007f 7f00 00fe ff01 c0ff ................ - 1e04: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 1e14: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00001f10 : + 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 ................ -00001e24 : - 1e24: 0000 0080 1000 0088 1100 f088 3100 208c .............1. - 1e34: 3900 40dc 3b00 f0dc 7f00 00fe 7f00 00fe .9.@.;.......... - 1e44: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 1e54: ff01 80ff ff03 c0ff ff03 c0ff ff03 c0ff ................ - 1e64: c303 c0c3 ff03 c0ff ff03 c0ff ff01 80ff ................ - 1e74: fe01 807f ff00 00ff 7f00 00fe ff01 c0ff ................ - 1e84: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 1e94: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00001f90 : + 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 ................ -00001ea4 : - 1ea4: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 1eb4: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 1ec4: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 1ed4: ff01 80ff ff03 c0ff ff03 c0ff e703 c0e7 ................ - 1ee4: e703 c0e7 ff03 c0ff ff03 c0ff fc01 803f ..............?. - 1ef4: fd01 803f fc00 00bf 7c00 003e ff01 c0ff ..?......|>..... - 1f04: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 1f14: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00002010 : + 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 ................ -00001f24 : - 1f24: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 1f34: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 1f44: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 1f54: ff01 80ff 9f03 c0f9 e703 c0e7 ff03 c0ff ................ - 1f64: e703 c0e7 e703 c0e7 ff03 c0ff ff01 80ff ................ - 1f74: ff01 80ff fc00 003f 7b00 00de f701 c0ef ......?..{...... - 1f84: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 1f94: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00002090 : + 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 ................ -00001fa4 : - 1fa4: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 1fb4: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 1fc4: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 1fd4: ff01 80ff ff03 c0ff ff03 c0ff ef03 c0f7 ................ - 1fe4: e703 c0eb db03 c0db ff03 c0ff ff01 80ff ................ - 1ff4: f701 80ef f700 00ef 7b00 00de fc01 c03f .........{....?. - 2004: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 2014: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00002110 : + 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 ................ -00002024 : - 2024: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 2034: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 2044: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 2054: ff01 80ff ff03 c0ff ff03 c0ff ff03 c0ff ................ - 2064: c303 c0c3 ff03 c0ff ff03 c0ff ff01 80ff ................ - 2074: fc01 803f ff00 00ff 7f00 00fe ff01 c0ff ..?............. - 2084: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 2094: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00002190 : + 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 ................ -000020a4 : - 20a4: 0000 0080 1000 0088 1100 0088 3100 008c .............1.. - 20b4: 3900 00dc 3b00 00dc 7f00 00fe 7f00 00fe .9...;.......... - 20c4: f800 003f e700 00c7 df00 00fb bf01 80fd ..?............. - 20d4: ff01 80ff ff03 c0ff ff03 c0ff e703 c0e7 ................ - 20e4: e703 c0e7 ff03 c0ff ff03 c0ff ff01 80ff ................ - 20f4: fc01 803f ff00 00ff 7f00 00fe ff01 c0ff ..?............. - 2104: ff01 c0ff ff03 e0ff ff03 e0ff ff03 e0ff ................ - 2114: ff07 f0ff ff07 f0ff ff0f f8ff ff0f f8ff ................ +00002210 : + 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 ................ -00002124 : +00002290 : ... - 2130: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2140: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2150: ff0f f0ff 010f f080 ff0f f0ff ff0f f0ff ................ - 2160: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2170: ff0f f0ff f80f f00f ff0f f0ff ff0f f0ff ................ - 2180: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................ - 2190: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................ - 21a0: 7f00 00fe .... + 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 .... -000021a4 : +00002310 : ... - 21b0: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 21c0: ff0f f0ff ff0f f0ff ff0f f0ff ef0f f0f7 ................ - 21d0: c70f f0e3 830f f0c1 c70f f0e3 ef0f f0f7 ................ - 21e0: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 21f0: ff0f f0ff ff0f f0ff ff0f f0ff f80f f01f ................ - 2200: c70f f0e3 ff0f f0ff ff07 e0ff 0700 00e0 ................ - 2210: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................ - 2220: 7f00 00fe .... + 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 .... -00002224 : +00002390 : ... - 2230: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2240: ff0f f0ff ff0f f0ff ff0f f0ff df0f f0ef ................ - 2250: af0f f0d7 ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2260: ff0f f0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 2270: c70f f0e3 f80f f01f ff0f f0ff ff0f f0ff ................ - 2280: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................ - 2290: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................ - 22a0: 7f00 00fe .... + 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 .... -000022a4 : +00002410 : ... - 22b0: ff07 e0ff ff0f f0ff ff0f f0ff ff0f f0ff ................ - 22c0: ff0f f0ff ff0f f0ff ef0f f0f7 c70f f0e3 ................ - 22d0: 830f f0c1 c70f f0e3 ef0f f0f7 ff0f f0ff ................ - 22e0: ff0f f0ff ff0f f0ff ff0f f0ff 7f0f f0ff ................ - 22f0: bf0f f0ff df0f f0ff bf0f f0ff 780f f00f .............x.. - 2300: ff0f f0ff ff0f f0ff ff07 e0ff 0700 00e0 ................ - 2310: 0700 00e0 0700 00e0 7f00 00fe 7f00 00fe ................ - 2320: 7f00 00fe .... + 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 .... -00002324 : - 2324: c003 c003 c003 f007 f80f fc1f 7fff 3ffe ...............? - 2334: 1ffc 3ffe 7c1f fc1f f80f f007 c003 c003 ...?.|.......... +00002490 : + 2490: c003 c003 c003 f007 f80f fc1f 7fff 3ffe ...............? + 24a0: 1ffc 3ffe 7c1f fc1f f80f f007 c003 c003 ...?.|.......... -00002344 : - 2344: 0000 0000 0000 c000 c000 c000 c006 c006 ................ - 2354: d806 d806 d836 d836 d836 d836 0000 0000 ....6.6.6.6..... +000024b0 : + 24b0: 0000 0000 0000 c000 c000 c000 c006 c006 ................ + 24c0: d806 d806 d836 d836 d836 d836 0000 0000 ....6.6.6.6..... -00002364 : - 2364: 0000 8000 f007 f80f 3c1c 3e3c 0e30 0e30 .........<<>0.0. - 2374: 0f70 0e30 3e3c 3e3c fc1f f80f f007 8000 p.0.<><>........ +000024d0 : + 24d0: 0000 8000 f007 f80f 3c1c 3e3c 0e30 0e30 .........<<>0.0. + 24e0: 0f70 0e30 3e3c 3e3c fc1f f80f f007 8000 p.0.<><>........ -00002384 : - 2384: 0000 0000 8000 8000 c001 c001 f007 f80d ................ - 2394: f80d f808 fc1d f80d f80f f80f f007 8000 ................ +000024f0 : + 24f0: 0000 0000 8000 8000 c001 c001 f007 f80d ................ + 2500: f80d f808 fc1d f80d f80f f80f f007 8000 ................ -000023a4 : - 23a4: 0000 0000 0000 0004 000c 001c 0018 001c ................ - 23b4: 003c 001c 001e 001f e80f f007 8000 0000 <............... +00002510 : + 2510: 0000 0000 0000 0004 000c 001c 0018 001c ................ + 2520: 003c 001c 001e 001f e80f f007 8000 0000 <............... -000023c4 : - 23c4: 0000 0000 7007 0000 7c1f 7e3f 7e3f 7e3f .....p...|?~?~?~ - 23d4: 0000 7e3f 7e3f 7e3f 7c1f 0000 7007 0000 ..?~?~?~.|...p.. +00002530 : + 2530: 0000 0000 7007 0000 7c1f 7e3f 7e3f 7e3f .....p...|?~?~?~ + 2540: 0000 7e3f 7e3f 7e3f 7c1f 0000 7007 0000 ..?~?~?~.|...p.. -000023e4 : - 23e4: 0000 0000 a000 9001 e00f f01b f83b f831 ............;.1. - 23f4: f83b fc7b f83f f83f f83f f01f e00f 0001 ;.{.?.?.?....... +00002550 : + 2550: 0000 0000 a000 9001 e00f f01b f83b f831 ............;.1. + 2560: f83b fc7b f83f f83f f83f f01f e00f 0001 ;.{.?.?.?....... -00002404 : - 2404: d5ae a880 d33f 4000 148d 0020 c8a1 12da ....?..@.. ..... - 2414: 8f81 f1d9 40db a6a4 ffaf 0000 .....@...... +00002570 : + 2570: d5ae a880 d33f 4000 148d 0020 c8a1 12da ....?..@.. ..... + 2580: 8f81 f1d9 40db a6a4 ffaf 0000 .....@...... -00002420 : - 2420: 1aa0 0000 1ab0 0000 1ac4 0000 1ad4 0000 ................ - 2430: 1ae4 0000 .... +0000258c : + 258c: 1c04 0000 1c14 0000 1c28 0000 1c38 0000 ........(...8... + 259c: 1c48 0000 H... -00002434 : - 2434: 1af4 0000 1afc 0000 1b04 0000 ............ +000025a0 : + 25a0: 1c58 0000 1c60 0000 1c68 0000 X...`...h... -00002440 : +000025ac : ... - 2450: 0000 0200 0000 0000 0000 0000 0000 0000 ................ - 2460: 0080 0080 0f00 00f8 1500 0054 ff00 80ff ..........T..... - 2470: ff01 c0ff ff03 e0ff 1101 4144 d707 f0f5 ..........DA.... - 2480: ef07 f0fb d707 f0f5 1105 5044 ff0f f8ff ..........DP.... - 2490: ff07 f0ff ff07 f0ff 5505 5055 ea07 f0ab .........UUP.... - 24a0: ff43 e0ff ff03 e0ff 5501 4055 ff00 80ff C........UU@.... - 24b0: 3f00 00fe 0f00 04f8 0020 0000 0000 0000 .?...... ....... + 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 .?...... ....... -000024c0 : +0000262c : ... - 24c8: 0000 2000 0000 2000 0004 a800 000e 2000 ... ... ....... - 24d8: 0004 fe03 0000 2000 0000 a880 0f00 20f8 ....... ....... - 24e8: 3f00 20fe 7f00 00ff ff00 80ff ff01 c0ff .?. ............ - 24f8: ff01 c0ff ff03 e0ff f703 e0f7 f703 e0f7 ................ - 2508: e303 e0e3 f707 f0f7 f703 e0f7 ff03 e0ff ................ - 2518: ff03 e0ff e703 e0f3 f801 c00f ff01 c0ff ................ - 2528: ff00 80ff 7f00 00ff 3f00 00fe 0f00 00f8 .........?...... - 2538: 0000 0080 0000 0000 ........ + 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 ........ -00002540 : - 2540: 22a4 0000 22a4 0000 2224 0000 21a4 0000 ."..."..$"...!.. - 2550: 2224 0000 2124 0000 21a4 0000 20a4 0000 $"..$!...!... .. - 2560: 2024 0000 1fa4 0000 1f24 0000 1ea4 0000 $ ......$....... - 2570: 1e24 0000 1da4 0000 1d24 0000 1d24 0000 $.......$...$... - 2580: 1ca4 0000 1c24 0000 1ca4 0000 1ba4 0000 ....$........... - 2590: 1c24 0000 $... +000026ac : + 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 .... -00002594 : - 2594: 23e4 0000 23c4 0000 23a4 0000 2384 0000 .#...#...#...#.. - 25a4: 2364 0000 2344 0000 2324 0000 d#..D#..$#.. +00002700 : + 2700: 2550 0000 2530 0000 2510 0000 24f0 0000 P%..0%...%...$.. + 2710: 24d0 0000 24b0 0000 2490 0000 .$...$...$.. -000025b0 : - 25b0: 1b0c 0000 1b14 0000 1b1c 0000 1b24 0000 ............$... - 25c0: 1b2c 0000 ,... +0000271c : + 271c: 1c70 0000 1c78 0000 1c80 0000 1c88 0000 p...x........... + 272c: 1c90 0000 .... -000025c4 : - 25c4: 1b34 0000 1b3c 0000 1b44 0000 1a28 0000 4...<...D...(... - 25d4: 1b4c 0000 1b54 0000 1b5c 0000 L...T...\... +00002730 : + 2730: 1c98 0000 1ca0 0000 1ca8 0000 1b8c 0000 ................ + 2740: 1cb0 0000 1cb8 0000 1cc0 0000 ............ -000025e0 : - 25e0: 1b68 0000 1b6c 0000 1b70 0000 1984 0000 h...l...p....... +0000274c : + 274c: 1ccc 0000 1cd0 0000 1cd4 0000 1cd8 0000 ................ + 275c: 1cdc 0000 1ae8 0000 ........ -000025f0 : +00002764 : ... - 25f8: ff00 00fc ff03 00ff ff07 80ff 1f06 80e1 ................ - 2608: 3006 8031 3006 8031 3f06 00c3 3306 0003 .01..01..?...3.. - 2618: 3106 0083 3006 00c3 0006 0006 0f06 0006 .1...0.......... - 2628: ff07 80ff ff0f c0ff ff1f e0ff ff3f f0ff ............?... - 2638: ff7f f8ff ffff fcff ffff fcff f000 00f0 ................ - 2648: ff03 00f0 ff0f 00fc 0000 0000 0000 0000 ................ + 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 ................ ... -00002670 : +000027e4 : + 27e4: 0053 00a7 00fa 01f4 03e8 0000 S........... + +000027f0 : ... - 2678: 817e 81a5 99bd 7e81 ff7e ffdb e7c3 7eff ~......~~......~ - 2688: fe6c fefe 387c 0010 3810 fe7c 387c 0010 l...|8...8|.|8.. - 2698: 7c38 fe38 d6fe 3810 3810 fe7c 7cfe 3810 8|8....8.8|..|.8 - 26a8: 0000 3c18 183c 0000 ffff c3e7 e7c3 ffff ...<<........... - 26b8: 3c00 4266 6642 003c c3ff bd99 99bd ffc3 ..>....<~..~<. - 2708: 6666 6666 0066 0066 db7f 7bdb 1b1b 001b fffff.f....{.... - 2718: 613e 663c 3c66 7c86 0000 0000 7e7e 007e >a`<.|.. - 2798: c600 18cc 6630 00c6 6c38 7638 ccdc 0076 ....0f..8l8v..v. - 27a8: 1818 0030 0000 0000 180c 3030 1830 000c ..0.......000... - 27b8: 1830 0c0c 180c 0030 6600 ff3c 663c 0000 0.....0..f<.l...... - 2b08: 827c c67c c6c6 007c 00c6 c67c c6c6 007c |.|...|...|...|. - 2b18: 1830 c67c c6c6 007c 8478 cc00 cccc 0076 0.|...|.x.....v. - 2b28: 3060 cccc cccc 0076 00c6 c6c6 7ec6 fc06 `0....v......~.. - 2b38: 38c6 c66c 6cc6 0038 00c6 c6c6 c6c6 007c .8l..l8.......|. - 2b48: 1818 c07e 7ec0 1818 6c38 f064 6660 00fc ..~..~..8ld.`f.. - 2b58: 6666 7e3c 7e18 1818 ccf8 facc cfc6 c7c6 ff<~.~.......... - 2b68: 1b0e 3c18 d818 0070 3018 0c78 cc7c 0076 ...<..p..0x.|.v. - 2b78: 180c 3800 1818 003c 180c c67c c6c6 007c ...8..<...|...|. - 2b88: 3018 cccc cccc 0076 dc76 dc00 6666 0066 .0....v.v...fff. - 2b98: dc76 e600 def6 00ce 6c3c 3e6c 7e00 0000 v........~.. - 2ba8: 6c38 386c 7c00 0000 0018 1818 6330 003e 8ll8.|......0c>. - 2bb8: 0000 fe00 c0c0 0000 0000 fe00 0606 0000 ................ - 2bc8: e663 7e6c 6633 0fcc e663 7a6c 6a36 06df c.l~3f..c.lz6j.. - 2bd8: 0018 1818 3c3c 0018 3300 cc66 3366 0000 ....<<...3f.f3.. - 2be8: cc00 3366 cc66 0000 8822 8822 8822 8822 ..f3f...".".".". - 2bf8: aa55 aa55 aa55 aa55 dd77 dd77 dd77 dd77 U.U.U.U.w.w.w.w. - 2c08: 1818 1818 1818 1818 1818 1818 18f8 1818 ................ - 2c18: 1818 18f8 18f8 1818 3636 3636 36f6 3636 ........6666.666 - 2c28: 0000 0000 36fe 3636 0000 18f8 18f8 1818 .....666........ - 2c38: 3636 06f6 36f6 3636 3636 3636 3636 3636 66...66666666666 - 2c48: 0000 06fe 36f6 3636 3636 06f6 00fe 0000 .....66666...... - 2c58: 3636 3636 00fe 0000 1818 18f8 00f8 0000 6666............ - 2c68: 0000 0000 18f8 1818 1818 1818 001f 0000 ................ - 2c78: 1818 1818 00ff 0000 0000 0000 18ff 1818 ................ - 2c88: 1818 1818 181f 1818 0000 0000 00ff 0000 ................ - 2c98: 1818 1818 18ff 1818 1818 181f 181f 1818 ................ - 2ca8: 3636 3636 3637 3636 3636 3037 003f 0000 666676666670?... - 2cb8: 0000 303f 3637 3636 3636 00f7 00ff 0000 ..?0766666...... - 2cc8: 0000 00ff 36f7 3636 3636 3037 3637 3636 .....66666707666 - 2cd8: 0000 00ff 00ff 0000 3636 00f7 36f7 3636 ........66...666 - 2ce8: 1818 00ff 00ff 0000 3636 3636 00ff 0000 ........6666.... - 2cf8: 0000 00ff 18ff 1818 0000 0000 36ff 3636 .............666 - 2d08: 3636 3636 003f 0000 1818 181f 001f 0000 6666?........... - 2d18: 0000 181f 181f 1818 0000 0000 363f 3636 ............?666 - 2d28: 3636 3636 36ff 3636 1818 18ff 18ff 1818 6666.666........ - 2d38: 1818 1818 00f8 0000 0000 0000 181f 1818 ................ - 2d48: ffff ffff ffff ffff 0000 0000 ffff ffff ................ - 2d58: f0f0 f0f0 f0f0 f0f0 0f0f 0f0f 0f0f 0f0f ................ - 2d68: ffff ffff 0000 0000 0000 dc76 dcc8 0076 ..........v...v. - 2d78: cc78 d8cc c6cc 00cc c6fe c0c0 c0c0 00c0 x............... - 2d88: 0000 6cfe 6c6c 006c c6fe 3060 c660 00fe ...llll...`0`... - 2d98: 0000 d87e d8d8 0070 0000 6666 6666 c07c ..~...p...ffff|. - 2da8: 7600 18dc 1818 0018 187e 663c 3c66 7e18 .v......~.ff<...~..~.. - 2dd8: 0c06 db7e 7edb c060 301e 7e60 3060 001e ..~..~`..0`~`0.. - 2de8: 7c00 c6c6 c6c6 00c6 fe00 fe00 fe00 0000 .|.............. - 2df8: 1818 187e 0018 007e 1830 180c 0030 007e ..~...~.0...0.~. - 2e08: 180c 1830 000c 007e 1b0e 181b 1818 1818 ..0...~......... - 2e18: 1818 1818 d818 70d8 1800 7e00 1800 0000 .......p...~.... - 2e28: 7600 00dc dc76 0000 6c38 386c 0000 0000 .v..v...8ll8.... - 2e38: 0000 1800 0018 0000 0000 1800 0000 0000 ................ - 2e48: 0c0f 0c0c 6cec 1c3c 366c 3636 0036 0000 .....l<.l6666... - 2e58: 0c78 3018 007c 0000 0000 3c3c 3c3c 0000 x..0|.....<<<<.. + 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 ..>....<~..~<. + 2888: 6666 6666 0066 0066 db7f 7bdb 1b1b 001b fffff.f....{.... + 2898: 613e 663c 3c66 7c86 0000 0000 7e7e 007e >a`<.|.. + 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<.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........~.. + 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<...~..~.. + 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|.....<<<<.. ... diff --git a/tama.map b/tama.map index 4066c3a..8605570 100644 --- a/tama.map +++ b/tama.map @@ -1,65 +1,65 @@ Archive member included to satisfy reference by file (symbol) ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) - /tmp/ccVfyVtG.ltrans0.ltrans.o (__divsi3) + /tmp/ccYbPpFS.ltrans0.ltrans.o (__divsi3) Discarded input sections - .text 0x00000000 0x0 /tmp/ccVfyVtG.ltrans0.ltrans.o - .data 0x00000000 0x0 /tmp/ccVfyVtG.ltrans0.ltrans.o - .bss 0x00000000 0x0 /tmp/ccVfyVtG.ltrans0.ltrans.o + .text 0x00000000 0x0 /tmp/ccYbPpFS.ltrans0.ltrans.o + .data 0x00000000 0x0 /tmp/ccYbPpFS.ltrans0.ltrans.o + .bss 0x00000000 0x0 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.mini_pad - 0x00000000 0x8a /tmp/ccVfyVtG.ltrans0.ltrans.o - .text._puts 0x00000000 0x40 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x8a /tmp/ccYbPpFS.ltrans0.ltrans.o + .text._puts 0x00000000 0x40 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.mini_itoa.part.0 - 0x00000000 0xcc /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0xcc /tmp/ccYbPpFS.ltrans0.ltrans.o .text.__puts_uart - 0x00000000 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strlen 0x00000000 0x12 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strlen 0x00000000 0x12 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.mini_vpprintf - 0x00000000 0x1d8 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.printf 0x00000000 0x2c /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.vprintf 0x00000000 0x16 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x1d8 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.printf 0x00000000 0x2c /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.vprintf 0x00000000 0x16 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.mini_vsnprintf - 0x00000000 0x42 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x42 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.snprintf - 0x00000000 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.sprintf 0x00000000 0x26 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strcpy 0x00000000 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strncpy 0x00000000 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strcmp 0x00000000 0x1a /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strncmp 0x00000000 0x2e /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strchr 0x00000000 0x16 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strrchr 0x00000000 0x3c /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.memcmp 0x00000000 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.memmove 0x00000000 0x5e /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.memchr 0x00000000 0x1a /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strnlen 0x00000000 0x2a /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.sprintf 0x00000000 0x26 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strcpy 0x00000000 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strncpy 0x00000000 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strcmp 0x00000000 0x1a /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strncmp 0x00000000 0x2e /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strchr 0x00000000 0x16 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strrchr 0x00000000 0x3c /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.memcmp 0x00000000 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.memmove 0x00000000 0x5e /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.memchr 0x00000000 0x1a /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strnlen 0x00000000 0x2a /tmp/ccYbPpFS.ltrans0.ltrans.o .text.twoway_strstr - 0x00000000 0x232 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.strstr 0x00000000 0x11c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x232 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.strstr 0x00000000 0x11c /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.puts.str1.4 - 0x00000000 0x2 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.puts 0x00000000 0x40 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.setjmp 0x00000000 0x10 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.longjmp 0x00000000 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x2 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.puts 0x00000000 0x40 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.setjmp 0x00000000 0x10 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.longjmp 0x00000000 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.APBAHBPrescTable.lto_priv.0 - 0x00000000 0x10 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x10 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.ADCPrescTable.lto_priv.0 - 0x00000000 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.APBAHBPrescTable.lto_priv.1 - 0x00000000 0x10 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x10 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.ADCPrescTable.lto_priv.1 - 0x00000000 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o - .comment 0x00000000 0x35 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o + .comment 0x00000000 0x35 /tmp/ccYbPpFS.ltrans0.ltrans.o .note.GNU-stack - 0x00000000 0x0 /tmp/ccVfyVtG.ltrans0.ltrans.o - .comment 0x00000000 0x35 /tmp/ccZG4jMj.debug.temp.o + 0x00000000 0x0 /tmp/ccYbPpFS.ltrans0.ltrans.o + .comment 0x00000000 0x35 /tmp/cc5ko34Y.debug.temp.o .note.GNU-stack - 0x00000000 0x0 /tmp/ccZG4jMj.debug.temp.o - .comment 0x00000000 0x35 /tmp/ccYBrTfR.debug.temp.o + 0x00000000 0x0 /tmp/cc5ko34Y.debug.temp.o + .comment 0x00000000 0x35 /tmp/ccymsL4U.debug.temp.o .note.GNU-stack - 0x00000000 0x0 /tmp/ccYBrTfR.debug.temp.o + 0x00000000 0x0 /tmp/ccymsL4U.debug.temp.o .data 0x00000000 0x0 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .bss 0x00000000 0x0 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) @@ -72,11 +72,11 @@ RAM 0x20000000 0x00000800 xrw Linker script and memory map -LOAD /tmp/ccEdiVvO.o -LOAD /tmp/ccVfyVtG.ltrans0.ltrans.o -LOAD /tmp/ccZG4jMj.debug.temp.o -LOAD /tmp/ccYBrTfR.debug.temp.o -LOAD /tmp/ccR7SLfL.o +LOAD /tmp/ccU4qhBs.o +LOAD /tmp/ccYbPpFS.ltrans0.ltrans.o +LOAD /tmp/cc5ko34Y.debug.temp.o +LOAD /tmp/ccymsL4U.debug.temp.o +LOAD /tmp/ccM8DSKk.o LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a @@ -84,14 +84,14 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a 0x00000000 _sinit = . 0x00000000 . = ALIGN (0x4) *(SORT_NONE(.init)) - .init 0x00000000 0x9e /tmp/ccVfyVtG.ltrans0.ltrans.o + .init 0x00000000 0x9e /tmp/ccYbPpFS.ltrans0.ltrans.o 0x00000000 InterruptVectorDefault 0x00000000 InterruptVector 0x000000a0 . = ALIGN (0x4) *fill* 0x0000009e 0x2 0x000000a0 _einit = . -.text 0x000000a0 0x2dd0 +.text 0x000000a0 0x2f50 0x000000a0 . = ALIGN (0x4) *(.text) .text 0x000000a0 0x7e ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) @@ -102,359 +102,365 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a 0x000000f8 __modsi3 *(.text.*) .text.DelaySysTick - 0x0000011e 0x12 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000011e 0x12 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_i2c_setup - 0x00000130 0x54 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000130 0x54 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawPixel - 0x00000184 0x3c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000184 0x3c /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_fillRect - 0x000001c0 0x58 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000001c0 0x58 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawstr - 0x00000218 0x8c /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.s_cat 0x000002a4 0x12 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.u_cat 0x000002b6 0x60 /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.beep 0x00000316 0x70 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000218 0x8c /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.s_cat 0x000002a4 0x12 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.u_cat 0x000002b6 0x60 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.beep 0x00000316 0x70 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.led_blink - 0x00000386 0x2a /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.add_xp 0x000003b0 0xce /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.notify 0x0000047e 0x8e /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000386 0x2a /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.add_xp 0x000003b0 0xce /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.notify 0x0000047e 0x8e /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.game_tick + 0x0000050c 0x23a /tmp/ccYbPpFS.ltrans0.ltrans.o .text.draw_center_str - 0x0000050c 0x28 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000746 0x28 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.read_buttons - 0x00000534 0x32 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000076e 0x32 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawFastHLine.part.0 - 0x00000566 0x44 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000007a0 0x44 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawLine.constprop.0 - 0x000005aa 0xd0 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000007e4 0xd0 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawFastVLine.constprop.0 - 0x0000067a 0x44 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000008b4 0x46 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawRect.constprop.0 - 0x000006be 0x56 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000008fa 0x56 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.draw_bar - 0x00000714 0x62 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000950 0x68 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_drawImage.constprop.0 - 0x00000776 0xc0 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000009b8 0xc0 /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_i2c_send.constprop.0 - 0x00000836 0x11a /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000a78 0x11a /tmp/ccYbPpFS.ltrans0.ltrans.o .text.ssd1306_cmd - 0x00000950 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000b92 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o .text.handle_reset - 0x0000096c 0x72 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x0000096c handle_reset + 0x00000bae 0x72 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000bae handle_reset .text.vector_handler - 0x000009de 0x10 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x000009de OPCM_IRQHandler - 0x000009de EXTI2_IRQHandler - 0x000009de TIM8_TRG_COM_IRQHandler - 0x000009de TIM8_CC_IRQHandler - 0x000009de USART_WKUP_IRQHandler - 0x000009de UART8_IRQHandler - 0x000009de SPI4_IRQHandler - 0x000009de NFC_IRQHandler - 0x000009de DFSDM0_IRQHandler - 0x000009de TIM1_CC_IRQHandler - 0x000009de HardFault_Handler - 0x000009de TIM10_IRQHandler - 0x000009de GPIOB_IRQHandler - 0x000009de IPC_CH2_Handler - 0x000009de USBPD_IRQHandler - 0x000009de TIM6_IRQHandler - 0x000009de GPIOA_IRQHandler - 0x000009de SysTick_Handler - 0x000009de CAN3_RX1_IRQHandler - 0x000009de I3C_ER_IRQHandler - 0x000009de PVD_IRQHandler - 0x000009de SDIO_IRQHandler - 0x000009de TIM9_BRK_IRQHandler - 0x000009de DMA2_Channel8_IRQHandler - 0x000009de CAN2_RX1_IRQHandler - 0x000009de EXTI3_IRQHandler - 0x000009de HSEM_Handler - 0x000009de UART1_IRQHandler - 0x000009de USBHS_IRQHandler - 0x000009de LPTIM2_IRQHandler - 0x000009de DMA2_Channel9_IRQHandler - 0x000009de TIM10_CC_IRQHandler - 0x000009de EXTI25_16_IRQHandler - 0x000009de I2C3_ER_IRQHandler - 0x000009de USBFS_IRQHandler - 0x000009de UART0_IRQHandler - 0x000009de USART8_IRQHandler - 0x000009de EXTI0_IRQHandler - 0x000009de I2C2_EV_IRQHandler - 0x000009de TIM10_TRG_COM_IRQHandler - 0x000009de LPTIM_IRQHandler - 0x000009de CAN1_RX0_IRQHandler - 0x000009de CAN3_SCE_IRQHandler - 0x000009de CAN2_SCE_IRQHandler - 0x000009de ADC1_2_IRQHandler - 0x000009de BB_IRQHandler - 0x000009de Break_Point_Handler - 0x000009de IPC_CH0_Handler - 0x000009de TIM2_CC_IRQHandler - 0x000009de SPI1_IRQHandler - 0x000009de USART5_IRQHandler - 0x000009de TAMPER_IRQHandler - 0x000009de TMR0_IRQHandler - 0x000009de AWU_IRQHandler - 0x000009de EXTI7_0_IRQHandler - 0x000009de CAN2_RX0_IRQHandler - 0x000009de OSCWakeUp_IRQHandler - 0x000009de TIM8_UP_IRQHandler - 0x000009de Ecall_M_Mode_Handler - 0x000009de ECDC_IRQHandler - 0x000009de SDMMC_IRQHandler - 0x000009de USART7_IRQHandler - 0x000009de DMA2_Channel2_IRQHandler - 0x000009de DMA1_Channel4_IRQHandler - 0x000009de ADC1_IRQHandler - 0x000009de TIM2_BRK_IRQHandler - 0x000009de USART6_IRQHandler - 0x000009de CAN3_RX0_IRQHandler - 0x000009de HSADC_IRQHandler - 0x000009de TIM9_UP_IRQHandler - 0x000009de USART3_IRQHandler - 0x000009de RTC_IRQHandler - 0x000009de DMA1_Channel7_IRQHandler - 0x000009de LED_IRQHandler - 0x000009de CAN1_RX1_IRQHandler - 0x000009de DVP_IRQHandler - 0x000009de UART5_IRQHandler - 0x000009de USBSS_IRQHandler - 0x000009de SWPMI_IRQHandler - 0x000009de USBPDWakeUp_IRQHandler - 0x000009de EXTI15_8_IRQHandler - 0x000009de TIM4_IRQHandler - 0x000009de DMA2_Channel1_IRQHandler - 0x000009de SWPMI_WKUP_IRQHandler - 0x000009de USBPD_WKUP_IRQHandler - 0x000009de I2C1_EV_IRQHandler - 0x000009de USBSSWakeup_IRQHandler - 0x000009de UART2_IRQHandler - 0x000009de USART4_IRQHandler - 0x000009de PWMX_IRQHandler - 0x000009de DMA1_Channel6_IRQHandler - 0x000009de UART4_IRQHandler - 0x000009de DMA2_Channel4_IRQHandler - 0x000009de TIM3_IRQHandler - 0x000009de RCC_IRQHandler - 0x000009de TIM1_TRG_COM_IRQHandler - 0x000009de DMA1_Channel1_IRQHandler - 0x000009de DMA2_Channel7_IRQHandler - 0x000009de QSPI1_IRQHandler - 0x000009de EXTI15_10_IRQHandler - 0x000009de ADC_IRQHandler - 0x000009de IPC_CH3_Handler - 0x000009de DMA1_Channel8_IRQHandler - 0x000009de I3C_EV_IRQHandler - 0x000009de TMR2_IRQHandler - 0x000009de I3C_WKUP_IRQHandler - 0x000009de DefaultIRQHandler - 0x000009de TIM12_IRQHandler - 0x000009de TIM7_IRQHandler - 0x000009de CAN2_TX_IRQHandler - 0x000009de TIM5_IRQHandler - 0x000009de I2C3_EV_IRQHandler - 0x000009de USB_IRQHandler - 0x000009de EXTI9_5_IRQHandler - 0x000009de PIOC_IRQHandler - 0x000009de TIM9_IRQHandler - 0x000009de LTDC_IRQHandler - 0x000009de SAI_IRQHandler - 0x000009de SPI2_IRQHandler - 0x000009de OSC32KCal_IRQHandler - 0x000009de IPC_CH1_Handler - 0x000009de I2C_IRQHandler - 0x000009de LPTIM1_WKUP_IRQHandler - 0x000009de TIM10_BRK_IRQHandler - 0x000009de TIM9_CC_IRQHandler - 0x000009de CAN1_TX_IRQHandler - 0x000009de DMA2_Channel5_IRQHandler - 0x000009de USB2_IRQHandler - 0x000009de USBHSWakeUp_IRQHandler - 0x000009de DMA1_Channel5_IRQHandler - 0x000009de EXTI4_IRQHandler - 0x000009de USB_LP_CAN1_RX0_IRQHandler - 0x000009de QSPI2_IRQHandler - 0x000009de RNG_IRQHandler - 0x000009de USB_HP_CAN1_TX_IRQHandler - 0x000009de LLE_IRQHandler - 0x000009de CMPWakeUp_IRQHandler - 0x000009de DMA1_Channel3_IRQHandler - 0x000009de FSMC_IRQHandler - 0x000009de ETH_IRQHandler - 0x000009de TIM1_UP_IRQHandler - 0x000009de LPTIMWakeUp_IRQHandler - 0x000009de WWDG_IRQHandler - 0x000009de USBHSWakeup_IRQHandler - 0x000009de DMA2_Channel11_IRQHandler - 0x000009de WDOG_BAT_IRQHandler - 0x000009de Ecall_U_Mode_Handler - 0x000009de I2C4_EV_IRQHandler - 0x000009de CAN3_TX_IRQHandler - 0x000009de TMR3_IRQHandler - 0x000009de DMA2_Channel6_IRQHandler - 0x000009de TIM2_IRQHandler - 0x000009de SW_Handler - 0x000009de TIM1_BRK_IRQHandler - 0x000009de GPHA_IRQHandler - 0x000009de OPA_IRQHandler - 0x000009de DMA2_Channel10_IRQHandler - 0x000009de EXTI1_IRQHandler - 0x000009de SPI0_IRQHandler - 0x000009de USB2_HOST_IRQHandler - 0x000009de LPTIM2_WKUP_IRQHandler - 0x000009de RTCAlarm_IRQHandler - 0x000009de TIM11_IRQHandler - 0x000009de TIM10_UP_IRQHandler - 0x000009de TIM9_TRG_COM_IRQHandler - 0x000009de UART7_IRQHandler - 0x000009de USART2_IRQHandler - 0x000009de UART6_IRQHandler - 0x000009de UHSIF_IRQHandler - 0x000009de ETHWakeUp_IRQHandler - 0x000009de I2C2_ER_IRQHandler - 0x000009de DMA1_Channel2_IRQHandler - 0x000009de TIM8_BRK_IRQHandler - 0x000009de TIM2_TRG_IRQHandler - 0x000009de CAN1_SCE_IRQHandler - 0x000009de FLASH_IRQHandler - 0x000009de USBFSWakeUp_IRQHandler - 0x000009de USART1_IRQHandler - 0x000009de OTG_FS_IRQHandler - 0x000009de SPI3_IRQHandler - 0x000009de USBFS_WakeUp_IRQHandler - 0x000009de UART3_IRQHandler - 0x000009de I2C1_ER_IRQHandler - 0x000009de FMC_IRQHandler - 0x000009de USB2_DEVICE_IRQHandler - 0x000009de LPTIM1_IRQHandler - 0x000009de DFSDM1_IRQHandler - 0x000009de TMR1_IRQHandler - 0x000009de I2C4_ER_IRQHandler - 0x000009de SERDES_IRQHandler - 0x000009de USBSS_LINK_IRQHandler - 0x000009de USBWakeUp_IRQHandler - 0x000009de DMA2_Channel3_IRQHandler - 0x000009e0 NMI_Handler - 0x000009e0 NMI_RCC_CSS_IRQHandler - .text.memset 0x000009ee 0x12 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x000009ee memset + 0x00000c20 0x10 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000c20 OPCM_IRQHandler + 0x00000c20 EXTI2_IRQHandler + 0x00000c20 TIM8_TRG_COM_IRQHandler + 0x00000c20 TIM8_CC_IRQHandler + 0x00000c20 USART_WKUP_IRQHandler + 0x00000c20 UART8_IRQHandler + 0x00000c20 SPI4_IRQHandler + 0x00000c20 NFC_IRQHandler + 0x00000c20 DFSDM0_IRQHandler + 0x00000c20 TIM1_CC_IRQHandler + 0x00000c20 HardFault_Handler + 0x00000c20 TIM10_IRQHandler + 0x00000c20 GPIOB_IRQHandler + 0x00000c20 IPC_CH2_Handler + 0x00000c20 USBPD_IRQHandler + 0x00000c20 TIM6_IRQHandler + 0x00000c20 GPIOA_IRQHandler + 0x00000c20 SysTick_Handler + 0x00000c20 CAN3_RX1_IRQHandler + 0x00000c20 I3C_ER_IRQHandler + 0x00000c20 PVD_IRQHandler + 0x00000c20 SDIO_IRQHandler + 0x00000c20 TIM9_BRK_IRQHandler + 0x00000c20 DMA2_Channel8_IRQHandler + 0x00000c20 CAN2_RX1_IRQHandler + 0x00000c20 EXTI3_IRQHandler + 0x00000c20 HSEM_Handler + 0x00000c20 UART1_IRQHandler + 0x00000c20 USBHS_IRQHandler + 0x00000c20 LPTIM2_IRQHandler + 0x00000c20 DMA2_Channel9_IRQHandler + 0x00000c20 TIM10_CC_IRQHandler + 0x00000c20 EXTI25_16_IRQHandler + 0x00000c20 I2C3_ER_IRQHandler + 0x00000c20 USBFS_IRQHandler + 0x00000c20 UART0_IRQHandler + 0x00000c20 USART8_IRQHandler + 0x00000c20 EXTI0_IRQHandler + 0x00000c20 I2C2_EV_IRQHandler + 0x00000c20 TIM10_TRG_COM_IRQHandler + 0x00000c20 LPTIM_IRQHandler + 0x00000c20 CAN1_RX0_IRQHandler + 0x00000c20 CAN3_SCE_IRQHandler + 0x00000c20 CAN2_SCE_IRQHandler + 0x00000c20 ADC1_2_IRQHandler + 0x00000c20 BB_IRQHandler + 0x00000c20 Break_Point_Handler + 0x00000c20 IPC_CH0_Handler + 0x00000c20 TIM2_CC_IRQHandler + 0x00000c20 SPI1_IRQHandler + 0x00000c20 USART5_IRQHandler + 0x00000c20 TAMPER_IRQHandler + 0x00000c20 TMR0_IRQHandler + 0x00000c20 AWU_IRQHandler + 0x00000c20 CAN2_RX0_IRQHandler + 0x00000c20 OSCWakeUp_IRQHandler + 0x00000c20 TIM8_UP_IRQHandler + 0x00000c20 Ecall_M_Mode_Handler + 0x00000c20 ECDC_IRQHandler + 0x00000c20 SDMMC_IRQHandler + 0x00000c20 USART7_IRQHandler + 0x00000c20 DMA2_Channel2_IRQHandler + 0x00000c20 DMA1_Channel4_IRQHandler + 0x00000c20 ADC1_IRQHandler + 0x00000c20 TIM2_BRK_IRQHandler + 0x00000c20 USART6_IRQHandler + 0x00000c20 CAN3_RX0_IRQHandler + 0x00000c20 HSADC_IRQHandler + 0x00000c20 TIM9_UP_IRQHandler + 0x00000c20 USART3_IRQHandler + 0x00000c20 RTC_IRQHandler + 0x00000c20 DMA1_Channel7_IRQHandler + 0x00000c20 LED_IRQHandler + 0x00000c20 CAN1_RX1_IRQHandler + 0x00000c20 DVP_IRQHandler + 0x00000c20 UART5_IRQHandler + 0x00000c20 USBSS_IRQHandler + 0x00000c20 SWPMI_IRQHandler + 0x00000c20 USBPDWakeUp_IRQHandler + 0x00000c20 EXTI15_8_IRQHandler + 0x00000c20 TIM4_IRQHandler + 0x00000c20 DMA2_Channel1_IRQHandler + 0x00000c20 SWPMI_WKUP_IRQHandler + 0x00000c20 USBPD_WKUP_IRQHandler + 0x00000c20 I2C1_EV_IRQHandler + 0x00000c20 USBSSWakeup_IRQHandler + 0x00000c20 UART2_IRQHandler + 0x00000c20 USART4_IRQHandler + 0x00000c20 PWMX_IRQHandler + 0x00000c20 DMA1_Channel6_IRQHandler + 0x00000c20 UART4_IRQHandler + 0x00000c20 DMA2_Channel4_IRQHandler + 0x00000c20 TIM3_IRQHandler + 0x00000c20 RCC_IRQHandler + 0x00000c20 TIM1_TRG_COM_IRQHandler + 0x00000c20 DMA1_Channel1_IRQHandler + 0x00000c20 DMA2_Channel7_IRQHandler + 0x00000c20 QSPI1_IRQHandler + 0x00000c20 EXTI15_10_IRQHandler + 0x00000c20 ADC_IRQHandler + 0x00000c20 IPC_CH3_Handler + 0x00000c20 DMA1_Channel8_IRQHandler + 0x00000c20 I3C_EV_IRQHandler + 0x00000c20 TMR2_IRQHandler + 0x00000c20 I3C_WKUP_IRQHandler + 0x00000c20 DefaultIRQHandler + 0x00000c20 TIM12_IRQHandler + 0x00000c20 TIM7_IRQHandler + 0x00000c20 CAN2_TX_IRQHandler + 0x00000c20 TIM5_IRQHandler + 0x00000c20 I2C3_EV_IRQHandler + 0x00000c20 USB_IRQHandler + 0x00000c20 EXTI9_5_IRQHandler + 0x00000c20 PIOC_IRQHandler + 0x00000c20 TIM9_IRQHandler + 0x00000c20 LTDC_IRQHandler + 0x00000c20 SAI_IRQHandler + 0x00000c20 SPI2_IRQHandler + 0x00000c20 OSC32KCal_IRQHandler + 0x00000c20 IPC_CH1_Handler + 0x00000c20 I2C_IRQHandler + 0x00000c20 LPTIM1_WKUP_IRQHandler + 0x00000c20 TIM10_BRK_IRQHandler + 0x00000c20 TIM9_CC_IRQHandler + 0x00000c20 CAN1_TX_IRQHandler + 0x00000c20 DMA2_Channel5_IRQHandler + 0x00000c20 USB2_IRQHandler + 0x00000c20 USBHSWakeUp_IRQHandler + 0x00000c20 DMA1_Channel5_IRQHandler + 0x00000c20 EXTI4_IRQHandler + 0x00000c20 USB_LP_CAN1_RX0_IRQHandler + 0x00000c20 QSPI2_IRQHandler + 0x00000c20 RNG_IRQHandler + 0x00000c20 USB_HP_CAN1_TX_IRQHandler + 0x00000c20 LLE_IRQHandler + 0x00000c20 CMPWakeUp_IRQHandler + 0x00000c20 DMA1_Channel3_IRQHandler + 0x00000c20 FSMC_IRQHandler + 0x00000c20 ETH_IRQHandler + 0x00000c20 TIM1_UP_IRQHandler + 0x00000c20 LPTIMWakeUp_IRQHandler + 0x00000c20 WWDG_IRQHandler + 0x00000c20 USBHSWakeup_IRQHandler + 0x00000c20 DMA2_Channel11_IRQHandler + 0x00000c20 WDOG_BAT_IRQHandler + 0x00000c20 Ecall_U_Mode_Handler + 0x00000c20 I2C4_EV_IRQHandler + 0x00000c20 CAN3_TX_IRQHandler + 0x00000c20 TMR3_IRQHandler + 0x00000c20 DMA2_Channel6_IRQHandler + 0x00000c20 SW_Handler + 0x00000c20 TIM1_BRK_IRQHandler + 0x00000c20 GPHA_IRQHandler + 0x00000c20 OPA_IRQHandler + 0x00000c20 DMA2_Channel10_IRQHandler + 0x00000c20 EXTI1_IRQHandler + 0x00000c20 SPI0_IRQHandler + 0x00000c20 USB2_HOST_IRQHandler + 0x00000c20 LPTIM2_WKUP_IRQHandler + 0x00000c20 RTCAlarm_IRQHandler + 0x00000c20 TIM11_IRQHandler + 0x00000c20 TIM10_UP_IRQHandler + 0x00000c20 TIM9_TRG_COM_IRQHandler + 0x00000c20 UART7_IRQHandler + 0x00000c20 USART2_IRQHandler + 0x00000c20 UART6_IRQHandler + 0x00000c20 UHSIF_IRQHandler + 0x00000c20 ETHWakeUp_IRQHandler + 0x00000c20 I2C2_ER_IRQHandler + 0x00000c20 DMA1_Channel2_IRQHandler + 0x00000c20 TIM8_BRK_IRQHandler + 0x00000c20 TIM2_TRG_IRQHandler + 0x00000c20 CAN1_SCE_IRQHandler + 0x00000c20 FLASH_IRQHandler + 0x00000c20 USBFSWakeUp_IRQHandler + 0x00000c20 USART1_IRQHandler + 0x00000c20 OTG_FS_IRQHandler + 0x00000c20 SPI3_IRQHandler + 0x00000c20 USBFS_WakeUp_IRQHandler + 0x00000c20 UART3_IRQHandler + 0x00000c20 I2C1_ER_IRQHandler + 0x00000c20 FMC_IRQHandler + 0x00000c20 USB2_DEVICE_IRQHandler + 0x00000c20 LPTIM1_IRQHandler + 0x00000c20 DFSDM1_IRQHandler + 0x00000c20 TMR1_IRQHandler + 0x00000c20 I2C4_ER_IRQHandler + 0x00000c20 SERDES_IRQHandler + 0x00000c20 USBSS_LINK_IRQHandler + 0x00000c20 USBWakeUp_IRQHandler + 0x00000c20 DMA2_Channel3_IRQHandler + 0x00000c22 NMI_Handler + 0x00000c22 NMI_RCC_CSS_IRQHandler + .text.memset 0x00000c30 0x12 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000c30 memset .text.ssd1306_setbuf.constprop.0 - 0x00000a00 0xc /tmp/ccVfyVtG.ltrans0.ltrans.o - .text.memcpy 0x00000a0c 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x00000a0c memcpy + 0x00000c42 0xc /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.memcpy 0x00000c4e 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000c4e memcpy .text.ssd1306_refresh - 0x00000a28 0x5c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000c6a 0x5c /tmp/ccYbPpFS.ltrans0.ltrans.o .text.SystemInit - 0x00000a84 0x44 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x00000a84 SystemInit + 0x00000cc6 0x44 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000cc6 SystemInit .text.startup.main - 0x00000ac8 0xeb4 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x00000ac8 main + 0x00000d0a 0xd90 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x00000d0a main + .text.EXTI7_0_IRQHandler + 0x00001a9a 0x24 /tmp/ccYbPpFS.ltrans0.ltrans.o + .text.TIM2_IRQHandler + 0x00001abe 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o *(.rodata) *(.rodata*) - *fill* 0x0000197c 0x0 + *fill* 0x00001ade 0x2 .rodata.main.str1.4 - 0x0000197c 0x1f8 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001ae0 0x200 /tmp/ccYbPpFS.ltrans0.ltrans.o 0x120 (size before relaxing) - .rodata.main 0x00001b74 0x30 /tmp/ccVfyVtG.ltrans0.ltrans.o + .rodata.main 0x00001ce0 0x30 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.tmux_sleep - 0x00001ba4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001d10 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.tmux_sad - 0x00001c24 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001d90 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.tmux_happy - 0x00001ca4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001e10 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.tmux_idle - 0x00001d24 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001e90 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_dead - 0x00001da4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001f10 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_sleep - 0x00001e24 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00001f90 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_eat - 0x00001ea4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002010 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_sad - 0x00001f24 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002090 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_happy - 0x00001fa4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002110 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_blink - 0x00002024 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002190 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.pana_idle - 0x000020a4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002210 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.shell_sleep - 0x00002124 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002290 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.shell_sad - 0x000021a4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002310 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.shell_happy - 0x00002224 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002390 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.shell_idle - 0x000022a4 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002410 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_settings - 0x00002324 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002490 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_stats - 0x00002344 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000024b0 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_heal - 0x00002364 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000024d0 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_clean - 0x00002384 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000024f0 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_sleep - 0x000023a4 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002510 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_play - 0x000023c4 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002530 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.icon_feed - 0x000023e4 0x20 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002550 0x20 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.ssd1306_init_array - 0x00002404 0x1a /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002570 0x1a /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.str1.4 - 0x0000241e 0xd4 /tmp/ccVfyVtG.ltrans0.ltrans.o - *fill* 0x0000241e 0x2 + 0x0000258a 0xdc /tmp/ccYbPpFS.ltrans0.ltrans.o + *fill* 0x0000258a 0x2 .rodata.boot.0 - 0x00002420 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000258c 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.species_names - 0x00002434 0xc /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000025a0 0xc /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.spr_glitch - 0x00002440 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000025ac 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.spr_claude - 0x000024c0 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000262c 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.species_frames - 0x00002540 0x54 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000026ac 0x54 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.menu_icons - 0x00002594 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002700 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.form_names - 0x000025b0 0x14 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000271c 0x14 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.menu_labels - 0x000025c4 0x1c /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002730 0x1c /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.screen_timeout_names - 0x000025e0 0x10 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x0000274c 0x18 /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.spr_grave - 0x000025f0 0x80 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002764 0x80 /tmp/ccYbPpFS.ltrans0.ltrans.o + .rodata.screen_timeout_opts + 0x000027e4 0xc /tmp/ccYbPpFS.ltrans0.ltrans.o .rodata.fontdata - 0x00002670 0x800 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x000027f0 0x800 /tmp/ccYbPpFS.ltrans0.ltrans.o *(.gnu.linkonce.t.*) - 0x00002e70 . = ALIGN (0x4) + 0x00002ff0 . = ALIGN (0x4) -.rela.dyn 0x00002e70 0x0 +.rela.dyn 0x00002ff0 0x0 .rela.text.handle_reset - 0x00002e70 0x0 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00002ff0 0x0 /tmp/ccYbPpFS.ltrans0.ltrans.o -.fini 0x00002e70 0x0 +.fini 0x00002ff0 0x0 *(SORT_NONE(.fini)) - 0x00002e70 . = ALIGN (0x4) + 0x00002ff0 . = ALIGN (0x4) [!provide] PROVIDE (_etext = .) [!provide] PROVIDE (_eitcm = .) -.preinit_array 0x00002e70 0x0 +.preinit_array 0x00002ff0 0x0 [!provide] PROVIDE (__preinit_array_start = .) *(.preinit_array) [!provide] PROVIDE (__preinit_array_end = .) -.init_array 0x00002e70 0x0 +.init_array 0x00002ff0 0x0 [!provide] PROVIDE (__init_array_start = .) *(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)) *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) [!provide] PROVIDE (__init_array_end = .) -.fini_array 0x00002e70 0x0 +.fini_array 0x00002ff0 0x0 [!provide] PROVIDE (__fini_array_start = .) *(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)) *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) @@ -474,15 +480,15 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a *(SORT_BY_NAME(.dtors.*)) *(.dtors) -.dalign 0x20000000 0x0 load address 0x00002e70 +.dalign 0x20000000 0x0 load address 0x00002ff0 0x20000000 . = ALIGN (0x4) 0x20000000 PROVIDE (_data_vma = .) -.dlalign 0x00002e70 0x0 - 0x00002e70 . = ALIGN (0x4) - 0x00002e70 PROVIDE (_data_lma = .) +.dlalign 0x00002ff0 0x0 + 0x00002ff0 . = ALIGN (0x4) + 0x00002ff0 PROVIDE (_data_lma = .) -.data 0x20000000 0x2c load address 0x00002e70 +.data 0x20000000 0x24 load address 0x00002ff0 0x20000000 . = ALIGN (0x4) 0x200003fc __global_pointer$ = (. + 0x3fc) *(.gnu.linkonce.r.*) @@ -491,11 +497,11 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a 0x20000000 . = ALIGN (0x8) *(.sdata .sdata.*) .sdata.timeout_idx - 0x20000000 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000000 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o .sdata.disp_on - 0x20000001 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000001 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o .sdata.sound_on - 0x20000002 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000002 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o *(.sdata2*) *(.gnu.linkonce.s.*) 0x20000008 . = ALIGN (0x8) @@ -506,61 +512,62 @@ LOAD ../ch32v003fun/ch32fun//../misc/libgcc.a *(.srodata.cst2) *(.srodata .srodata.*) .srodata.eye_rx - 0x20000008 0x3 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000008 0x3 /tmp/ccYbPpFS.ltrans0.ltrans.o *fill* 0x2000000b 0x1 .srodata.eye_lx - 0x2000000c 0x3 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x2000000c 0x3 /tmp/ccYbPpFS.ltrans0.ltrans.o *fill* 0x2000000f 0x1 .srodata.eye_cy - 0x20000010 0x3 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000010 0x3 /tmp/ccYbPpFS.ltrans0.ltrans.o *fill* 0x20000013 0x1 .srodata.spr_poop - 0x20000014 0x8 /tmp/ccVfyVtG.ltrans0.ltrans.o - .srodata.screen_timeout_opts - 0x2000001c 0x8 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000014 0x8 /tmp/ccYbPpFS.ltrans0.ltrans.o .srodata.level_xp - 0x20000024 0x8 /tmp/ccVfyVtG.ltrans0.ltrans.o - 0x2000002c . = ALIGN (0x4) - 0x2000002c PROVIDE (_edata = .) + 0x2000001c 0x8 /tmp/ccYbPpFS.ltrans0.ltrans.o + 0x20000024 . = ALIGN (0x4) + 0x20000024 PROVIDE (_edata = .) -.bss 0x2000002c 0x438 load address 0x00002e9c - 0x2000002c . = ALIGN (0x4) - 0x2000002c PROVIDE (_sbss = .) +.bss 0x20000024 0x434 load address 0x00003014 + 0x20000024 . = ALIGN (0x4) + 0x20000024 PROVIDE (_sbss = .) *(.sbss*) .sbss.anim_exp - 0x2000002c 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o - *fill* 0x2000002d 0x3 - .sbss.frame 0x20000030 0x4 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000024 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + *fill* 0x20000025 0x1 .sbss.tick_acc - 0x20000034 0x2 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000026 0x2 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.anim_timer - 0x20000036 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o - .sbss.set_sel 0x20000037 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o - .sbss.cursor 0x20000038 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000028 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + .sbss.set_sel 0x20000029 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + .sbss.cursor 0x2000002a 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.sel_species - 0x20000039 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o - *fill* 0x2000003a 0x2 + 0x2000002b 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.idle_frames - 0x2000003c 0x4 /tmp/ccVfyVtG.ltrans0.ltrans.o - .sbss.screen 0x20000040 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o - *fill* 0x20000041 0x3 + 0x2000002c 0x4 /tmp/ccYbPpFS.ltrans0.ltrans.o + .sbss.tick_wake + 0x20000030 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + .sbss.exti_wake + 0x20000031 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + .sbss.screen 0x20000032 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o + *fill* 0x20000033 0x1 + .sbss.frame 0x20000034 0x4 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.warn_flag - 0x20000044 0x4 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000038 0x4 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.crit_flag - 0x20000048 0x4 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x2000003c 0x4 /tmp/ccYbPpFS.ltrans0.ltrans.o .sbss.evo_anim - 0x2000004c 0x1 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000040 0x1 /tmp/ccYbPpFS.ltrans0.ltrans.o *(.gnu.linkonce.sb.*) *(.bss*) - *fill* 0x2000004d 0x3 - .bss.pet 0x20000050 0x12 /tmp/ccVfyVtG.ltrans0.ltrans.o - *fill* 0x20000062 0x2 + *fill* 0x20000041 0x3 + .bss.pet 0x20000044 0x12 /tmp/ccYbPpFS.ltrans0.ltrans.o + *fill* 0x20000056 0x2 .bss.ssd1306_buffer - 0x20000064 0x400 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x20000058 0x400 /tmp/ccYbPpFS.ltrans0.ltrans.o *(.gnu.linkonce.b.*) *(COMMON*) - 0x20000464 . = ALIGN (0x4) - 0x20000464 PROVIDE (_ebss = .) + 0x20000458 . = ALIGN (0x4) + 0x20000458 PROVIDE (_ebss = .) [!provide] PROVIDE (_end = _ebss) [!provide] PROVIDE (end = .) 0x20000800 PROVIDE (_eusrstack = (ORIGIN (RAM) + LENGTH (RAM))) @@ -576,64 +583,64 @@ OUTPUT(tama.elf elf32-littleriscv) .riscv.attributes 0x00000000 0x25 .riscv.attributes - 0x00000000 0x25 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x25 /tmp/ccYbPpFS.ltrans0.ltrans.o .riscv.attributes 0x00000025 0x1f ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) -.debug_info 0x00000000 0x56db - .debug_info 0x00000000 0x3076 /tmp/ccVfyVtG.ltrans0.ltrans.o - .debug_info 0x00003076 0xeee /tmp/ccZG4jMj.debug.temp.o - 0x00003076 ch32fun.c.c0bc4b2f - .debug_info 0x00003f64 0x171a /tmp/ccYBrTfR.debug.temp.o - 0x00003f64 tama.c.96f78ea9 - .debug_info 0x0000567e 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) +.debug_info 0x00000000 0x5ddb + .debug_info 0x00000000 0x314f /tmp/ccYbPpFS.ltrans0.ltrans.o + .debug_info 0x0000314f 0xeee /tmp/cc5ko34Y.debug.temp.o + 0x0000314f ch32fun.c.c0bc4b2f + .debug_info 0x0000403d 0x1d41 /tmp/ccymsL4U.debug.temp.o + 0x0000403d tama.c.7f472170 + .debug_info 0x00005d7e 0x5d ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) -.debug_abbrev 0x00000000 0x78b - .debug_abbrev 0x00000000 0x206 /tmp/ccVfyVtG.ltrans0.ltrans.o - .debug_abbrev 0x00000206 0x24d /tmp/ccZG4jMj.debug.temp.o - .debug_abbrev 0x00000453 0x310 /tmp/ccYBrTfR.debug.temp.o - .debug_abbrev 0x00000763 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) +.debug_abbrev 0x00000000 0x7cd + .debug_abbrev 0x00000000 0x215 /tmp/ccYbPpFS.ltrans0.ltrans.o + .debug_abbrev 0x00000215 0x24d /tmp/cc5ko34Y.debug.temp.o + .debug_abbrev 0x00000462 0x343 /tmp/ccymsL4U.debug.temp.o + .debug_abbrev 0x000007a5 0x28 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_loclists - 0x00000000 0x25e6 + 0x00000000 0x2661 .debug_loclists - 0x00000000 0x25e6 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x2661 /tmp/ccYbPpFS.ltrans0.ltrans.o -.debug_aranges 0x00000000 0x200 +.debug_aranges 0x00000000 0x218 .debug_aranges - 0x00000000 0x1e0 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x1f8 /tmp/ccYbPpFS.ltrans0.ltrans.o .debug_aranges - 0x000001e0 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) + 0x000001f8 0x20 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_rnglists - 0x00000000 0x550 + 0x00000000 0x593 .debug_rnglists - 0x00000000 0x550 /tmp/ccVfyVtG.ltrans0.ltrans.o + 0x00000000 0x593 /tmp/ccYbPpFS.ltrans0.ltrans.o -.debug_line 0x00000000 0x562b - .debug_line 0x00000000 0x53eb /tmp/ccVfyVtG.ltrans0.ltrans.o - .debug_line 0x000053eb 0x76 /tmp/ccZG4jMj.debug.temp.o - .debug_line 0x00005461 0x77 /tmp/ccYBrTfR.debug.temp.o - .debug_line 0x000054d8 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) +.debug_line 0x00000000 0x5a07 + .debug_line 0x00000000 0x57c7 /tmp/ccYbPpFS.ltrans0.ltrans.o + .debug_line 0x000057c7 0x76 /tmp/cc5ko34Y.debug.temp.o + .debug_line 0x0000583d 0x77 /tmp/ccymsL4U.debug.temp.o + .debug_line 0x000058b4 0x153 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) -.debug_str 0x00000000 0x10c7 - .debug_str 0x00000000 0x10c7 /tmp/ccVfyVtG.ltrans0.ltrans.o +.debug_str 0x00000000 0x1401 + .debug_str 0x00000000 0x1401 /tmp/ccYbPpFS.ltrans0.ltrans.o 0x1c2 (size before relaxing) - .debug_str 0x000010c7 0x60f /tmp/ccZG4jMj.debug.temp.o - .debug_str 0x000010c7 0xc07 /tmp/ccYBrTfR.debug.temp.o - .debug_str 0x000010c7 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) + .debug_str 0x00001401 0x60f /tmp/cc5ko34Y.debug.temp.o + .debug_str 0x00001401 0xf6c /tmp/ccymsL4U.debug.temp.o + .debug_str 0x00001401 0xd9 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) .debug_line_str 0x00000000 0x33f .debug_line_str - 0x00000000 0x33f /tmp/ccVfyVtG.ltrans0.ltrans.o - 0xd9 (size before relaxing) + 0x00000000 0x33f /tmp/ccYbPpFS.ltrans0.ltrans.o + 0xfa (size before relaxing) .debug_line_str - 0x0000033f 0x246 /tmp/ccZG4jMj.debug.temp.o + 0x0000033f 0x246 /tmp/cc5ko34Y.debug.temp.o .debug_line_str - 0x0000033f 0x1dd /tmp/ccYBrTfR.debug.temp.o + 0x0000033f 0x1dd /tmp/ccymsL4U.debug.temp.o .debug_line_str 0x0000033f 0x92 ../ch32v003fun/ch32fun//../misc/libgcc.a(div.o) -.debug_frame 0x00000000 0x600 - .debug_frame 0x00000000 0x600 /tmp/ccVfyVtG.ltrans0.ltrans.o +.debug_frame 0x00000000 0x66c + .debug_frame 0x00000000 0x66c /tmp/ccYbPpFS.ltrans0.ltrans.o