Author Topic: Emulators with integrated debugging question  (Read 3092 times)

0 Members and 1 Guest are viewing this topic.

Offline AugustoRuiz

  • CPC664
  • ***
  • Posts: 121
  • Country: es
  • Liked: 156
  • Likes Given: 49
Emulators with integrated debugging question
« on: 15:19, 10 August 15 »
Hi all,

One question:

Is there any cpc emulator that includes a debugger that allows the user to specify a symbol table? I'm thinking about using for example the output from sdcc or pasmo and have that info to ease debugging. If so: how is it done?

Thanks!

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #1 on: 15:34, 10 August 15 »
Yes my wip of arnold has an integrated debugger and loads both sdcc, sjasm and pasmo symbols.

For pasmo:

pasmo file.asm file.bin file.lst

for sdcc:

Enable noi symbols.

In the emulator:

Go to the debugger.
Right click and choose "label manager".
Right click and choose which label type you want to import.
You will then see a list on the right side of the dialog. You can double click to go to the label.

Back in the debugger window it will show the labels.

The emulator code reads and parses the files, it extracts the addresses and labels. In the debugger when it displays an address it looks up the symbol and uses that instead.



My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline PhilZeVibe

  • 464 Plus
  • *****
  • Posts: 469
  • Country: fr
    • CPCBox - CPC emulator in JavaScript
  • Liked: 163
  • Likes Given: 187
Re: Emulators with integrated debugging question
« Reply #2 on: 18:58, 10 August 15 »
Ha, that mythical wip of Arnold!
After all those years of hearing about it, it still never gets old. :laugh:

It sounds almost as real as my alleged CPCBox.next fantasy ;)
Atwood's law (2007): "Any application that can be written in JavaScript, will eventually be written in JavaScript."

Offline gerald

  • Supporter
  • 6128 Plus
  • *
  • Posts: 1.446
  • Liked: 1009
  • Likes Given: 252
Re: Emulators with integrated debugging question
« Reply #3 on: 19:18, 10 August 15 »
Ha, that mythical wip of Arnold!
After all those years of hearing about it, it still never gets old. :laugh:

It sounds almost as real as my alleged CPCBox.next fantasy ;)
At least it is more real than chase HQ 2 cartridge, I have it at home  :P

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #4 on: 19:34, 10 August 15 »
Ha, that mythical wip of Arnold!
After all those years of hearing about it, it still never gets old. :laugh:

It sounds almost as real as my alleged CPCBox.next fantasy ;)
LOL

I started the wip in 2010! Yes, time has gone far too quickly.

I started working on it without source control and that was a bad move. I made sweeping changes to the original arnold code making it more flexible and powerful and modular. I broke many things and it has taken some time to get back to the features of the original arnold.

My advice, use source control. I do now and there is a private repository for the code. Why private? Because it runs on a friends pi, sitting in his house and he turns it off when he goes on holiday!

It runs on mac, linux and windows. It is written in wxwidgets and sdl.

Why don't I release it now? Because some things are broken which I need to fix up, but then I go off on a tangent and create another branch and implement something else.

If I released it in it's current state, well, some bits are broken (tape). Some things are not as the user expects.

I'll send you a pm so you can be a believer.
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline MiguelSky

  • 464 Plus
  • *****
  • Posts: 365
  • Country: es
    • CPCGamesCD
  • Liked: 200
  • Likes Given: 362
Re: Emulators with integrated debugging question
« Reply #5 on: 19:40, 10 August 15 »
Release a stable version, arnoldemu !!

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #6 on: 19:41, 10 August 15 »
Ha, that mythical wip of Arnold!
After all those years of hearing about it, it still never gets old. :laugh:

It sounds almost as real as my alleged CPCBox.next fantasy ;)
You have a PM!

(Enjoy the multiplay joystick emulation!)
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline remax

  • 6128 Plus
  • ******
  • Posts: 1.096
  • Country: fr
  • Liked: 400
  • Likes Given: 436
Re: Emulators with integrated debugging question
« Reply #7 on: 00:15, 11 August 15 »

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #8 on: 13:15, 16 August 15 »
Any chance that other emulators can import noi symbols or some sort of way to debug SDCC created software with symbols? @Executioner, @Devilmarkus?

That would be an awesome feature for developers :).

Offline Devilmarkus

  • Vivid source of indefiniteness
  • 6128 Plus
  • ******
  • Posts: 4.035
  • Country: de
  • WebCPC / JavaCPC developer
    • index.php?action=treasury
    • CPC-Live website
  • Liked: 1014
  • Likes Given: 926
Re: Emulators with integrated debugging question
« Reply #9 on: 15:59, 16 August 15 »
Any chance that other emulators can import noi symbols or some sort of way to debug SDCC created software with symbols? @Executioner, @Devilmarkus?

That would be an awesome feature for developers :) .

Depends on the symbols I think...
Could you post an example?
When you put your ear on a hot stove, you can smell how stupid you are ...

Amstrad CPC games in your webbrowser

JavaCPC Desktop Full Release

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #10 on: 17:07, 16 August 15 »
This file is pclimber.noi, the symbol file generated by SDCC on compiling Platform Climber game:
Code: [Select]
DEF .__.ABS. 0x0
DEF l__CABS 0x0
DEF l__DABS 0x0
DEF l__GSFINAL 0x0
DEF l__GSINIT 0x0
DEF l__HOME 0x0
DEF l__INITIALIZED 0x0
DEF l__INITIALIZER 0x0
DEF s__CABS 0x0
DEF s__DABS 0x0
DEF l__DATA 0x1FE
DEF l__CODE 0x31F6
DEF s__CODE 0x4000
DEF s__DATA 0x71F6
DEF s__GSFINAL 0x73F4
DEF s__GSINIT 0x73F4
DEF s__HOME 0x73F4
DEF s__INITIALIZED 0x73F4
DEF s__INITIALIZER 0x73F4
DEF _initializeGameScreen 0x4000
DEF _updateUser 0x40B2
DEF _wait4Key 0x4166
DEF _game 0x4183
DEF _showGameEnd 0x41D0
DEF _initializeCPC 0x42A4
DEF _main 0x42D4
DEF _drawFrame 0x42F5
DEF _G_frameUpLeftCorner 0x4434
DEF _G_frameUpRightCorner 0x4454
DEF _G_frameDownRightCorner 0x4474
DEF _G_frameDownLeftCorner 0x4494
DEF _G_frameLeft 0x44B4
DEF _G_frameRight 0x44D4
DEF _G_frameUp 0x44F4
DEF _G_frameDown 0x4514
DEF _G_frameUpCenter 0x4534
DEF _G_frameDownCenter 0x4564
DEF _G_frameUpCenter2 0x4594
DEF _G_frameDownCenter2 0x45A4
DEF _G_palette 0x45B4
DEF _G_EMRright 0x45C4
DEF _G_EMRright2 0x4604
DEF _G_EMRright3 0x4624
DEF _G_EMRleft 0x4664
DEF _G_EMRleft2 0x46A4
DEF _G_EMRleft3 0x46C4
DEF _G_EMRjumpright1 0x4704
DEF _G_EMRjumpright2 0x4724
DEF _G_EMRjumpright3 0x4744
DEF _G_EMRjumpright4 0x4764
DEF _G_EMRjumpleft1 0x4784
DEF _G_EMRjumpleft2 0x47A4
DEF _G_EMRjumpleft3 0x47C4
DEF _G_EMRjumpleft4 0x47E4
DEF _G_EMRhitright 0x4804
DEF _G_EMRhitleft 0x4844
DEF _updateAnimation 0x4884
DEF _g_allAnimFrames 0x4991
DEF _g_walkLeft 0x49E1
DEF _g_walkRight 0x49EB
DEF _g_jumpLeft 0x49F5
DEF _g_jumpRight 0x4A01
DEF _g_hitLeft 0x4A0D
DEF _g_hitRight 0x4A11
DEF _g_anim 0x4A15
DEF _initializeEntities 0x4A25
DEF _G_gy 0x4B1C
DEF _G_gx 0x4B1E
DEF _G_maxYVel 0x4B20
DEF _G_maxXVel 0x4B22
DEF _G_minVel 0x4B24
DEF _G_jumpVel 0x4B26
DEF _G_maxScrollVel 0x4B28
DEF _G_airFric 0x4B2A
DEF _G_floorFric 0x4B2B
DEF _G_minX 0x4B2C
DEF _G_maxX 0x4B2D
DEF _G_minY 0x4B2E
DEF _G_maxY 0x4B2F
DEF _g_SCR_WIDTH 0x4B30
DEF _g_SCR_HEIGHT 0x4B31
DEF _g_SCR_VMEM 0x4B32
DEF _g_Character 0x4B34
DEF _getScore 0x4B55
DEF _getCharacter 0x4B59
DEF _performAction 0x4B5D
DEF _cropVelocity 0x4CF7
DEF _moveBlock 0x4D79
DEF _scrollWorld 0x4F5C
DEF _updateCharacterPhysics 0x5038
DEF _getNearestBlockID 0x5275
DEF _applyCharacterBlockCollisions 0x5304
DEF _updateCharacter 0x566B
DEF _checkCollisionEntBlock 0x598C
DEF _isOverFloor 0x5B1A
DEF _setEntityLocation 0x5BA5
DEF _drawAnimEntity 0x5C39
DEF _drawBlockEntity 0x5CE2
DEF _drawAll 0x5E4E
DEF _newSolidBlock 0x5E88
DEF _destroyBlock 0x5F6F
DEF _randomCreateNewBlock 0x5FE1
DEF _getRandomUniform 0x60E0
DEF _g_randUnif 0x60FB
DEF _cpct_setPalette 0x61FB
DEF cpct_setPalette_asm 0x6204
DEF _cpct_isKeyPressed 0x621F
DEF cpct_isKeyPressed_asm 0x621F
DEF _cpct_scanKeyboard_f 0x622B
DEF cpct_scanKeyboard_f_asm 0x622B
DEF _cpct_setPALColour 0x6295
DEF cpct_setPALColour_asm 0x629C
DEF _cpct_drawStringM0 0x62A5
DEF cpct_drawStringM0_asm 0x62AD
DEF _cpct_drawSprite 0x62C9
DEF dc_mode0_ct 0x636E
DEF _cpct_drawCharM0 0x637E
DEF cpct_drawCharM0_asm 0x638B
DEF _cpct_fw2hw 0x640B
DEF _cpct_keyboardStatusBuffer 0x6425
DEF _vsprintf 0x644F
DEF _sprintf 0x6484
DEF cpct_firmware2hw_colour 0x64BB
DEF _cpct_setVideoMode 0x64D6
DEF cpct_setVideoMode_asm 0x64DB
DEF _cpct_waitVSYNC 0x64E8
DEF cpct_waitVSYNC_asm 0x64E8
DEF _cpct_memcpy 0x64F0
DEF _cpct_px2byteM0 0x64F8
DEF _cpct_memset 0x6517
DEF _cpct_mode_rom_status 0x6525
DEF _cpct_firmware_address 0x6526
DEF _cpct_disableFirmware 0x6528
DEF cpct_disableFirmware_asm 0x6528
DEF _cpct_drawSolidBox 0x6539
DEF _cpct_drawTileAligned4x8 0x65F1
DEF _cpct_getScreenPtr 0x660B
DEF __divsint 0x662B
DEF __divschar 0x6634
DEF __div8 0x663B
DEF __div_signexte 0x663F
DEF __div16 0x6643
DEF __get_remainder 0x6669
DEF __print_format 0x6784
DEF __divuint 0x71A5
DEF __divuchar 0x71AD
DEF __divu8 0x71B4
DEF __divu16 0x71B7
DEF ___sdcc_call_hl 0x71E6
DEF _strlen 0x71E7
DEF _G_scrollVel 0x71F6
DEF _G_platfColour 0x71F8
DEF _G_score 0x71F9
DEF _g_blocks 0x71FB
DEF _g_lastBlock 0x73EB
DEF _g_colMinBlock 0x73EC
DEF _g_colMaxBlock 0x73ED
DEF _g_movingBlocks 0x73EE
DEF _g_nextRand 0x73F3
LOAD obj/pclimber.ihx
Seems pretty straight forward to parse. What do you think, @Devilmarkus?

Installing CPCtelera you have one similar example from each project on the examples/ folder. I can give you as many as you wanted, but I think one is enough, as format is quite simple.

Offline Devilmarkus

  • Vivid source of indefiniteness
  • 6128 Plus
  • ******
  • Posts: 4.035
  • Country: de
  • WebCPC / JavaCPC developer
    • index.php?action=treasury
    • CPC-Live website
  • Liked: 1014
  • Likes Given: 926
Re: Emulators with integrated debugging question
« Reply #11 on: 18:39, 16 August 15 »
So, DEF is the same than EQU?
When you put your ear on a hot stove, you can smell how stupid you are ...

Amstrad CPC games in your webbrowser

JavaCPC Desktop Full Release

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #12 on: 19:04, 16 August 15 »
Well, sort of. This is not assembly, but just a table of global symbols along with their memory address. I understand that sdcc outputs this table when producing the ihx binary file to be used by debuggers. It includes global symbols only (as local symbols may be repeated).

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #13 on: 19:06, 16 August 15 »
According to the SDCC source it's possible to output additional info into the noi file by using special comments:

;!FILE bleh.h

but I never got it to work.

Also, I can output a cdb file which looks to be better than a noi file because it encodes data in the labels which define the function name, number of parameters, parameter types, but nowhere seems to describe this file.

Ideally I would have a mixture of source code and disassembly; this would be perfect for debugging. Having symbols alone makes it a little easier, but because the generated code is not "friendly" it's still hard work to debug :(

I'm trying to find a nice way to debug compiled C code in an emulator.

I think having labels in assembly code is fine because the coder is often familiar with the code they are debugging OR the code is more simple to understand...
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #14 on: 19:07, 16 August 15 »
So, DEF is the same than EQU?
yes, and 0x is the prefix for a hex number.
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline Devilmarkus

  • Vivid source of indefiniteness
  • 6128 Plus
  • ******
  • Posts: 4.035
  • Country: de
  • WebCPC / JavaCPC developer
    • index.php?action=treasury
    • CPC-Live website
  • Liked: 1014
  • Likes Given: 926
Re: Emulators with integrated debugging question
« Reply #15 on: 19:08, 16 August 15 »
Well, sort of. This is not assembly, but just a table of global symbols along with their memory address. I understand that sdcc outputs this table when producing the ihx binary file to be used by debuggers. It includes global symbols only (as local symbols may be repeated).

So, what do you want to parse now? If this is not assembly?
Didn`t get you, sorry...
Or do you mean hex values beginning with 0x instead of $ or &?
When you put your ear on a hot stove, you can smell how stupid you are ...

Amstrad CPC games in your webbrowser

JavaCPC Desktop Full Release

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #16 on: 19:20, 16 August 15 »
There is also another more complete (and complex) option: the --debug modifier that SDCC provides. Compiling with --debug option a CDB file is generated. This file includes much more information about symbols. For Platform Climber, this is the output:
Code: [Select]
M:game
F:G$initializeGameScreen$0$0({2}DF,SV:S),C,0,6,0,0,0
S:Lgame.initializeGameScreen$hiscore$1$69({2}SI:U),B,1,4
S:Lgame.initializeGameScreen$pscr$1$70({2}DG,SC:U),R,0,0,[l,h]
S:Lgame.initializeGameScreen$c$1$70({1}SC:U),R,0,0,[b]
S:Lgame.initializeGameScreen$str$1$70({6}DA6d,SC:U),B,1,-6
F:G$updateUser$0$0({2}DF,SV:S),C,0,0,0,0,0
S:Lgame.updateUser$user$1$71({2}DG,STCharacter:S),B,1,4
F:G$wait4Key$0$0({2}DF,SV:S),C,0,0,0,0,0
S:Lgame.wait4Key$key$1$74({2}SI:S),B,1,4
F:G$game$0$0({2}DF,SI:U),C,0,0,0,0,0
S:Lgame.game$hiscore$1$76({2}SI:U),B,1,4
S:Lgame.game$alive$1$77({1}SC:U),B,1,-1
S:Lgame.game$c$1$77({2}DG,STCharacter:S),R,0,0,[l,h]
S:Lgame.game$sloc0$1$0({1}SC:U),B,1,-1
F:G$showGameEnd$0$0({2}DF,SV:S),C,0,6,0,0,0
S:Lgame.showGameEnd$score$1$79({2}SI:U),B,1,4
S:Lgame.showGameEnd$pscr$1$80({2}DG,SC:U),R,0,0,[c,b]
S:Lgame.showGameEnd$str$1$80({6}DA6d,SC:U),B,1,-6
T:Fgame$__00000000[({0}S:S$sprite$0$0({2}DG,SC:U),Z,0,0)({2}S:S$width$0$0({1}SC:U),Z,0,0)({3}S:S$height$0$0({1}SC:U),Z,0,0)({4}S:S$time$0$0({1}SC:U),Z,0,0)]
T:Fgame$__00000001[({0}S:S$frames$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({2}S:S$frame_id$0$0({1}SC:U),Z,0,0)({3}S:S$time$0$0({1}SC:U),Z,0,0)({4}S:S$status$0$0({1}SC:U),Z,0,0)]
T:Fgame$__00000002[({0}S:S$x$0$0({2}SI:U),Z,0,0)({2}S:S$y$0$0({2}SI:U),Z,0,0)({4}S:S$vx$0$0({2}SI:S),Z,0,0)({6}S:S$vy$0$0({2}SI:S),Z,0,0)({8}S:S$bounce$0$0({2}SI:U),Z,0,0)({10}S:S$floor$0$0({2}DG,STEntity:S),Z,0,0)]
T:Fgame$__00000003[({0}S:S$w$0$0({1}SC:U),Z,0,0)({1}S:S$h$0$0({1}SC:U),Z,0,0)({2}S:S$colour$0$0({1}SC:U),Z,0,0)]
T:Fgame$__00000004[({0}S:S$anim$0$0({5}ST__00000001:S),Z,0,0)({0}S:S$block$0$0({3}ST__00000003:S),Z,0,0)]
T:Fgame$__00000005[({0}S:S$x$0$0({1}SC:U),Z,0,0)({1}S:S$y$0$0({1}SC:U),Z,0,0)({2}S:S$w$0$0({1}SC:U),Z,0,0)({3}S:S$h$0$0({1}SC:U),Z,0,0)]
T:Fgame$Entity[({0}S:S$graph$0$0({5}ST__00000004:S),Z,0,0)({5}S:S$pscreen$0$0({2}DG,SC:U),Z,0,0)({7}S:S$npscreen$0$0({2}DG,SC:U),Z,0,0)({9}S:S$x$0$0({1}SC:U),Z,0,0)({10}S:S$y$0$0({1}SC:U),Z,0,0)({11}S:S$nx$0$0({1}SC:U),Z,0,0)({12}S:S$ny$0$0({1}SC:U),Z,0,0)({13}S:S$pw$0$0({1}SC:U),Z,0,0)({14}S:S$ph$0$0({1}SC:U),Z,0,0)({15}S:S$phys$0$0({12}ST__00000002:S),Z,0,0)({27}S:S$draw$0$0({1}SC:U),Z,0,0)({28}S:S$nAnim$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({30}S:S$nStatus$0$0({1}SC:U),Z,0,0)]
T:Fgame$Character[({0}S:S$entity$0$0({31}STEntity:S),Z,0,0)({31}S:S$status$0$0({1}SC:U),Z,0,0)({32}S:S$side$0$0({1}SC:U),Z,0,0)]
S:G$cpct_keyboardStatusBuffer$0$0({10}DA10d,SC:U),E,0,0
S:G$cpct_akp_digidrumStatus$0$0({1}SC:U),E,0,0
S:G$cpct_akp_songLoopTimes$0$0({1}SC:U),E,0,0
S:G$_print_format$0$0({2}DF,SI:S),C,0,0
S:G$printf_small$0$0({2}DF,SV:S),C,0,0
S:G$printf$0$0({2}DF,SI:S),C,0,0
S:G$vprintf$0$0({2}DF,SI:S),C,0,0
S:G$sprintf$0$0({2}DF,SI:S),C,0,0
S:G$vsprintf$0$0({2}DF,SI:S),C,0,0
S:G$puts$0$0({2}DF,SI:S),C,0,0
S:G$gets$0$0({2}DF,DG,SC:S),C,0,0
S:G$getchar$0$0({2}DF,SC:S),C,0,0
S:G$putchar$0$0({2}DF,SV:S),C,0,0
S:G$cpct_reenableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f64$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memcpy$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setStackLocation$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_isKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_getBit$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get2Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get4Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setBit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set2Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set4Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_px2byteM0$0$0({2}DF,SC:U),C,0,0
S:G$cpct_px2byteM1$0$0({2}DF,SC:U),C,0,0
S:G$cpct_drawTileAligned2x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSprite$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMasked$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSolidBox$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMaskedAlignedTable$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMode$0$0({2}DF,SV:S),C,0,0
S:G$cpct_waitVSYNC$0$0({2}DF,SV:S),C,0,0
S:G$cpct_count2VSYNC$0$0({2}DF,SI:U),C,0,0
S:G$cpct_fw2hw$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setPalette$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getHWColour$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setPALColour$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryPage$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryOffset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getScreenPtr$0$0({2}DF,DG,SC:U),C,0,0
S:G$cpct_akp_musicInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_musicPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_stop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStopAll$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXGetInstrument$0$0({2}DF,SI:U),C,0,0
S:G$cpct_akp_setFadeVolume$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getRandomUniform_u8_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setRandomSeedUniform_u8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTilemap2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileBox2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileRow2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_setTileset2x4$0$0({2}DF,SV:S),C,0,0
S:G$updateAnimation$0$0({2}DF,SC:S),C,0,0
S:G$initializeEntities$0$0({2}DF,SV:S),C,0,0
S:G$performAction$0$0({2}DF,SV:S),C,0,0
S:G$updateCharacter$0$0({2}DF,SC:U),C,0,0
S:G$scrollWorld$0$0({2}DF,SV:S),C,0,0
S:G$getScore$0$0({2}DF,SI:U),C,0,0
S:G$drawAll$0$0({2}DF,SV:S),C,0,0
S:G$getCharacter$0$0({2}DF,DG,STCharacter:S),C,0,0
S:G$drawFrame$0$0({2}DF,SV:S),C,0,0
S:G$getRandomUniform$0$0({2}DF,SC:U),C,0,0
S:G$initializeGameScreen$0$0({2}DF,SV:S),C,0,6
S:G$updateUser$0$0({2}DF,SV:S),C,0,0
S:G$wait4Key$0$0({2}DF,SV:S),C,0,0
S:G$game$0$0({2}DF,SI:U),C,0,0
S:G$showGameEnd$0$0({2}DF,SV:S),C,0,6
M:main
F:G$initializeCPC$0$0({2}DF,SV:S),C,0,0,0,0,0
F:G$main$0$0({2}DF,SV:S),C,0,0,0,0,0
S:Lmain.main$score$1$60({2}SI:U),R,0,0,[l,h]
S:Lmain.main$hi$1$60({2}SI:U),R,0,0,[e,d]
T:Fmain$Character[]
S:G$cpct_keyboardStatusBuffer$0$0({10}DA10d,SC:U),E,0,0
S:G$cpct_akp_digidrumStatus$0$0({1}SC:U),E,0,0
S:G$cpct_akp_songLoopTimes$0$0({1}SC:U),E,0,0
S:G$cpct_reenableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f64$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memcpy$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setStackLocation$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_isKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_getBit$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get2Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get4Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setBit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set2Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set4Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_px2byteM0$0$0({2}DF,SC:U),C,0,0
S:G$cpct_px2byteM1$0$0({2}DF,SC:U),C,0,0
S:G$cpct_drawTileAligned2x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSprite$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMasked$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSolidBox$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMaskedAlignedTable$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMode$0$0({2}DF,SV:S),C,0,0
S:G$cpct_waitVSYNC$0$0({2}DF,SV:S),C,0,0
S:G$cpct_count2VSYNC$0$0({2}DF,SI:U),C,0,0
S:G$cpct_fw2hw$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setPalette$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getHWColour$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setPALColour$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryPage$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryOffset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getScreenPtr$0$0({2}DF,DG,SC:U),C,0,0
S:G$cpct_akp_musicInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_musicPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_stop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStopAll$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXGetInstrument$0$0({2}DF,SI:U),C,0,0
S:G$cpct_akp_setFadeVolume$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getRandomUniform_u8_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setRandomSeedUniform_u8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTilemap2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileBox2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileRow2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_setTileset2x4$0$0({2}DF,SV:S),C,0,0
S:G$initializeGameScreen$0$0({2}DF,SV:S),C,0,0
S:G$showGameEnd$0$0({2}DF,SV:S),C,0,0
S:G$updateUser$0$0({2}DF,SV:S),C,0,0
S:G$wait4Key$0$0({2}DF,SV:S),C,0,0
S:G$game$0$0({2}DF,SI:U),C,0,0
S:G$initializeCPC$0$0({2}DF,SV:S),C,0,0
S:G$main$0$0({2}DF,SV:S),C,0,0
M:frame
F:G$drawFrame$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lframe.drawFrame$pscr$1$54({2}DG,SC:U),B,1,4
S:Lframe.drawFrame$x$1$54({1}SC:U),B,1,6
S:Lframe.drawFrame$pvmem$1$55({2}DG,SC:U),R,0,0,[]
S:Lframe.drawFrame$i$1$55({1}SC:U),R,0,0,[d]
S:Lframe.drawFrame$sloc0$1$0({2}DG,SV:S),B,1,-2
S:G$cpct_keyboardStatusBuffer$0$0({10}DA10d,SC:U),E,0,0
S:G$cpct_akp_digidrumStatus$0$0({1}SC:U),E,0,0
S:G$cpct_akp_songLoopTimes$0$0({1}SC:U),E,0,0
S:G$cpct_reenableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f64$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memcpy$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setStackLocation$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_isKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_getBit$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get2Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get4Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setBit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set2Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set4Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_px2byteM0$0$0({2}DF,SC:U),C,0,0
S:G$cpct_px2byteM1$0$0({2}DF,SC:U),C,0,0
S:G$cpct_drawTileAligned2x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSprite$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMasked$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSolidBox$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMaskedAlignedTable$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMode$0$0({2}DF,SV:S),C,0,0
S:G$cpct_waitVSYNC$0$0({2}DF,SV:S),C,0,0
S:G$cpct_count2VSYNC$0$0({2}DF,SI:U),C,0,0
S:G$cpct_fw2hw$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setPalette$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getHWColour$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setPALColour$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryPage$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryOffset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getScreenPtr$0$0({2}DF,DG,SC:U),C,0,0
S:G$cpct_akp_musicInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_musicPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_stop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStopAll$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXGetInstrument$0$0({2}DF,SI:U),C,0,0
S:G$cpct_akp_setFadeVolume$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getRandomUniform_u8_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setRandomSeedUniform_u8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTilemap2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileBox2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileRow2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_setTileset2x4$0$0({2}DF,SV:S),C,0,0
M:frametiles
S:G$G_frameUpLeftCorner$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameUpRightCorner$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameDownRightCorner$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameDownLeftCorner$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameLeft$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameRight$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameUp$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameDown$0$0({32}DA32d,SC:U),D,0,0
S:G$G_frameUpCenter$0$0({48}DA48d,SC:U),D,0,0
S:G$G_frameDownCenter$0$0({48}DA48d,SC:U),D,0,0
S:G$G_frameUpCenter2$0$0({16}DA16d,SC:U),D,0,0
S:G$G_frameDownCenter2$0$0({16}DA16d,SC:U),D,0,0
M:sprites
S:G$G_palette$0$0({16}DA16d,SC:U),D,0,0
S:G$G_EMRright$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRright2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRright3$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRleft$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRleft2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRleft3$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRjumpright1$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright3$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright4$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft1$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft3$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft4$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRhitright$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRhitleft$0$0({64}DA64d,SC:U),D,0,0
M:animation
F:G$updateAnimation$0$0({2}DF,SC:S),Z,0,0,0,0,0
S:Lanimation.updateAnimation$anim$1$54({2}DG,ST__00000001:S),B,1,4
S:Lanimation.updateAnimation$newAnim$1$54({2}DG,DG,ST__00000000:S),B,1,6
S:Lanimation.updateAnimation$newStatus$1$54({1}SC:U),B,1,8
S:Lanimation.updateAnimation$newframe$1$55({1}SC:S),R,0,0,[c]
S:Lanimation.updateAnimation$frame$3$58({2}DG,ST__00000000:S),R,0,0,[]
S:Lanimation.updateAnimation$sloc0$1$0({2}DG,SC:U),B,1,-8
S:Lanimation.updateAnimation$sloc1$1$0({2}DG,SC:U),B,1,-2
S:Lanimation.updateAnimation$sloc2$1$0({2}DG,SC:U),B,1,-4
S:Lanimation.updateAnimation$sloc3$1$0({2}DG,DG,ST__00000000:S),B,1,-6
T:Fanimation$__00000000[({0}S:S$sprite$0$0({2}DG,SC:U),Z,0,0)({2}S:S$width$0$0({1}SC:U),Z,0,0)({3}S:S$height$0$0({1}SC:U),Z,0,0)({4}S:S$time$0$0({1}SC:U),Z,0,0)]
T:Fanimation$__00000001[({0}S:S$frames$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({2}S:S$frame_id$0$0({1}SC:U),Z,0,0)({3}S:S$time$0$0({1}SC:U),Z,0,0)({4}S:S$status$0$0({1}SC:U),Z,0,0)]
S:G$cpct_keyboardStatusBuffer$0$0({10}DA10d,SC:U),E,0,0
S:G$cpct_akp_digidrumStatus$0$0({1}SC:U),E,0,0
S:G$cpct_akp_songLoopTimes$0$0({1}SC:U),E,0,0
S:G$cpct_reenableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f64$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memcpy$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setStackLocation$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_isKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_getBit$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get2Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get4Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setBit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set2Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set4Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_px2byteM0$0$0({2}DF,SC:U),C,0,0
S:G$cpct_px2byteM1$0$0({2}DF,SC:U),C,0,0
S:G$cpct_drawTileAligned2x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSprite$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMasked$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSolidBox$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMaskedAlignedTable$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMode$0$0({2}DF,SV:S),C,0,0
S:G$cpct_waitVSYNC$0$0({2}DF,SV:S),C,0,0
S:G$cpct_count2VSYNC$0$0({2}DF,SI:U),C,0,0
S:G$cpct_fw2hw$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setPalette$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getHWColour$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setPALColour$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryPage$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryOffset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getScreenPtr$0$0({2}DF,DG,SC:U),C,0,0
S:G$cpct_akp_musicInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_musicPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_stop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStopAll$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXGetInstrument$0$0({2}DF,SI:U),C,0,0
S:G$cpct_akp_setFadeVolume$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getRandomUniform_u8_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setRandomSeedUniform_u8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTilemap2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileBox2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileRow2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_setTileset2x4$0$0({2}DF,SV:S),C,0,0
M:predefinedAnimations
T:FpredefinedAnimations$__00000000[({0}S:S$sprite$0$0({2}DG,SC:U),Z,0,0)({2}S:S$width$0$0({1}SC:U),Z,0,0)({3}S:S$height$0$0({1}SC:U),Z,0,0)({4}S:S$time$0$0({1}SC:U),Z,0,0)]
T:FpredefinedAnimations$__00000001[({0}S:S$frames$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({2}S:S$frame_id$0$0({1}SC:U),Z,0,0)({3}S:S$time$0$0({1}SC:U),Z,0,0)({4}S:S$status$0$0({1}SC:U),Z,0,0)]
T:FpredefinedAnimations$__00000002[({0}S:S$x$0$0({2}SI:U),Z,0,0)({2}S:S$y$0$0({2}SI:U),Z,0,0)({4}S:S$vx$0$0({2}SI:S),Z,0,0)({6}S:S$vy$0$0({2}SI:S),Z,0,0)({8}S:S$bounce$0$0({2}SI:U),Z,0,0)({10}S:S$floor$0$0({2}DG,STEntity:S),Z,0,0)]
T:FpredefinedAnimations$__00000003[({0}S:S$w$0$0({1}SC:U),Z,0,0)({1}S:S$h$0$0({1}SC:U),Z,0,0)({2}S:S$colour$0$0({1}SC:U),Z,0,0)]
T:FpredefinedAnimations$__00000004[({0}S:S$anim$0$0({5}ST__00000001:S),Z,0,0)({0}S:S$block$0$0({3}ST__00000003:S),Z,0,0)]
T:FpredefinedAnimations$__00000005[({0}S:S$x$0$0({1}SC:U),Z,0,0)({1}S:S$y$0$0({1}SC:U),Z,0,0)({2}S:S$w$0$0({1}SC:U),Z,0,0)({3}S:S$h$0$0({1}SC:U),Z,0,0)]
T:FpredefinedAnimations$Entity[({0}S:S$graph$0$0({5}ST__00000004:S),Z,0,0)({5}S:S$pscreen$0$0({2}DG,SC:U),Z,0,0)({7}S:S$npscreen$0$0({2}DG,SC:U),Z,0,0)({9}S:S$x$0$0({1}SC:U),Z,0,0)({10}S:S$y$0$0({1}SC:U),Z,0,0)({11}S:S$nx$0$0({1}SC:U),Z,0,0)({12}S:S$ny$0$0({1}SC:U),Z,0,0)({13}S:S$pw$0$0({1}SC:U),Z,0,0)({14}S:S$ph$0$0({1}SC:U),Z,0,0)({15}S:S$phys$0$0({12}ST__00000002:S),Z,0,0)({27}S:S$draw$0$0({1}SC:U),Z,0,0)({28}S:S$nAnim$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({30}S:S$nStatus$0$0({1}SC:U),Z,0,0)]
T:FpredefinedAnimations$Character[({0}S:S$entity$0$0({31}STEntity:S),Z,0,0)({31}S:S$status$0$0({1}SC:U),Z,0,0)({32}S:S$side$0$0({1}SC:U),Z,0,0)]
S:G$updateAnimation$0$0({2}DF,SC:S),C,0,0
S:G$initializeEntities$0$0({2}DF,SV:S),C,0,0
S:G$performAction$0$0({2}DF,SV:S),C,0,0
S:G$updateCharacter$0$0({2}DF,SC:U),C,0,0
S:G$scrollWorld$0$0({2}DF,SV:S),C,0,0
S:G$getScore$0$0({2}DF,SI:U),C,0,0
S:G$drawAll$0$0({2}DF,SV:S),C,0,0
S:G$getCharacter$0$0({2}DF,DG,STCharacter:S),C,0,0
S:G$g_SCR_WIDTH$0$0({1}SC:U),D,0,0
S:G$g_SCR_HEIGHT$0$0({1}SC:U),D,0,0
S:G$g_SCR_VMEM$0$0({2}DG,SC:U),D,0,0
S:G$G_palette$0$0({16}DA16d,SC:U),D,0,0
S:G$G_EMRright$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRright2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRright3$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRleft$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRleft2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRleft3$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRjumpright1$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright3$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpright4$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft1$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft2$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft3$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRjumpleft4$0$0({32}DA32d,SC:U),D,0,0
S:G$G_EMRhitright$0$0({64}DA64d,SC:U),D,0,0
S:G$G_EMRhitleft$0$0({64}DA64d,SC:U),D,0,0
S:G$g_allAnimFrames$0$0({80}DA16d,ST__00000000:S),D,0,0
S:G$g_walkLeft$0$0({10}DA5d,DG,ST__00000000:S),D,0,0
S:G$g_walkRight$0$0({10}DA5d,DG,ST__00000000:S),D,0,0
S:G$g_jumpLeft$0$0({12}DA6d,DG,ST__00000000:S),D,0,0
S:G$g_jumpRight$0$0({12}DA6d,DG,ST__00000000:S),D,0,0
S:G$g_hitLeft$0$0({4}DA2d,DG,ST__00000000:S),D,0,0
S:G$g_hitRight$0$0({4}DA2d,DG,ST__00000000:S),D,0,0
S:G$g_anim$0$0({16}DA4d,DA2d,DG,DG,ST__00000000:S),D,0,0
M:entities
F:G$initializeEntities$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.initializeEntities$p$1$80({2}DG,ST__00000002:S),R,0,0,[]
F:G$getScore$0$0({2}DF,SI:U),Z,0,0,0,0,0
F:G$getCharacter$0$0({2}DF,DG,STCharacter:S),Z,0,0,0,0,0
F:G$performAction$0$0({2}DF,SV:S),Z,0,2,0,0,0
S:Lentities.performAction$c$1$83({2}DG,STCharacter:S),B,1,4
S:Lentities.performAction$move$1$83({1}SC:U),B,1,6
S:Lentities.performAction$side$1$83({1}SC:U),B,1,7
S:Lentities.performAction$e$1$84({2}DG,STEntity:S),R,0,0,[e,d]
S:Lentities.performAction$p$1$84({2}DG,ST__00000002:S),B,1,-12
S:Lentities.performAction$sloc0$1$0({2}DG,SC:U),B,1,-5
S:Lentities.performAction$sloc1$1$0({2}DG,SC:U),B,1,-3
S:Lentities.performAction$sloc2$1$0({1}SC:U),B,1,-1
S:Lentities.performAction$sloc3$1$0({2}DG,DG,DG,ST__00000000:S),B,1,-8
S:Lentities.performAction$sloc4$1$0({1}SC:U),B,1,-6
S:Lentities.performAction$sloc5$1$0({2}DG,DG,ST__00000000:S),B,1,-10
F:G$cropVelocity$0$0({2}DF,SV:S),C,0,0,0,0,0
S:Lentities.cropVelocity$v$1$90({2}DG,SI:S),B,1,4
S:Lentities.cropVelocity$maxvel$1$90({2}SI:S),B,1,6
S:Lentities.cropVelocity$minvel$1$90({2}SI:S),B,1,8
F:G$moveBlock$0$0({2}DF,SC:U),Z,0,0,0,0,0
S:Lentities.moveBlock$b_idx$1$94({1}SC:U),B,1,4
S:Lentities.moveBlock$e$1$95({2}DG,STEntity:S),R,0,0,[c,b]
S:Lentities.moveBlock$sloc0$1$0({2}DG,ST__00000002:S),B,1,-3
S:Lentities.moveBlock$sloc1$1$0({2}DG,SI:U),B,1,-10
S:Lentities.moveBlock$sloc2$1$0({1}SC:U),B,1,-1
S:Lentities.moveBlock$sloc3$1$0({2}DG,SC:U),B,1,-8
S:Lentities.moveBlock$sloc4$1$0({2}DG,SI:S),B,1,-12
S:Lentities.moveBlock$sloc5$1$0({2}DG,SC:U),B,1,-6
S:Lentities.moveBlock$sloc6$1$0({1}SC:U),B,1,-4
F:G$scrollWorld$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.scrollWorld$ce$1$103({2}DG,STEntity:S),R,0,0,[]
S:Lentities.scrollWorld$p$1$103({2}DG,ST__00000002:S),R,0,0,[]
S:Lentities.scrollWorld$i$1$103({1}SC:U),R,0,0,[d]
S:Lentities.scrollWorld$anim$2$106({2}DG,ST__00000001:S),R,0,0,[]
S:Lentities.scrollWorld$height$2$106({1}SC:U),R,0,0,[e]
F:G$updateCharacterPhysics$0$0({2}DF,SV:S),Z,0,2,0,0,0
S:Lentities.updateCharacterPhysics$c$1$109({2}DG,STCharacter:S),B,1,4
S:Lentities.updateCharacterPhysics$e$1$110({2}DG,STEntity:S),R,0,0,[c,b]
S:Lentities.updateCharacterPhysics$p$1$110({2}DG,ST__00000002:S),B,1,-11
S:Lentities.updateCharacterPhysics$anim$1$110({2}DG,ST__00000001:S),R,0,0,[]
S:Lentities.updateCharacterPhysics$sloc0$1$0({1}SC:U),B,1,-9
S:Lentities.updateCharacterPhysics$sloc1$1$0({2}DG,SI:S),B,1,-8
S:Lentities.updateCharacterPhysics$sloc2$1$0({2}DG,SI:S),B,1,-6
S:Lentities.updateCharacterPhysics$sloc3$1$0({2}DG,STEntity:S),B,1,-2
S:Lentities.updateCharacterPhysics$sloc4$1$0({2}SI:S),B,1,-4
F:G$getNearestBlockID$0$0({2}DF,SC:U),Z,0,0,0,0,0
S:Lentities.getNearestBlockID$bid$1$116({1}SC:U),B,1,4
S:Lentities.getNearestBlockID$y$1$116({1}SC:U),B,1,5
F:G$applyCharacterBlockCollisions$0$0({2}DF,SV:S),Z,0,8,0,0,0
S:Lentities.applyCharacterBlockCollisions$c$1$120({2}DG,STCharacter:S),B,1,4
S:Lentities.applyCharacterBlockCollisions$e$1$121({2}DG,STEntity:S),B,1,-32
S:Lentities.applyCharacterBlockCollisions$p$1$121({2}DG,ST__00000002:S),B,1,-30
S:Lentities.applyCharacterBlockCollisions$i$1$121({1}SC:U),R,0,0,[]
S:Lentities.applyCharacterBlockCollisions$ebl$2$122({2}DG,STEntity:S),B,1,-36
S:Lentities.applyCharacterBlockCollisions$col$2$122({2}DG,ST__00000005:S),B,1,-34
S:Lentities.applyCharacterBlockCollisions$sloc0$1$0({2}DG,STEntity:S),B,1,-28
S:Lentities.applyCharacterBlockCollisions$sloc1$1$0({2}DG,SC:U),B,1,-2
S:Lentities.applyCharacterBlockCollisions$sloc2$1$0({2}DG,SC:U),B,1,-12
S:Lentities.applyCharacterBlockCollisions$sloc3$1$0({2}DG,SC:U),B,1,-14
S:Lentities.applyCharacterBlockCollisions$sloc4$1$0({2}DG,SC:U),B,1,-16
S:Lentities.applyCharacterBlockCollisions$sloc5$1$0({2}DG,SC:U),B,1,-18
S:Lentities.applyCharacterBlockCollisions$sloc6$1$0({2}DG,SC:U),B,1,-20
S:Lentities.applyCharacterBlockCollisions$sloc7$1$0({2}DG,SC:U),B,1,-22
S:Lentities.applyCharacterBlockCollisions$sloc8$1$0({2}DG,SC:U),B,1,-24
S:Lentities.applyCharacterBlockCollisions$sloc9$1$0({1}SC:U),B,1,-5
S:Lentities.applyCharacterBlockCollisions$sloc10$1$0({2}SI:U),B,1,-26
S:Lentities.applyCharacterBlockCollisions$sloc11$1$0({2}DD,STEntity:S),B,1,-10
S:Lentities.applyCharacterBlockCollisions$sloc12$1$0({1}SC:U),B,1,-8
S:Lentities.applyCharacterBlockCollisions$sloc13$1$0({1}SC:U),B,1,-7
S:Lentities.applyCharacterBlockCollisions$sloc14$1$0({1}SC:U),B,1,-6
S:Lentities.applyCharacterBlockCollisions$sloc15$1$0({2}DG,SI:S),B,1,-4
F:G$updateCharacter$0$0({2}DF,SC:U),Z,0,3,0,0,0
S:Lentities.updateCharacter$c$1$127({2}DG,STCharacter:S),B,1,4
S:Lentities.updateCharacter$e$1$128({2}DG,STEntity:S),R,0,0,[e,d]
S:Lentities.updateCharacter$p$1$128({2}DG,ST__00000002:S),R,0,0,[c,b]
S:Lentities.updateCharacter$anim$1$128({2}DG,ST__00000001:S),R,0,0,[]
S:Lentities.updateCharacter$af$1$128({2}DG,ST__00000000:S),B,1,-24
S:Lentities.updateCharacter$alive$1$128({1}SC:U),B,1,-22
S:Lentities.updateCharacter$sloc0$1$0({2}DG,STEntity:S),B,1,-6
S:Lentities.updateCharacter$sloc1$1$0({2}DG,DG,ST__00000000:S),B,1,-15
S:Lentities.updateCharacter$sloc2$1$0({2}DG,SC:U),B,1,-21
S:Lentities.updateCharacter$sloc3$1$0({2}DG,SC:U),B,1,-2
S:Lentities.updateCharacter$sloc4$1$0({2}DG,SC:U),B,1,-11
S:Lentities.updateCharacter$sloc5$1$0({2}DG,SC:U),B,1,-19
S:Lentities.updateCharacter$sloc6$1$0({2}DG,DG,SC:U),B,1,-4
S:Lentities.updateCharacter$sloc7$1$0({2}DG,SC:U),B,1,-13
S:Lentities.updateCharacter$sloc8$1$0({1}SC:U),B,1,-7
S:Lentities.updateCharacter$sloc9$1$0({2}DG,DG,DG,ST__00000000:S),B,1,-9
S:Lentities.updateCharacter$sloc10$1$0({2}DG,DG,ST__00000000:S),B,1,-17
F:G$checkCollisionEntBlock$0$0({2}DF,DG,ST__00000005:S),Z,0,6,0,0,0
S:Lentities.checkCollisionEntBlock$a$1$136({2}DG,STEntity:S),B,1,4
S:Lentities.checkCollisionEntBlock$b$1$136({2}DG,STEntity:S),B,1,6
S:Lentities.checkCollisionEntBlock$ani$1$137({2}DG,ST__00000000:S),B,1,-9
S:Lentities.checkCollisionEntBlock$blk$1$137({2}DG,ST__00000003:S),B,1,-7
S:Lentities.checkCollisionEntBlock$a_bbound$2$138({1}SC:U),B,1,-11
S:Lentities.checkCollisionEntBlock$b_bbound$2$138({1}SC:U),B,1,-10
S:Lentities.checkCollisionEntBlock$a_rbound$2$143({1}SC:U),B,1,-10
S:Lentities.checkCollisionEntBlock$b_rbound$2$143({1}SC:U),B,1,-11
S:Lentities.checkCollisionEntBlock$sloc0$1$0({2}DG,ST__00000004:S),B,1,-4
S:Lentities.checkCollisionEntBlock$sloc1$1$0({1}SC:S),B,1,-5
S:Lentities.checkCollisionEntBlock$sloc2$1$0({2}DG,SC:U),B,1,-2
F:G$isOverFloor$0$0({2}DF,SC:U),Z,0,5,0,0,0
S:Lentities.isOverFloor$e$1$148({2}DG,STEntity:S),B,1,4
S:Lentities.isOverFloor$over$1$149({1}SC:U),B,1,-1
S:Lentities.isOverFloor$f$1$149({2}DG,STEntity:S),B,1,-3
S:Lentities.isOverFloor$e_a$2$150({2}DG,ST__00000000:S),B,1,-5
F:G$setEntityLocation$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.setEntityLocation$e$1$151({2}DG,STEntity:S),B,1,4
S:Lentities.setEntityLocation$x$1$151({1}SC:U),B,1,6
S:Lentities.setEntityLocation$y$1$151({1}SC:U),B,1,7
S:Lentities.setEntityLocation$vx$1$151({1}SC:U),B,1,8
S:Lentities.setEntityLocation$vy$1$151({1}SC:U),B,1,9
S:Lentities.setEntityLocation$eraseprev$1$151({1}SC:U),B,1,10
S:Lentities.setEntityLocation$sloc0$1$0({2}DG,DG,SC:U),B,1,-2
F:G$drawAnimEntity$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.drawAnimEntity$e$1$154({2}DG,STEntity:S),B,1,4
S:Lentities.drawAnimEntity$anim$2$156({2}DG,ST__00000001:S),R,0,0,[l,h]
S:Lentities.drawAnimEntity$frame$2$156({2}DG,ST__00000000:S),R,0,0,[c,b]
S:Lentities.drawAnimEntity$sloc0$1$0({2}DG,SC:U),B,1,-2
S:Lentities.drawAnimEntity$sloc1$1$0({1}SC:U),B,1,-3
S:Lentities.drawAnimEntity$sloc2$1$0({1}SC:U),B,1,-4
F:G$drawBlockEntity$0$0({2}DF,SV:S),Z,0,3,0,0,0
S:Lentities.drawBlockEntity$e$1$157({2}DG,STEntity:S),B,1,4
S:Lentities.drawBlockEntity$sp$2$159({2}DG,SC:U),B,1,-3
S:Lentities.drawBlockEntity$eraseh$2$159({1}SC:U),R,0,0,[c]
S:Lentities.drawBlockEntity$drawh$2$159({1}SC:U),B,1,-14
S:Lentities.drawBlockEntity$block$2$159({2}DG,ST__00000003:S),B,1,-13
S:Lentities.drawBlockEntity$sloc0$1$0({2}DG,STEntity:S),B,1,-5
S:Lentities.drawBlockEntity$sloc1$1$0({2}DG,SC:U),B,1,-11
S:Lentities.drawBlockEntity$sloc2$1$0({1}SC:U),B,1,-1
S:Lentities.drawBlockEntity$sloc3$1$0({2}DG,DG,SC:U),B,1,-3
S:Lentities.drawBlockEntity$sloc4$1$0({2}DG,SC:U),B,1,-9
S:Lentities.drawBlockEntity$sloc5$1$0({2}DG,SC:U),B,1,-7
F:G$drawAll$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.drawAll$i$1$164({1}SC:U),R,0,0,[b]
F:G$newSolidBlock$0$0({2}DF,DG,STEntity:S),Z,0,0,0,0,0
S:Lentities.newSolidBlock$x$1$165({1}SC:U),B,1,4
S:Lentities.newSolidBlock$y$1$165({1}SC:U),B,1,5
S:Lentities.newSolidBlock$width$1$165({1}SC:U),B,1,6
S:Lentities.newSolidBlock$height$1$165({1}SC:U),B,1,7
S:Lentities.newSolidBlock$colour$1$165({1}SC:U),B,1,8
S:Lentities.newSolidBlock$newEnt$1$166({2}DG,STEntity:S),R,0,0,[c,b]
S:Lentities.newSolidBlock$sloc0$1$0({2}DG,SI:U),B,1,-2
S:Lentities.newSolidBlock$sloc1$1$0({2}SI:U),B,1,-4
F:G$destroyBlock$0$0({2}DF,SV:S),Z,0,0,0,0,0
S:Lentities.destroyBlock$i$1$168({1}SC:U),B,1,4
S:Lentities.destroyBlock$nEnts$1$169({1}SC:S),R,0,0,[e]
F:G$randomCreateNewBlock$0$0({2}DF,SC:U),Z,0,2,0,0,0
S:Lentities.randomCreateNewBlock$y$1$170({1}SC:U),B,1,4
S:Lentities.randomCreateNewBlock$h$1$170({1}SC:U),B,1,5
S:Lentities.randomCreateNewBlock$rndinc$1$170({1}SC:U),B,1,6
S:Lentities.randomCreateNewBlock$last_y$1$171({1}SC:U),R,0,0,[e]
S:Lentities.randomCreateNewBlock$created$1$171({1}SC:U),B,1,-1
S:Lentities.randomCreateNewBlock$w$2$172({1}SC:U),R,0,0,[d]
S:Lentities.randomCreateNewBlock$x$2$172({1}SC:U),B,1,-2
T:Fentities$__00000000[({0}S:S$sprite$0$0({2}DG,SC:U),Z,0,0)({2}S:S$width$0$0({1}SC:U),Z,0,0)({3}S:S$height$0$0({1}SC:U),Z,0,0)({4}S:S$time$0$0({1}SC:U),Z,0,0)]
T:Fentities$__00000001[({0}S:S$frames$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({2}S:S$frame_id$0$0({1}SC:U),Z,0,0)({3}S:S$time$0$0({1}SC:U),Z,0,0)({4}S:S$status$0$0({1}SC:U),Z,0,0)]
T:Fentities$__00000002[({0}S:S$x$0$0({2}SI:U),Z,0,0)({2}S:S$y$0$0({2}SI:U),Z,0,0)({4}S:S$vx$0$0({2}SI:S),Z,0,0)({6}S:S$vy$0$0({2}SI:S),Z,0,0)({8}S:S$bounce$0$0({2}SI:U),Z,0,0)({10}S:S$floor$0$0({2}DG,STEntity:S),Z,0,0)]
T:Fentities$__00000003[({0}S:S$w$0$0({1}SC:U),Z,0,0)({1}S:S$h$0$0({1}SC:U),Z,0,0)({2}S:S$colour$0$0({1}SC:U),Z,0,0)]
T:Fentities$__00000004[({0}S:S$anim$0$0({5}ST__00000001:S),Z,0,0)({0}S:S$block$0$0({3}ST__00000003:S),Z,0,0)]
T:Fentities$__00000005[({0}S:S$x$0$0({1}SC:U),Z,0,0)({1}S:S$y$0$0({1}SC:U),Z,0,0)({2}S:S$w$0$0({1}SC:U),Z,0,0)({3}S:S$h$0$0({1}SC:U),Z,0,0)]
T:Fentities$Entity[({0}S:S$graph$0$0({5}ST__00000004:S),Z,0,0)({5}S:S$pscreen$0$0({2}DG,SC:U),Z,0,0)({7}S:S$npscreen$0$0({2}DG,SC:U),Z,0,0)({9}S:S$x$0$0({1}SC:U),Z,0,0)({10}S:S$y$0$0({1}SC:U),Z,0,0)({11}S:S$nx$0$0({1}SC:U),Z,0,0)({12}S:S$ny$0$0({1}SC:U),Z,0,0)({13}S:S$pw$0$0({1}SC:U),Z,0,0)({14}S:S$ph$0$0({1}SC:U),Z,0,0)({15}S:S$phys$0$0({12}ST__00000002:S),Z,0,0)({27}S:S$draw$0$0({1}SC:U),Z,0,0)({28}S:S$nAnim$0$0({2}DG,DG,ST__00000000:S),Z,0,0)({30}S:S$nStatus$0$0({1}SC:U),Z,0,0)]
T:Fentities$Character[({0}S:S$entity$0$0({31}STEntity:S),Z,0,0)({31}S:S$status$0$0({1}SC:U),Z,0,0)({32}S:S$side$0$0({1}SC:U),Z,0,0)]
S:G$cpct_keyboardStatusBuffer$0$0({10}DA10d,SC:U),E,0,0
S:G$cpct_akp_digidrumStatus$0$0({1}SC:U),E,0,0
S:G$cpct_akp_songLoopTimes$0$0({1}SC:U),E,0,0
S:G$G_scrollVel$0$0({2}SI:S),E,0,0
S:G$G_platfColour$0$0({1}SC:U),E,0,0
S:G$G_score$0$0({2}SI:U),E,0,0
S:G$g_blocks$0$0({496}DA16d,STEntity:S),E,0,0
S:G$g_lastBlock$0$0({1}SC:U),E,0,0
S:G$g_colMinBlock$0$0({1}SC:U),E,0,0
S:G$g_colMaxBlock$0$0({1}SC:U),E,0,0
S:G$g_movingBlocks$0$0({1}SC:U),E,0,0
S:Lentities.checkCollisionEntBlock$c$1$137({4}ST__00000005:S),E,0,0
S:G$_print_format$0$0({2}DF,SI:S),C,0,0
S:G$printf_small$0$0({2}DF,SV:S),C,0,0
S:G$printf$0$0({2}DF,SI:S),C,0,0
S:G$vprintf$0$0({2}DF,SI:S),C,0,0
S:G$sprintf$0$0({2}DF,SI:S),C,0,0
S:G$vsprintf$0$0({2}DF,SI:S),C,0,0
S:G$puts$0$0({2}DF,SI:S),C,0,0
S:G$gets$0$0({2}DF,DG,SC:S),C,0,0
S:G$getchar$0$0({2}DF,SC:S),C,0,0
S:G$putchar$0$0({2}DF,SV:S),C,0,0
S:G$cpct_reenableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableFirmware$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableLowerROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_enableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_disableUpperROM$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memset_f64$0$0({2}DF,SV:S),C,0,0
S:G$cpct_memcpy$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setStackLocation$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard$0$0({2}DF,SV:S),C,0,0
S:G$cpct_scanKeyboard_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_isKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed$0$0({2}DF,SC:U),C,0,0
S:G$cpct_isAnyKeyPressed_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_getBit$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get2Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_get4Bits$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setBit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set2Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_set4Bits$0$0({2}DF,SV:S),C,0,0
S:G$cpct_px2byteM0$0$0({2}DF,SC:U),C,0,0
S:G$cpct_px2byteM1$0$0({2}DF,SC:U),C,0,0
S:G$cpct_drawTileAligned2x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned2x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawTileAligned4x8_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSprite$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMasked$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSolidBox$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawSpriteMaskedAlignedTable$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawCharM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM0$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM1_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_drawStringM2$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMode$0$0({2}DF,SV:S),C,0,0
S:G$cpct_waitVSYNC$0$0({2}DF,SV:S),C,0,0
S:G$cpct_count2VSYNC$0$0({2}DF,SI:U),C,0,0
S:G$cpct_fw2hw$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setPalette$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getHWColour$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setPALColour$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryPage$0$0({2}DF,SV:S),C,0,0
S:G$cpct_setVideoMemoryOffset$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getScreenPtr$0$0({2}DF,DG,SC:U),C,0,0
S:G$cpct_akp_musicInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_musicPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_stop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXInit$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStopAll$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXStop$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXPlay$0$0({2}DF,SV:S),C,0,0
S:G$cpct_akp_SFXGetInstrument$0$0({2}DF,SI:U),C,0,0
S:G$cpct_akp_setFadeVolume$0$0({2}DF,SV:S),C,0,0
S:G$cpct_getRandomUniform_u8_f$0$0({2}DF,SC:U),C,0,0
S:G$cpct_setRandomSeedUniform_u8$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTilemap2x4_f$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileBox2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_drawTileRow2x4$0$0({2}DF,SV:S),C,0,0
S:G$cpct_etm_setTileset2x4$0$0({2}DF,SV:S),C,0,0
S:G$updateAnimation$0$0({2}DF,SC:S),C,0,0
S:G$getRandomUniform$0$0({2}DF,SC:U),C,0,0
S:G$cropVelocity$0$0({2}DF,SV:S),C,0,0
M:random
F:G$getRandomUniform$0$0({2}DF,SC:U),C,0,0,0,0,0
S:Lrandom.getRandomUniform$inc$1$1({1}SC:U),B,1,4
S:G$g_nextRand$0$0({1}SC:U),E,0,0
S:G$getRandomUniform$0$0({2}DF,SC:U),C,0,0
L:C$game.c$29$0$0:4000
L:G$initializeGameScreen$0$0:4000
L:C$game.c$35$1$70:400D
L:C$game.c$40$1$70:401A
L:C$game.c$43$1$70:4023
L:C$game.c$44$1$70:4031
L:C$game.c$47$1$70:403F
L:C$game.c$48$1$70:404B
L:C$game.c$51$1$70:405E
L:C$game.c$52$1$70:406C
L:C$game.c$53$1$70:408C
L:C$game.c$56$1$70:409B
L:C$game.c$57$1$70:40AA
L:XG$initializeGameScreen$0$0:40AA
L:Fgame$__str_0$0$0:40AB
L:Fgame$__str_1$0$0:40AE
L:C$game.c$62$1$70:40B2
L:G$updateUser$0$0:40B2
L:C$game.c$64$1$72:40BA
L:C$game.c$71$1$72:40D1
L:C$game.c$72$2$73:40DF
L:C$game.c$76$1$72:40F8
L:C$game.c$77$1$72:4106
L:C$game.c$80$1$72:4118
L:C$game.c$81$1$72:4126
L:C$game.c$72$1$72:4143
L:C$game.c$84$1$72:4147
L:C$game.c$85$1$72:414A
L:C$game.c$89$1$72:4158
L:C$game.c$90$1$72:4165
L:XG$updateUser$0$0:4165
L:C$game.c$95$1$72:4166
L:C$game.c$96$1$75:4166
L:C$game.c$97$1$75:4166
L:G$wait4Key$0$0:4166
L:C$game.c$98$1$75:4169
L:C$game.c$100$1$75:4174
L:C$game.c$99$1$75:4174
L:C$game.c$101$1$75:4177
L:C$game.c$102$1$75:4182
L:XG$wait4Key$0$0:4182
L:C$game.c$107$1$75:4183
L:G$game$0$0:4183
L:C$game.c$108$1$75:4184
L:C$game.c$112$1$77:418E
L:C$game.c$113$1$77:419A
L:C$game.c$114$1$77:419D
L:C$game.c$119$1$77:41A0
L:C$game.c$120$2$78:41AC
L:C$game.c$122$2$78:41B6
L:C$game.c$123$2$78:41C1
L:C$game.c$128$1$77:41CB
L:C$game.c$129$1$77:41CF
L:XG$game$0$0:41CF
L:C$game.c$134$1$77:41D0
L:G$showGameEnd$0$0:41D0
L:C$game.c$139$1$80:41DD
L:C$game.c$140$1$80:41E9
L:C$game.c$143$1$80:41FC
L:C$game.c$144$1$80:4208
L:C$game.c$147$1$80:421B
L:C$game.c$148$1$80:4229
L:C$game.c$149$1$80:4249
L:C$game.c$152$1$80:4258
L:C$game.c$153$1$80:4264
L:C$game.c$156$1$80:4277
L:C$game.c$157$1$80:4282
L:XG$showGameEnd$0$0:4282
L:Fgame$__str_2$0$0:4283
L:Fgame$__str_3$0$0:428E
L:Fgame$__str_4$0$0:4294
L:Fgame$__str_5$0$0:4298
L:C$main.c$27$0$0:42A4
L:C$main.c$29$1$58:42A4
L:G$initializeCPC$0$0:42A4
L:C$main.c$32$1$58:42A7
L:C$main.c$33$1$58:42B4
L:C$main.c$34$1$58:42C1
L:C$main.c$37$1$58:42CB
L:C$main.c$38$1$58:42D2
L:XG$initializeCPC$0$0:42D2
L:C$main.c$44$1$58:42D3
L:C$main.c$46$1$58:42D3
L:G$main$0$0:42D3
L:C$main.c$49$1$60:42D6
L:C$main.c$54$1$60:42DB
L:C$main.c$55$2$61:42DB
L:C$main.c$56$2$61:42E2
L:C$main.c$58$2$61:42EB
L:C$main.c$59$2$61:42F1
L:C$main.c$61$1$60:42F2
L:XG$main$0$0:42F2
L:C$frame.c$28$0$0:42F4
L:G$drawFrame$0$0:42F4
L:C$frame.c$33$1$55:42FD
L:C$frame.c$34$1$55:4319
L:C$frame.c$35$1$55:4325
L:C$frame.c$38$2$56:4331
L:C$frame.c$39$2$56:4333
L:C$frame.c$40$2$56:4346
L:C$frame.c$41$2$56:4354
L:C$frame.c$38$1$55:4362
L:C$frame.c$45$1$55:436A
L:C$frame.c$46$2$57:437C
L:C$frame.c$47$2$57:437E
L:C$frame.c$48$2$57:4382
L:C$frame.c$49$2$57:4390
L:C$frame.c$46$1$55:43A0
L:C$frame.c$51$1$55:43A9
L:C$frame.c$54$1$55:43B7
L:C$frame.c$55$2$58:43CA
L:C$frame.c$56$2$58:43CC
L:C$frame.c$57$2$58:43D0
L:C$frame.c$58$2$58:43DE
L:C$frame.c$55$1$55:43EE
L:C$frame.c$60$1$55:43F7
L:C$frame.c$63$1$55:4405
L:C$frame.c$64$1$55:4416
L:C$frame.c$65$1$55:4422
L:C$frame.c$66$1$55:4432
L:XG$drawFrame$0$0:4432
L:G$G_frameUpLeftCorner$0$0:4433
L:G$G_frameUpRightCorner$0$0:4453
L:G$G_frameDownRightCorner$0$0:4473
L:G$G_frameDownLeftCorner$0$0:4493
L:G$G_frameLeft$0$0:44B3
L:G$G_frameRight$0$0:44D3
L:G$G_frameUp$0$0:44F3
L:G$G_frameDown$0$0:4513
L:G$G_frameUpCenter$0$0:4533
L:G$G_frameDownCenter$0$0:4563
L:G$G_frameUpCenter2$0$0:4593
L:G$G_frameDownCenter2$0$0:45A3
L:G$G_palette$0$0:45B3
L:G$G_EMRright$0$0:45C3
L:G$G_EMRright2$0$0:4603
L:G$G_EMRright3$0$0:4623
L:G$G_EMRleft$0$0:4663
L:G$G_EMRleft2$0$0:46A3
L:G$G_EMRleft3$0$0:46C3
L:G$G_EMRjumpright1$0$0:4703
L:G$G_EMRjumpright2$0$0:4723
L:G$G_EMRjumpright3$0$0:4743
L:G$G_EMRjumpright4$0$0:4763
L:G$G_EMRjumpleft1$0$0:4783
L:G$G_EMRjumpleft2$0$0:47A3
L:G$G_EMRjumpleft3$0$0:47C3
L:G$G_EMRjumpleft4$0$0:47E3
L:G$G_EMRhitright$0$0:4803
L:G$G_EMRhitleft$0$0:4843
L:C$animation.c$40$0$0:4883
L:G$updateAnimation$0$0:4883
L:C$animation.c$41$1$0:4890
L:C$animation.c$45$1$55:4892
L:C$animation.c$46$1$55:4898
L:C$animation.c$50$1$55:489D
L:C$animation.c$44$1$55:48A7
L:C$animation.c$45$2$56:48AF
L:C$animation.c$46$2$56:48BA
L:C$animation.c$49$2$56:48BE
L:C$animation.c$50$2$56:48CB
L:C$animation.c$52$2$56:48D8
L:C$animation.c$56$1$55:48E4
L:C$animation.c$57$1$55:48EA
L:C$animation.c$60$1$55:48F4
L:C$animation.c$63$2$57:4905
L:C$animation.c$67$3$58:4918
L:C$animation.c$68$3$58:491A
L:C$animation.c$71$3$58:4940
L:C$animation.c$73$4$59:4944
L:C$animation.c$74$3$58:4955
L:C$animation.c$76$4$60:4960
L:C$animation.c$77$4$60:4964
L:C$animation.c$80$4$61:497B
L:C$animation.c$81$4$61:4982
L:C$animation.c$87$1$55:498A
L:C$animation.c$88$1$55:498F
L:XG$updateAnimation$0$0:498F
L:G$g_allAnimFrames$0$0:4990
L:G$g_walkLeft$0$0:49E0
L:G$g_walkRight$0$0:49EA
L:G$g_jumpLeft$0$0:49F4
L:G$g_jumpRight$0$0:4A00
L:G$g_hitLeft$0$0:4A0C
L:G$g_hitRight$0$0:4A10
L:G$g_anim$0$0:4A14
L:C$entities.c$120$0$0:4A24
L:C$entities.c$122$1$80:4A24
L:G$initializeEntities$0$0:4A24
L:C$entities.c$123$1$80:4A33
L:C$entities.c$124$1$80:4A39
L:C$entities.c$127$1$80:4A3E
L:C$entities.c$128$1$80:4A43
L:C$entities.c$129$1$80:4A56
L:C$entities.c$130$1$80:4A69
L:C$entities.c$131$1$80:4A7C
L:C$entities.c$132$1$80:4A8F
L:C$entities.c$133$1$80:4AA2
L:C$entities.c$134$1$80:4AB5
L:C$entities.c$135$1$80:4AC7
L:C$entities.c$136$1$80:4ADA
L:C$entities.c$137$1$80:4AED
L:C$entities.c$139$1$80:4AF3
L:C$entities.c$142$1$80:4AF8
L:C$entities.c$145$1$80:4B10
L:C$entities.c$146$1$80:4B15
L:C$entities.c$147$1$80:4B1A
L:XG$initializeEntities$0$0:4B1A
L:G$G_gy$0$0:4B1B
L:G$G_gx$0$0:4B1D
L:G$G_maxYVel$0$0:4B1F
L:G$G_maxXVel$0$0:4B21
L:G$G_minVel$0$0:4B23
L:G$G_jumpVel$0$0:4B25
L:G$G_maxScrollVel$0$0:4B27
L:G$G_airFric$0$0:4B29
L:G$G_floorFric$0$0:4B2A
L:G$G_minX$0$0:4B2B
L:G$G_maxX$0$0:4B2C
L:G$G_minY$0$0:4B2D
L:G$G_maxY$0$0:4B2E
L:G$g_SCR_WIDTH$0$0:4B2F
L:G$g_SCR_HEIGHT$0$0:4B30
L:G$g_SCR_VMEM$0$0:4B31
L:G$g_Character$0$0:4B33
L:C$entities.c$152$1$80:4B54
L:G$getScore$0$0:4B54
L:C$entities.c$152$1$81:4B57
L:XG$getScore$0$0:4B57
L:C$entities.c$153$1$81:4B58
L:G$getCharacter$0$0:4B58
L:C$entities.c$153$1$82:4B5B
L:XG$getCharacter$0$0:4B5B
L:C$entities.c$160$1$82:4B5C
L:G$performAction$0$0:4B5C
L:C$entities.c$161$1$84:4B69
L:C$entities.c$162$1$84:4B71
L:C$entities.c$172$1$84:4B76
L:C$entities.c$180$1$84:4B80
L:C$entities.c$176$1$84:4BA2
L:C$entities.c$177$1$84:4BA8
L:C$entities.c$210$1$84:4BB9
L:C$entities.c$165$1$84:4BC5
L:C$entities.c$169$2$85:4BDC
L:C$entities.c$172$2$85:4BDC
L:C$entities.c$174$3$86:4BEF
L:C$entities.c$176$3$86:4BEF
L:C$entities.c$177$4$87:4BF7
L:C$entities.c$178$4$87:4C0C
L:C$entities.c$180$3$86:4C10
L:C$entities.c$186$3$86:4C18
L:C$entities.c$190$1$84:4C18
L:C$entities.c$189$3$86:4C29
L:C$entities.c$190$3$86:4C2F
L:C$entities.c$192$3$86:4C3A
L:C$entities.c$193$3$86:4C42
L:C$entities.c$203$2$85:4C45
L:C$entities.c$205$2$85:4C45
L:C$entities.c$206$3$88:4C50
L:C$entities.c$207$3$88:4C73
L:C$entities.c$208$3$88:4C7B
L:C$entities.c$209$3$88:4C7F
L:C$entities.c$210$3$88:4C87
L:C$entities.c$211$3$88:4C8E
L:C$entities.c$213$2$85:4CA6
L:C$entities.c$218$2$85:4CA8
L:C$entities.c$220$1$84:4CA8
L:C$entities.c$221$3$89:4CC3
L:C$entities.c$222$3$89:4CC7
L:C$entities.c$223$3$89:4CCD
L:C$entities.c$225$3$89:4CD6
L:C$entities.c$227$2$85:4CDD
L:C$entities.c$230$2$85:4CDF
L:C$entities.c$232$2$85:4CDF
L:C$entities.c$233$2$85:4CE9
L:C$entities.c$234$1$84:4CF1
L:C$entities.c$235$1$84:4CF5
L:XG$performAction$0$0:4CF5
L:C$entities.c$240$1$84:4CF6
L:G$cropVelocity$0$0:4CF6
L:C$entities.c$243$1$91:4CFE
L:C$entities.c$245$2$92:4D0D
L:C$entities.c$246$2$92:4D28
L:C$entities.c$249$2$93:4D3E
L:C$entities.c$250$2$93:4D5A
L:C$entities.c$252$1$91:4D77
L:XG$cropVelocity$0$0:4D77
L:C$entities.c$262$1$91:4D78
L:G$moveBlock$0$0:4D78
L:C$entities.c$263$1$95:4D85
L:C$entities.c$267$1$95:4D9A
L:C$entities.c$268$1$95:4DC5
L:C$entities.c$269$1$95:4DE2
L:C$entities.c$280$1$95:4DF0
L:C$entities.c$272$1$95:4DFA
L:C$entities.c$275$2$96:4E00
L:C$entities.c$276$3$97:4E0A
L:C$entities.c$277$3$97:4E13
L:C$entities.c$280$2$96:4E18
L:C$entities.c$285$1$95:4E35
L:C$entities.c$284$1$95:4E3F
L:C$entities.c$285$2$98:4E44
L:C$entities.c$286$2$98:4E54
L:C$entities.c$287$2$98:4E6E
L:C$entities.c$290$2$98:4E75
L:C$entities.c$292$3$99:4E83
L:C$entities.c$294$4$100:4E8E
L:C$entities.c$295$4$100:4E96
L:C$entities.c$296$4$100:4EA1
L:C$entities.c$297$3$99:4EB4
L:C$entities.c$299$4$101:4ED7
L:C$entities.c$300$4$101:4EE4
L:C$entities.c$301$4$101:4EF6
L:C$entities.c$303$3$99:4F07
L:C$entities.c$308$1$95:4F0F
L:C$entities.c$309$2$102:4F19
L:C$entities.c$310$2$102:4F2D
L:C$entities.c$314$1$95:4F4B
L:C$entities.c$315$1$95:4F51
L:XG$moveBlock$0$0:4F51
L:C$entities.c$321$1$95:4F52
L:C$entities.c$322$1$103:4F52
L:C$entities.c$323$1$103:4F52
L:G$scrollWorld$0$0:4F52
L:C$entities.c$334$1$103:4F54
L:C$entities.c$329$2$104:4F5B
L:C$entities.c$334$3$105:4F67
L:C$entities.c$335$3$105:4F6D
L:C$entities.c$327$1$103:4F6E
L:C$entities.c$341$1$103:4F71
L:C$entities.c$344$2$106:4F82
L:C$entities.c$347$2$106:4F98
L:C$entities.c$348$2$106:4FAD
L:C$entities.c$349$2$106:4FB8
L:C$entities.c$354$1$103:4FBD
L:C$entities.c$357$2$107:4FDE
L:C$entities.c$359$3$108:4FF4
L:C$entities.c$360$3$108:5006
L:C$entities.c$363$3$108:500E
L:C$entities.c$364$3$108:5024
L:C$entities.c$367$1$103:502D
L:XG$scrollWorld$0$0:502D
L:C$entities.c$374$1$103:502E
L:G$updateCharacterPhysics$0$0:502E
L:C$entities.c$375$1$110:503B
L:C$entities.c$376$1$110:5043
L:C$entities.c$384$1$110:5060
L:C$entities.c$389$1$110:5068
L:C$entities.c$393$1$110:5078
L:C$entities.c$382$1$110:5088
L:C$entities.c$380$1$110:5093
L:C$entities.c$382$2$111:5099
L:C$entities.c$383$3$112:50A1
L:C$entities.c$384$3$112:50A5
L:C$entities.c$385$3$112:50A8
L:C$entities.c$389$2$111:50AE
L:C$entities.c$392$2$113:50DF
L:C$entities.c$393$2$113:5113
L:C$entities.c$400$1$110:5162
L:C$entities.c$402$2$114:516E
L:C$entities.c$404$2$114:518B
L:C$entities.c$405$2$114:51B9
L:C$entities.c$409$1$110:51C2
L:C$entities.c$411$2$115:51CF
L:C$entities.c$413$2$115:51EC
L:C$entities.c$414$2$115:521A
L:C$entities.c$397$1$110:5223
L:C$entities.c$417$2$115:522C
L:C$entities.c$418$2$115:522F
L:C$entities.c$420$2$115:524B
L:C$entities.c$422$1$110:526A
L:XG$updateCharacterPhysics$0$0:526A
L:C$entities.c$430$1$110:526B
L:G$getNearestBlockID$0$0:526B
L:C$entities.c$432$1$117:528E
L:C$entities.c$435$1$117:5294
L:C$entities.c$439$1$117:52F1
L:C$entities.c$443$1$117:52F4
L:C$entities.c$444$1$117:52F9
L:XG$getNearestBlockID$0$0:52F9
L:C$entities.c$452$1$117:52FA
L:G$applyCharacterBlockCollisions$0$0:52FA
L:C$entities.c$453$1$121:5307
L:C$entities.c$454$1$121:531F
L:C$entities.c$458$1$121:532F
L:C$entities.c$459$1$121:536A
L:C$entities.c$462$1$121:537C
L:C$entities.c$463$1$121:5385
L:C$entities.c$467$4$124:53E7
L:C$entities.c$469$2$122:5412
L:C$entities.c$470$2$122:542E
L:C$entities.c$473$2$122:5440
L:C$entities.c$477$3$123:546E
L:C$entities.c$479$1$121:54D1
L:C$entities.c$478$4$124:54DB
L:C$entities.c$479$4$124:54E1
L:C$entities.c$481$4$124:54F0
L:C$entities.c$484$4$124:54FD
L:C$entities.c$485$4$124:550F
L:C$entities.c$497$1$121:555A
L:C$entities.c$498$1$121:556A
L:C$entities.c$488$3$123:557A
L:C$entities.c$489$4$125:5586
L:C$entities.c$490$4$125:559B
L:C$entities.c$491$4$125:55C3
L:C$entities.c$492$4$125:55D1
L:C$entities.c$493$4$125:55DF
L:C$entities.c$495$4$125:55F5
L:C$entities.c$496$4$125:55FB
L:C$entities.c$497$4$125:5605
L:C$entities.c$498$4$125:5617
L:C$entities.c$502$4$126:5623
L:C$entities.c$503$4$126:5630
L:C$entities.c$504$4$126:563C
L:C$entities.c$467$1$121:5646
L:C$entities.c$508$1$121:5660
L:XG$applyCharacterBlockCollisions$0$0:5660
L:C$entities.c$515$1$121:5661
L:G$updateCharacter$0$0:5661
L:C$entities.c$516$1$128:566E
L:C$entities.c$517$1$128:5680
L:C$entities.c$519$1$128:5686
L:C$entities.c$520$1$128:56B7
L:C$entities.c$524$1$128:56DD
L:C$entities.c$525$1$128:56FF
L:C$entities.c$526$1$128:571E
L:C$entities.c$527$1$128:572C
L:C$entities.c$531$1$128:577F
L:C$entities.c$530$1$128:578B
L:C$entities.c$531$2$129:578F
L:C$entities.c$532$2$129:5797
L:C$entities.c$533$2$129:57AF
L:C$entities.c$534$2$129:57B9
L:C$entities.c$538$1$128:57C1
L:C$entities.c$542$1$128:57D9
L:C$entities.c$543$2$130:57EB
L:C$entities.c$544$2$130:57F4
L:C$entities.c$546$1$128:57FE
L:C$entities.c$547$2$131:5825
L:C$entities.c$548$2$131:5832
L:C$entities.c$552$1$128:5861
L:C$entities.c$550$1$128:5869
L:C$entities.c$551$2$132:5875
L:C$entities.c$552$2$132:5882
L:C$entities.c$553$2$132:588E
L:C$entities.c$555$1$128:5894
L:C$entities.c$556$2$133:589F
L:C$entities.c$557$2$133:58AA
L:C$entities.c$523$1$128:58D1
L:C$entities.c$562$1$128:58DB
L:C$entities.c$563$2$134:58E1
L:C$entities.c$564$2$134:58FB
L:C$entities.c$565$1$128:5905
L:C$entities.c$566$2$135:5917
L:C$entities.c$567$2$135:5962
L:C$entities.c$570$1$128:596A
L:C$entities.c$571$1$128:5971
L:XG$updateCharacter$0$0:5971
L:C$entities.c$576$1$128:5972
L:G$checkCollisionEntBlock$0$0:5972
L:C$entities.c$578$1$137:597F
L:C$entities.c$579$1$137:599C
L:C$entities.c$582$1$137:59B4
L:C$entities.c$586$2$138:59B9
L:C$entities.c$587$2$138:59D1
L:C$entities.c$592$1$137:59EA
L:C$entities.c$593$1$137:59EA
L:C$entities.c$590$2$138:59F6
L:C$entities.c$591$3$139:59FA
L:C$entities.c$592$4$140:5A00
L:C$entities.c$593$4$140:5A08
L:C$entities.c$594$4$140:5A0E
L:C$entities.c$596$4$140:5A19
L:C$entities.c$599$3$141:5A24
L:C$entities.c$600$4$142:5A2A
L:C$entities.c$594$1$137:5A2E
L:C$entities.c$601$4$142:5A32
L:C$entities.c$602$4$142:5A38
L:C$entities.c$604$4$142:5A43
L:C$entities.c$611$1$137:5A4C
L:C$entities.c$612$2$143:5A53
L:C$entities.c$613$2$143:5A72
L:C$entities.c$614$2$143:5A8E
L:C$entities.c$619$1$137:5A9F
L:C$entities.c$616$2$143:5AA9
L:C$entities.c$617$3$144:5AAF
L:C$entities.c$618$4$145:5AB5
L:C$entities.c$619$4$145:5ABD
L:C$entities.c$620$4$145:5AC1
L:C$entities.c$622$4$145:5AC9
L:C$entities.c$625$3$146:5AD1
L:C$entities.c$626$4$147:5AD9
L:C$entities.c$620$1$137:5AE0
L:C$entities.c$627$4$147:5AE4
L:C$entities.c$628$4$147:5AE8
L:C$entities.c$630$4$147:5AF0
L:C$entities.c$635$1$137:5AF6
L:C$entities.c$636$1$137:5AFD
L:XG$checkCollisionEntBlock$0$0:5AFD
L:C$entities.c$641$1$137:5AFE
L:G$isOverFloor$0$0:5AFE
L:C$entities.c$642$1$137:5B09
L:C$entities.c$643$1$149:5B0D
L:C$entities.c$646$1$149:5B1F
L:C$entities.c$647$2$150:5B27
L:C$entities.c$649$2$150:5B3E
L:C$entities.c$650$2$150:5B67
L:C$entities.c$651$2$150:5B7B
L:C$entities.c$658$1$149:5B7F
L:C$entities.c$659$1$149:5B86
L:XG$isOverFloor$0$0:5B86
L:C$entities.c$665$1$149:5B87
L:G$setEntityLocation$0$0:5B87
L:C$entities.c$667$1$152:5B90
L:C$entities.c$668$1$152:5BB3
L:C$entities.c$669$1$152:5BBB
L:C$entities.c$672$1$152:5BC3
L:C$entities.c$673$1$152:5BCE
L:C$entities.c$674$1$152:5BD9
L:C$entities.c$675$1$152:5BE4
L:C$entities.c$678$1$152:5BEF
L:C$entities.c$679$2$153:5BF5
L:C$entities.c$680$2$153:5C06
L:C$entities.c$681$2$153:5C0E
L:C$entities.c$683$1$152:5C1A
L:XG$setEntityLocation$0$0:5C1A
L:C$entities.c$688$1$152:5C1B
L:G$drawAnimEntity$0$0:5C1B
L:C$entities.c$690$1$155:5C25
L:C$entities.c$692$2$156:5C40
L:C$entities.c$693$2$156:5C42
L:C$entities.c$696$2$156:5C51
L:C$entities.c$699$2$156:5C8D
L:C$entities.c$701$2$156:5CB7
L:C$entities.c$703$1$155:5CC3
L:XG$drawAnimEntity$0$0:5CC3
L:C$entities.c$708$1$155:5CC4
L:G$drawBlockEntity$0$0:5CC4
L:C$entities.c$710$1$158:5CD1
L:C$entities.c$716$2$159:5CFB
L:C$entities.c$719$2$159:5D07
L:C$entities.c$721$1$158:5D46
L:C$entities.c$720$2$159:5D5D
L:C$entities.c$721$3$160:5D65
L:C$entities.c$722$3$160:5D71
L:C$entities.c$724$3$161:5D93
L:C$entities.c$725$4$162:5DB7
L:C$entities.c$726$4$162:5DC0
L:C$entities.c$728$4$163:5DD1
L:C$entities.c$729$4$163:5DD7
L:C$entities.c$733$3$161:5DDB
L:C$entities.c$734$3$161:5DDF
L:C$entities.c$738$2$159:5E02
L:C$entities.c$739$2$159:5E08
L:C$entities.c$741$2$159:5E2F
L:C$entities.c$743$1$158:5E3B
L:XG$drawBlockEntity$0$0:5E3B
L:C$entities.c$748$1$158:5E3C
L:C$entities.c$749$1$158:5E3C
L:G$drawAll$0$0:5E3C
L:C$entities.c$752$1$164:5E40
L:C$entities.c$753$1$164:5E5E
L:C$entities.c$756$1$164:5E6D
L:C$entities.c$757$1$164:5E75
L:XG$drawAll$0$0:5E75
L:C$entities.c$762$1$164:5E76
L:G$newSolidBlock$0$0:5E76
L:C$entities.c$763$1$164:5E80
L:C$entities.c$766$1$166:5E83
L:C$entities.c$768$2$167:5E8B
L:C$entities.c$769$2$167:5EA1
L:C$entities.c$770$2$167:5EA5
L:C$entities.c$771$2$167:5EAC
L:C$entities.c$772$2$167:5EB4
L:C$entities.c$773$2$167:5EBC
L:C$entities.c$774$2$167:5EC4
L:C$entities.c$775$2$167:5EDD
L:C$entities.c$778$1$166:5EE3
L:C$entities.c$777$2$167:5EE8
L:C$entities.c$778$2$167:5EEE
L:C$entities.c$779$2$167:5F49
L:C$entities.c$780$2$167:5F52
L:C$entities.c$782$2$167:5F5B
L:C$entities.c$785$1$166:5F5F
L:C$entities.c$786$1$166:5F65
L:XG$newSolidBlock$0$0:5F65
L:C$entities.c$791$1$166:5F66
L:G$destroyBlock$0$0:5F66
L:C$entities.c$792$1$169:5F6E
L:C$entities.c$795$1$169:5F76
L:C$entities.c$796$1$169:5F99
L:C$entities.c$799$1$169:5F9D
L:C$entities.c$800$1$169:5FA1
L:C$entities.c$803$1$169:5FD1
L:C$entities.c$804$1$169:5FD7
L:XG$destroyBlock$0$0:5FD7
L:C$entities.c$818$1$169:5FD8
L:G$randomCreateNewBlock$0$0:5FD8
L:C$entities.c$819$1$171:5FE1
L:C$entities.c$820$1$171:5FFF
L:C$entities.c$824$1$171:6003
L:C$entities.c$826$2$172:602F
L:C$entities.c$829$2$172:6046
L:C$entities.c$832$2$172:606B
L:C$entities.c$836$2$172:607C
L:C$entities.c$839$2$172:60A0
L:C$entities.c$840$2$172:60CB
L:C$entities.c$843$1$171:60CF
L:C$entities.c$844$1$171:60D6
L:XG$randomCreateNewBlock$0$0:60D6
L:C$random.c$55$0$0:60D7
L:C$random.c$56$1$2:60D7
L:G$getRandomUniform$0$0:60D7
L:C$random.c$57$1$2:60E7
L:C$random.c$58$1$2:60F1
L:XG$getRandomUniform$0$0:60F1
L:G$g_randUnif$0$0:60F2
L:G$G_scrollVel$0$0:71E9
L:G$G_platfColour$0$0:71EB
L:G$G_score$0$0:71EC
L:G$g_blocks$0$0:71EE
L:G$g_lastBlock$0$0:73DE
L:G$g_colMinBlock$0$0:73DF
L:G$g_colMaxBlock$0$0:73E0
L:G$g_movingBlocks$0$0:73E1
L:Lentities.checkCollisionEntBlock$c$1$137:73E2
L:G$g_nextRand$0$0:73E6

There is a detailed description of the CDB format at SDCC's Wiki.

That might be an interesting option. What do you think, @Devilmarkus, @Executioner, @arnoldemu?

@Devilmarkus: the .noi file is just a list of symbol identifiers used in the code that sdcc has compiled, along with their hexadecimal memory addresses. 0x is just a prefix for an hexadecimal value, like in C. So "DEF _function, 0x2500" means that the symbol _function refers to memory address 2500 in hex.
« Last Edit: 19:24, 16 August 15 by ronaldo »

Offline arnoldemu

  • Supporter
  • 6128 Plus
  • *
  • Posts: 5.335
  • Country: gb
    • Unofficial Amstrad WWW Resource
  • Liked: 2261
  • Likes Given: 3478
Re: Emulators with integrated debugging question
« Reply #17 on: 20:07, 16 August 15 »
@ronaldo: excellent!. I will try and support this.
My games. My Games
My website with coding examples: Unofficial Amstrad WWW Resource

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #18 on: 20:13, 16 August 15 »
@arnoldemu: I've done some tests. When --debug is used, all output files use a similar sintaxis to CDB. .noi, .map, .sym and .lst files define simbols for each line of code, identifying where do they start in the binary. This make it possible to create a C debugger, as executing each line of C code is possible because there is a symbol defining where they start and end, and CDB file tells where are variables stored, so it is possible to watch them too.

I think there is enough information to create great debugging tools, and great deal of work waiting for brave coders to tackle it  :D

Offline Executioner

  • Supporter
  • 6128 Plus
  • *
  • Posts: 783
  • Country: au
  • WinAPE Developer
    • WinAPE
  • Liked: 391
  • Likes Given: 60
Re: Emulators with integrated debugging question
« Reply #19 on: 00:26, 17 August 15 »
I had a look at the CDB spec last week. Although it would be easy enough to support, it's quite complicated and I don't want to slow down the next release any more at the moment. The other .noi files don't seem to be documented anywhere on the SDCC pages, although they would be much simpler to support.

Offline Executioner

  • Supporter
  • 6128 Plus
  • *
  • Posts: 783
  • Country: au
  • WinAPE Developer
    • WinAPE
  • Liked: 391
  • Likes Given: 60
Re: Emulators with integrated debugging question
« Reply #20 on: 02:31, 17 August 15 »
Since NOI files are so simple and WinAPE already has a Load option (right-click on the symbols list), I've included NOI support in this release.

Offline ronaldo

  • Dev
  • 6128 Plus
  • *****
  • Posts: 610
  • Country: es
    • Fremos Blog
  • Liked: 847
  • Likes Given: 797
Re: Emulators with integrated debugging question
« Reply #21 on: 09:16, 17 August 15 »
Really nice, @Executioner  :D . Noi files are not so detailed, but will be a huge improvement over having no symbols.

What do you think of supporting CDB format for future releases?

Offline Executioner

  • Supporter
  • 6128 Plus
  • *
  • Posts: 783
  • Country: au
  • WinAPE Developer
    • WinAPE
  • Liked: 391
  • Likes Given: 60
Re: Emulators with integrated debugging question
« Reply #22 on: 00:18, 03 September 15 »
What do you think of supporting CDB format for future releases?

I'll look into it, just importing symbols should be ok, supporting all the other stuff would be more difficult though.

Offline Wanderer

  • Supporter
  • CPC664
  • *
  • Posts: 60
  • Country: 00
  • CPC fan
  • Liked: 4
  • Likes Given: 21
Re: Emulators with integrated debugging question
« Reply #23 on: 00:20, 04 September 15 »
it's quite complicated and I don't want to slow down the next release any more at the moment

 :o :o :o

Next release!?!?!?!?! What next release?

Hopefully not another alpha. Maybe a beta? ;)
- Wanderer -

Offline TFM

  • Visit the mysteries of the CPC at www.futureos.de
  • Supporter
  • 6128 Plus
  • *
  • Posts: 9.899
  • Country: aq
  • Space Chicken for FutureOS is free!
    • index.php?action=treasury
    • FutureOS - The revolution on CPC!
  • Liked: 1976
  • Likes Given: 4650
Re: Emulators with integrated debugging question
« Reply #24 on: 00:29, 04 September 15 »
No, Feta this time. You can eat it!  ;)  Whatever, it will be delicious! I'm looking forward!  :)
TFM of FutureSoft
Also visit the CPC and Plus users favorite OS: FutureOS - The Revolution on CPC6128 and 6128Plus