nurpax / c64jasm

C64 6502 assembler in TypeScript
51 stars 14 forks source link

Support breakpoints #84

Closed micheldebree closed 3 years ago

micheldebree commented 3 years ago

My workflow with Kickass is to have it generate debuginfo when compiling, then launch C64Debugger. If I set a .break in my source, C64Debugger stops there.

With VICE I can do something similar, but it uses the symbols file that is generated. C64Debugger info has more fancy stuff in the debug info. The format is described in section 4.4 in de manual: https://sourceforge.net/projects/c64-debugger/ Besides breakpoints it has watches and pointers to the sourcecode etc.

A minimal solution with a symbols file being generated on compilation would be a good start. It would be cool to be able to develop it as a plugin, which could be done by adding the current memory location to the plugin context? If I have all the info I need in the context, I could probably make a plugin that generated debug information the way I want it.

nurpax commented 3 years ago

Plugins currently don't really have information about symbol locations and in general, this is the type of information that's completely known only after all the compile passes have been completed.

This might be something that's better supported as a built-in feature in c64jasm core. Not sure.. OTOH, some sort of "instrumentation" support with plugins might be useful if you want to insert emulator commands into source code. There could be other types than ".break".

I'd at least like to support VICE symbol files (esp. if c64debugger can read that). I'm open to either PRs or pointers to good docs on the format of these files. :)

I haven't done anything on this front myself, as my original plan was to add VSCode support for debugging. There is some support for this but it was kind of a PITA to implement robustly and I lost interest. Nowadays I use my own C64 emulator so this type of stuff kind of already works for me. :)

micheldebree commented 3 years ago

I did a little testing but I can't get C64debugger to use the VICE symbols file for breakpoints. Kickass generates a .vs file with labels, breakpoints and watches as a list of monitor commands.

In Vice you can load those with -moncommands xxx.vs. C64Debugger says it accepts vice command line options, but this one doesn't seem to work. Maybe because it disabled the vice monitor altogether.

The .vs file seems simple enough to create, the c64debugger debug info is more complicated, but maybe I can get away with leaving stuff out. I might give it a try when I find the time and energy. At the moment this is probably the only thing stopping me from switching to c64jasm because I like the fact that c64jasm is open source, fast and extensible with javascript.

P.S. what emulator is that? Curious now :)

nurpax commented 3 years ago

I'll look into it tonight. Got kind of curious about this stuff.

PS. The emulator. It's current more of a projection of my emulator dreams rather than a complete product. But it's a c64 emu that can be programmed in Lua. It implements hooks for debugging using various ways, but the cool thing I like about it is you can extend it in lua. For example, you can register traps that run at different hardware events like hitting a certain raster beam position, etc. Here's an example. I've never open-sourced it because it's pretty incomplete but I use it myself when I work on c64 stuff. Also it has extremely fast startup time (~100 ms maybe) and can be made to reload the c64 binary super fast.

image

nurpax commented 3 years ago

Hmm, seems to be working! :)

image

image

nurpax commented 3 years ago

@micheldebree Is there some manual for C64Debugger? I only found README.txt from the Linux version of the release package on SF. (my eyes are still burning just from looking at Sourceforge - I can't believe anyone is still using that site!)

VICE moncommands is supported for just "break" now. It also adds also symbols which in fact is really nice, I don't know why I didn't add this before! Would be happy to accept patches for C64Debugger support or can add it myself too, just need to find the docs on what format it uses. Examples of such debug info files would be good to have too.

micheldebree commented 3 years ago

Wow that's quick! The manual for c64debugger is somewhere between all the downloads at SF: https://sourceforge.net/projects/c64-debugger/files/C64%20Debugger%20Manual%20v0.64.56.pdf/download The format is explained in section 4.4

Here is an example from my project, with some arbitrary breakpoints and watches:

<C64debugger version="1.0">
   <Sources values="INDEX,FILE">
      0,/Users/michel/dev/github/big_angry_sprite/big_angry_sprite.asm
      1,KickAss.jar:/include/autoinclude.asm
   </Sources>

   <Segment name="Default" dest="" values="START,END,FILE_IDX,LINE1,COL1,LINE2,COL2">
      <Block name="Basic">
         $0801,$0802,1,56,2,56,6
         $0803,$0804,1,57,5,57,9
         $0805,$0805,1,58,5,58,9
         $0806,$0809,1,59,2,59,6
         $080a,$080a,1,60,2,60,6
         $080b,$080c,1,62,5,62,9
      </Block>
      <Block name="Main code">
         $080e,$080e,0,131,9,131,11
         $080f,$080f,0,133,9,133,11
         $0810,$0812,0,134,9,134,11
         $0813,$0814,0,72,9,72,11
         $0815,$0815,0,73,9,73,11
         $0816,$0817,0,75,9,75,11
         $0818,$0819,0,76,9,76,11
         $081a,$081b,0,77,9,77,11
         $081c,$081e,0,80,11,80,13
         $081f,$0821,0,81,11,81,13
         $0822,$0824,0,80,11,80,13
         $0825,$0827,0,81,11,81,13
         $0828,$082a,0,80,11,80,13
         $082b,$082d,0,81,11,81,13
         $082e,$0830,0,80,11,80,13
         $0831,$0833,0,81,11,81,13
         $0834,$0836,0,80,11,80,13
         $0837,$0839,0,81,11,81,13
         $083a,$083c,0,80,11,80,13
         $083d,$083f,0,81,11,81,13
         $0840,$0842,0,80,11,80,13
         $0843,$0845,0,81,11,81,13
         $0846,$0848,0,80,11,80,13
         $0849,$084b,0,81,11,81,13
         $084c,$084c,0,83,9,83,11
         $084d,$084e,0,84,9,84,11
         $084f,$084f,0,86,9,86,11
         $0850,$0851,0,87,9,87,11
         $0852,$0854,0,137,9,137,11
         $0855,$0856,0,138,9,138,11
         $0857,$0858,0,139,9,139,11
         $0859,$085a,0,141,9,141,11
         $085b,$085d,0,142,9,142,11
         $085e,$0860,0,143,9,143,11
         $0861,$0862,0,145,9,145,11
         $0863,$0865,0,146,9,146,11
         $0866,$0867,0,147,9,147,11
         $0868,$086a,0,148,9,148,11
         $086b,$086c,0,150,9,150,11
         $086d,$086f,0,151,9,151,11
         $0870,$0872,0,152,9,152,11
         $0873,$0874,0,153,9,153,11
         $0875,$0877,0,154,9,154,11
         $0878,$0878,0,155,9,155,11
         $0879,$087b,0,156,9,156,11
         $087c,$087d,0,158,9,158,11
         $087e,$0880,0,160,11,160,13
         $0881,$0883,0,160,11,160,13
         $0884,$0886,0,160,11,160,13
         $0887,$0889,0,160,11,160,13
         $088a,$088c,0,160,11,160,13
         $088d,$088f,0,160,11,160,13
         $0890,$0892,0,160,11,160,13
         $0893,$0895,0,160,11,160,13
         $0896,$0898,0,163,9,163,11
         $0899,$089a,0,166,9,166,11
         $089b,$089d,0,167,9,167,11
         $089e,$08a0,0,168,9,168,11
         $08a1,$08a2,0,172,12,172,14
         $08a3,$08a5,0,173,12,173,14
         $08a6,$08a7,0,172,12,172,14
         $08a8,$08aa,0,173,12,173,14
         $08ab,$08ac,0,172,12,172,14
         $08ad,$08af,0,173,12,173,14
         $08b0,$08b1,0,172,12,172,14
         $08b2,$08b4,0,173,12,173,14
         $08b5,$08b6,0,172,12,172,14
         $08b7,$08b9,0,173,12,173,14
         $08ba,$08bb,0,172,12,172,14
         $08bc,$08be,0,173,12,173,14
         $08bf,$08c0,0,172,12,172,14
         $08c1,$08c3,0,173,12,173,14
         $08c4,$08c5,0,172,12,172,14
         $08c6,$08c8,0,173,12,173,14
         $08c9,$08ca,0,176,9,176,11
         $08cb,$08cd,0,177,9,177,11
         $08ce,$08cf,0,103,5,103,7
         $08d0,$08d2,0,104,5,104,7
         $08d3,$08d4,0,105,5,105,7
         $08d5,$08d7,0,106,5,106,7
         $08d8,$08d9,0,107,5,107,7
         $08da,$08dc,0,108,5,108,7
         $08dd,$08de,0,181,9,181,11
         $08df,$08e1,0,182,9,182,11
         $08e2,$08e2,0,183,9,183,11
         $08e3,$08e5,0,185,9,185,11
         $08e6,$08e6,0,198,3,198,5
         $08e7,$08e8,0,200,3,200,5
         $08e9,$08eb,0,202,5,202,7
         $08ec,$08ee,0,202,5,202,7
         $08ef,$08f1,0,202,5,202,7
         $08f2,$08f4,0,202,5,202,7
         $08f5,$08f7,0,202,5,202,7
         $08f8,$08fa,0,202,5,202,7
         $08fb,$08fd,0,202,5,202,7
         $08fe,$0900,0,202,5,202,7
         $0901,$0902,0,103,5,103,7
         $0903,$0905,0,104,5,104,7
         $0906,$0907,0,105,5,105,7
         $0908,$090a,0,106,5,106,7
         $090b,$090c,0,107,5,107,7
         $090d,$090f,0,108,5,108,7
         $0910,$0912,0,93,3,93,5
         $0913,$0913,0,94,3,94,5
         $0914,$0914,0,64,5,64,7
         $0915,$0915,0,64,5,64,7
         $0916,$0916,0,64,5,64,7
         $0917,$0917,0,64,5,64,7
         $0918,$0918,0,64,5,64,7
         $0919,$0919,0,64,5,64,7
         $091a,$091a,0,64,5,64,7
         $091b,$091b,0,64,5,64,7
         $091c,$091c,0,64,5,64,7
         $091d,$091d,0,64,5,64,7
         $091e,$091e,0,64,5,64,7
         $091f,$091f,0,64,5,64,7
         $0920,$0920,0,64,5,64,7
         $0921,$0921,0,64,5,64,7
         $0922,$0922,0,64,5,64,7
         $0923,$0923,0,64,5,64,7
         $0924,$0926,0,215,7,215,9
         $0927,$0929,0,215,7,215,9
         $092a,$092c,0,215,7,215,9
         $092d,$092f,0,215,7,215,9
         $0930,$0932,0,215,7,215,9
         $0933,$0935,0,215,7,215,9
         $0936,$0938,0,215,7,215,9
         $0939,$093b,0,215,7,215,9
         $093c,$093c,0,198,3,198,5
         $093d,$093e,0,200,3,200,5
         $093f,$0941,0,202,5,202,7
         $0942,$0944,0,202,5,202,7
         $0945,$0947,0,202,5,202,7
         $0948,$094a,0,202,5,202,7
         $094b,$094d,0,202,5,202,7
         $094e,$0950,0,202,5,202,7
         $0951,$0953,0,202,5,202,7
         $0954,$0956,0,202,5,202,7
         $0957,$0959,0,245,9,245,11
         $095a,$095b,0,452,9,452,11
         $095c,$095e,0,453,9,453,11
         $095f,$095f,0,454,9,454,11
         $0960,$0962,0,456,9,456,11
         $0963,$0965,0,457,9,457,11
         $0966,$0966,0,458,9,458,11
         $0967,$0968,0,459,9,459,11
         $0969,$0969,0,460,9,460,11
         $096a,$096c,0,461,9,461,11
         $096d,$096e,0,103,5,103,7
         $096f,$0971,0,104,5,104,7
         $0972,$0973,0,105,5,105,7
         $0974,$0976,0,106,5,106,7
         $0977,$0978,0,107,5,107,7
         $0979,$097b,0,108,5,108,7
         $097c,$097e,0,93,3,93,5
         $097f,$097f,0,94,3,94,5
         $0980,$0980,0,64,5,64,7
         $0981,$0981,0,64,5,64,7
         $0982,$0982,0,64,5,64,7
         $0983,$0983,0,64,5,64,7
         $0984,$0984,0,64,5,64,7
         $0985,$0985,0,64,5,64,7
         $0986,$0986,0,64,5,64,7
         $0987,$0987,0,64,5,64,7
         $0988,$0988,0,64,5,64,7
         $0989,$0989,0,64,5,64,7
         $098a,$098a,0,64,5,64,7
         $098b,$098b,0,64,5,64,7
         $098c,$098c,0,64,5,64,7
         $098d,$098d,0,64,5,64,7
         $098e,$098e,0,64,5,64,7
         $098f,$098f,0,64,5,64,7
         $0990,$0990,0,64,5,64,7
         $0991,$0993,0,215,7,215,9
         $0994,$0996,0,215,7,215,9
         $0997,$0999,0,215,7,215,9
         $099a,$099c,0,215,7,215,9
         $099d,$099f,0,215,7,215,9
         $09a0,$09a2,0,215,7,215,9
         $09a3,$09a5,0,215,7,215,9
         $09a6,$09a8,0,215,7,215,9
         $09a9,$09a9,0,198,3,198,5
         $09aa,$09ab,0,200,3,200,5
         $09ac,$09ae,0,202,5,202,7
         $09af,$09b1,0,202,5,202,7
         $09b2,$09b4,0,202,5,202,7
         $09b5,$09b7,0,202,5,202,7
         $09b8,$09ba,0,202,5,202,7
         $09bb,$09bd,0,202,5,202,7
         $09be,$09c0,0,202,5,202,7
         $09c1,$09c3,0,202,5,202,7
         $09c4,$09c6,0,255,9,255,11
         $09c7,$09c8,0,452,9,452,11
         $09c9,$09cb,0,453,9,453,11
         $09cc,$09cc,0,454,9,454,11
         $09cd,$09cf,0,456,9,456,11
         $09d0,$09d2,0,457,9,457,11
         $09d3,$09d3,0,458,9,458,11
         $09d4,$09d5,0,459,9,459,11
         $09d6,$09d6,0,460,9,460,11
         $09d7,$09d9,0,461,9,461,11
         $09da,$09db,0,103,5,103,7
         $09dc,$09de,0,104,5,104,7
         $09df,$09e0,0,105,5,105,7
         $09e1,$09e3,0,106,5,106,7
         $09e4,$09e5,0,107,5,107,7
         $09e6,$09e8,0,108,5,108,7
         $09e9,$09eb,0,93,3,93,5
         $09ec,$09ec,0,94,3,94,5
         $09ed,$09ed,0,64,5,64,7
         $09ee,$09ee,0,64,5,64,7
         $09ef,$09ef,0,64,5,64,7
         $09f0,$09f0,0,64,5,64,7
         $09f1,$09f1,0,64,5,64,7
         $09f2,$09f2,0,64,5,64,7
         $09f3,$09f3,0,64,5,64,7
         $09f4,$09f4,0,64,5,64,7
         $09f5,$09f5,0,64,5,64,7
         $09f6,$09f6,0,64,5,64,7
         $09f7,$09f7,0,64,5,64,7
         $09f8,$09f8,0,64,5,64,7
         $09f9,$09f9,0,64,5,64,7
         $09fa,$09fa,0,64,5,64,7
         $09fb,$09fb,0,64,5,64,7
         $09fc,$09fc,0,64,5,64,7
         $09fd,$09ff,0,215,7,215,9
         $0a00,$0a02,0,215,7,215,9
         $0a03,$0a05,0,215,7,215,9
         $0a06,$0a08,0,215,7,215,9
         $0a09,$0a0b,0,215,7,215,9
         $0a0c,$0a0e,0,215,7,215,9
         $0a0f,$0a11,0,215,7,215,9
         $0a12,$0a14,0,215,7,215,9
         $0a15,$0a15,0,198,3,198,5
         $0a16,$0a17,0,200,3,200,5
         $0a18,$0a1a,0,202,5,202,7
         $0a1b,$0a1d,0,202,5,202,7
         $0a1e,$0a20,0,202,5,202,7
         $0a21,$0a23,0,202,5,202,7
         $0a24,$0a26,0,202,5,202,7
         $0a27,$0a29,0,202,5,202,7
         $0a2a,$0a2c,0,202,5,202,7
         $0a2d,$0a2f,0,202,5,202,7
         $0a30,$0a31,0,269,9,269,11
         $0a32,$0a33,0,270,9,270,11
         $0a34,$0a35,0,452,9,452,11
         $0a36,$0a38,0,453,9,453,11
         $0a39,$0a39,0,454,9,454,11
         $0a3a,$0a3c,0,456,9,456,11
         $0a3d,$0a3f,0,457,9,457,11
         $0a40,$0a40,0,458,9,458,11
         $0a41,$0a42,0,459,9,459,11
         $0a43,$0a43,0,460,9,460,11
         $0a44,$0a46,0,461,9,461,11
         $0a47,$0a48,0,273,9,273,11
         $0a49,$0a4b,0,274,9,274,11
         $0a4c,$0a4d,0,103,5,103,7
         $0a4e,$0a50,0,104,5,104,7
         $0a51,$0a52,0,105,5,105,7
         $0a53,$0a55,0,106,5,106,7
         $0a56,$0a57,0,107,5,107,7
         $0a58,$0a5a,0,108,5,108,7
         $0a5b,$0a5d,0,93,3,93,5
         $0a5e,$0a5e,0,94,3,94,5
         $0a5f,$0a5f,0,64,5,64,7
         $0a60,$0a60,0,64,5,64,7
         $0a61,$0a61,0,64,5,64,7
         $0a62,$0a62,0,64,5,64,7
         $0a63,$0a63,0,64,5,64,7
         $0a64,$0a64,0,64,5,64,7
         $0a65,$0a65,0,64,5,64,7
         $0a66,$0a66,0,64,5,64,7
         $0a67,$0a67,0,64,5,64,7
         $0a68,$0a68,0,64,5,64,7
         $0a69,$0a69,0,64,5,64,7
         $0a6a,$0a6a,0,64,5,64,7
         $0a6b,$0a6b,0,64,5,64,7
         $0a6c,$0a6c,0,64,5,64,7
         $0a6d,$0a6d,0,64,5,64,7
         $0a6e,$0a6e,0,64,5,64,7
         $0a6f,$0a71,0,215,7,215,9
         $0a72,$0a74,0,215,7,215,9
         $0a75,$0a77,0,215,7,215,9
         $0a78,$0a7a,0,215,7,215,9
         $0a7b,$0a7d,0,215,7,215,9
         $0a7e,$0a80,0,215,7,215,9
         $0a81,$0a83,0,215,7,215,9
         $0a84,$0a86,0,215,7,215,9
         $0a87,$0a87,0,198,3,198,5
         $0a88,$0a89,0,200,3,200,5
         $0a8a,$0a8c,0,202,5,202,7
         $0a8d,$0a8f,0,202,5,202,7
         $0a90,$0a92,0,202,5,202,7
         $0a93,$0a95,0,202,5,202,7
         $0a96,$0a98,0,202,5,202,7
         $0a99,$0a9b,0,202,5,202,7
         $0a9c,$0a9e,0,202,5,202,7
         $0a9f,$0aa1,0,202,5,202,7
         $0aa2,$0aa4,0,281,9,281,11
         $0aa5,$0aa6,0,452,9,452,11
         $0aa7,$0aa9,0,453,9,453,11
         $0aaa,$0aaa,0,454,9,454,11
         $0aab,$0aad,0,456,9,456,11
         $0aae,$0ab0,0,457,9,457,11
         $0ab1,$0ab1,0,458,9,458,11
         $0ab2,$0ab3,0,459,9,459,11
         $0ab4,$0ab4,0,460,9,460,11
         $0ab5,$0ab7,0,461,9,461,11
         $0ab8,$0ab9,0,103,5,103,7
         $0aba,$0abc,0,104,5,104,7
         $0abd,$0abe,0,105,5,105,7
         $0abf,$0ac1,0,106,5,106,7
         $0ac2,$0ac3,0,107,5,107,7
         $0ac4,$0ac6,0,108,5,108,7
         $0ac7,$0ac9,0,93,3,93,5
         $0aca,$0aca,0,94,3,94,5
         $0acb,$0acb,0,64,5,64,7
         $0acc,$0acc,0,64,5,64,7
         $0acd,$0acd,0,64,5,64,7
         $0ace,$0ace,0,64,5,64,7
         $0acf,$0acf,0,64,5,64,7
         $0ad0,$0ad0,0,64,5,64,7
         $0ad1,$0ad1,0,64,5,64,7
         $0ad2,$0ad2,0,64,5,64,7
         $0ad3,$0ad3,0,64,5,64,7
         $0ad4,$0ad4,0,64,5,64,7
         $0ad5,$0ad5,0,64,5,64,7
         $0ad6,$0ad6,0,64,5,64,7
         $0ad7,$0ad7,0,64,5,64,7
         $0ad8,$0ad8,0,64,5,64,7
         $0ad9,$0ad9,0,64,5,64,7
         $0ada,$0ada,0,64,5,64,7
         $0adb,$0add,0,215,7,215,9
         $0ade,$0ae0,0,215,7,215,9
         $0ae1,$0ae3,0,215,7,215,9
         $0ae4,$0ae6,0,215,7,215,9
         $0ae7,$0ae9,0,215,7,215,9
         $0aea,$0aec,0,215,7,215,9
         $0aed,$0aef,0,215,7,215,9
         $0af0,$0af2,0,215,7,215,9
         $0af3,$0af3,0,198,3,198,5
         $0af4,$0af5,0,200,3,200,5
         $0af6,$0af8,0,202,5,202,7
         $0af9,$0afb,0,202,5,202,7
         $0afc,$0afe,0,202,5,202,7
         $0aff,$0b01,0,202,5,202,7
         $0b02,$0b04,0,202,5,202,7
         $0b05,$0b07,0,202,5,202,7
         $0b08,$0b0a,0,202,5,202,7
         $0b0b,$0b0d,0,202,5,202,7
         $0b0e,$0b10,0,289,9,289,11
         $0b11,$0b12,0,103,5,103,7
         $0b13,$0b15,0,104,5,104,7
         $0b16,$0b17,0,105,5,105,7
         $0b18,$0b1a,0,106,5,106,7
         $0b1b,$0b1c,0,107,5,107,7
         $0b1d,$0b1f,0,108,5,108,7
         $0b20,$0b22,0,93,3,93,5
         $0b23,$0b23,0,94,3,94,5
         $0b24,$0b24,0,64,5,64,7
         $0b25,$0b25,0,64,5,64,7
         $0b26,$0b26,0,64,5,64,7
         $0b27,$0b27,0,64,5,64,7
         $0b28,$0b28,0,64,5,64,7
         $0b29,$0b29,0,64,5,64,7
         $0b2a,$0b2a,0,64,5,64,7
         $0b2b,$0b2b,0,64,5,64,7
         $0b2c,$0b2c,0,64,5,64,7
         $0b2d,$0b2d,0,64,5,64,7
         $0b2e,$0b2e,0,64,5,64,7
         $0b2f,$0b2f,0,64,5,64,7
         $0b30,$0b30,0,64,5,64,7
         $0b31,$0b31,0,64,5,64,7
         $0b32,$0b32,0,64,5,64,7
         $0b33,$0b33,0,64,5,64,7
         $0b34,$0b34,0,64,5,64,7
         $0b35,$0b37,0,215,7,215,9
         $0b38,$0b3a,0,215,7,215,9
         $0b3b,$0b3d,0,215,7,215,9
         $0b3e,$0b40,0,215,7,215,9
         $0b41,$0b43,0,215,7,215,9
         $0b44,$0b46,0,215,7,215,9
         $0b47,$0b49,0,215,7,215,9
         $0b4a,$0b4c,0,215,7,215,9
         $0b4d,$0b4d,0,198,3,198,5
         $0b4e,$0b4f,0,200,3,200,5
         $0b50,$0b52,0,202,5,202,7
         $0b53,$0b55,0,202,5,202,7
         $0b56,$0b58,0,202,5,202,7
         $0b59,$0b5b,0,202,5,202,7
         $0b5c,$0b5e,0,202,5,202,7
         $0b5f,$0b61,0,202,5,202,7
         $0b62,$0b64,0,202,5,202,7
         $0b65,$0b67,0,202,5,202,7
         $0b68,$0b69,0,103,5,103,7
         $0b6a,$0b6c,0,104,5,104,7
         $0b6d,$0b6e,0,105,5,105,7
         $0b6f,$0b71,0,106,5,106,7
         $0b72,$0b73,0,107,5,107,7
         $0b74,$0b76,0,108,5,108,7
         $0b77,$0b79,0,93,3,93,5
         $0b7a,$0b7a,0,94,3,94,5
         $0b7b,$0b7b,0,64,5,64,7
         $0b7c,$0b7c,0,64,5,64,7
         $0b7d,$0b7d,0,64,5,64,7
         $0b7e,$0b7e,0,64,5,64,7
         $0b7f,$0b7f,0,64,5,64,7
         $0b80,$0b80,0,64,5,64,7
         $0b81,$0b81,0,64,5,64,7
         $0b82,$0b82,0,64,5,64,7
         $0b83,$0b83,0,64,5,64,7
         $0b84,$0b84,0,64,5,64,7
         $0b85,$0b85,0,64,5,64,7
         $0b86,$0b86,0,64,5,64,7
         $0b87,$0b87,0,64,5,64,7
         $0b88,$0b88,0,64,5,64,7
         $0b89,$0b89,0,64,5,64,7
         $0b8a,$0b8a,0,64,5,64,7
         $0b8b,$0b8b,0,64,5,64,7
         $0b8c,$0b8e,0,215,7,215,9
         $0b8f,$0b91,0,215,7,215,9
         $0b92,$0b94,0,215,7,215,9
         $0b95,$0b97,0,215,7,215,9
         $0b98,$0b9a,0,215,7,215,9
         $0b9b,$0b9d,0,215,7,215,9
         $0b9e,$0ba0,0,215,7,215,9
         $0ba1,$0ba3,0,215,7,215,9
         $0ba4,$0ba4,0,198,3,198,5
         $0ba5,$0ba6,0,200,3,200,5
         $0ba7,$0ba9,0,202,5,202,7
         $0baa,$0bac,0,202,5,202,7
         $0bad,$0baf,0,202,5,202,7
         $0bb0,$0bb2,0,202,5,202,7
         $0bb3,$0bb5,0,202,5,202,7
         $0bb6,$0bb8,0,202,5,202,7
         $0bb9,$0bbb,0,202,5,202,7
         $0bbc,$0bbe,0,202,5,202,7
         $0bbf,$0bc0,0,103,5,103,7
         $0bc1,$0bc3,0,104,5,104,7
         $0bc4,$0bc5,0,105,5,105,7
         $0bc6,$0bc8,0,106,5,106,7
         $0bc9,$0bca,0,107,5,107,7
         $0bcb,$0bcd,0,108,5,108,7
         $0bce,$0bd0,0,93,3,93,5
         $0bd1,$0bd1,0,94,3,94,5
         $0bd2,$0bd2,0,64,5,64,7
         $0bd3,$0bd3,0,64,5,64,7
         $0bd4,$0bd4,0,64,5,64,7
         $0bd5,$0bd5,0,64,5,64,7
         $0bd6,$0bd6,0,64,5,64,7
         $0bd7,$0bd7,0,64,5,64,7
         $0bd8,$0bd8,0,64,5,64,7
         $0bd9,$0bd9,0,64,5,64,7
         $0bda,$0bda,0,64,5,64,7
         $0bdb,$0bdb,0,64,5,64,7
         $0bdc,$0bdc,0,64,5,64,7
         $0bdd,$0bdd,0,64,5,64,7
         $0bde,$0bde,0,64,5,64,7
         $0bdf,$0bdf,0,64,5,64,7
         $0be0,$0be0,0,64,5,64,7
         $0be1,$0be1,0,64,5,64,7
         $0be2,$0be4,0,215,7,215,9
         $0be5,$0be7,0,215,7,215,9
         $0be8,$0bea,0,215,7,215,9
         $0beb,$0bed,0,215,7,215,9
         $0bee,$0bf0,0,215,7,215,9
         $0bf1,$0bf3,0,215,7,215,9
         $0bf4,$0bf6,0,215,7,215,9
         $0bf7,$0bf9,0,215,7,215,9
         $0bfa,$0bfa,0,198,3,198,5
         $0bfb,$0bfc,0,200,3,200,5
         $0bfd,$0bff,0,202,5,202,7
         $0c00,$0c02,0,202,5,202,7
         $0c03,$0c05,0,202,5,202,7
         $0c06,$0c08,0,202,5,202,7
         $0c09,$0c0b,0,202,5,202,7
         $0c0c,$0c0e,0,202,5,202,7
         $0c0f,$0c11,0,202,5,202,7
         $0c12,$0c14,0,202,5,202,7
         $0c15,$0c16,0,103,5,103,7
         $0c17,$0c19,0,104,5,104,7
         $0c1a,$0c1b,0,105,5,105,7
         $0c1c,$0c1e,0,106,5,106,7
         $0c1f,$0c20,0,107,5,107,7
         $0c21,$0c23,0,108,5,108,7
         $0c24,$0c26,0,93,3,93,5
         $0c27,$0c27,0,94,3,94,5
         $0c28,$0c28,0,64,5,64,7
         $0c29,$0c29,0,64,5,64,7
         $0c2a,$0c2a,0,64,5,64,7
         $0c2b,$0c2b,0,64,5,64,7
         $0c2c,$0c2c,0,64,5,64,7
         $0c2d,$0c2d,0,64,5,64,7
         $0c2e,$0c2e,0,64,5,64,7
         $0c2f,$0c2f,0,64,5,64,7
         $0c30,$0c30,0,64,5,64,7
         $0c31,$0c31,0,64,5,64,7
         $0c32,$0c32,0,64,5,64,7
         $0c33,$0c33,0,64,5,64,7
         $0c34,$0c34,0,64,5,64,7
         $0c35,$0c35,0,64,5,64,7
         $0c36,$0c36,0,64,5,64,7
         $0c37,$0c37,0,64,5,64,7
         $0c38,$0c38,0,64,5,64,7
         $0c39,$0c3b,0,215,7,215,9
         $0c3c,$0c3e,0,215,7,215,9
         $0c3f,$0c41,0,215,7,215,9
         $0c42,$0c44,0,215,7,215,9
         $0c45,$0c47,0,215,7,215,9
         $0c48,$0c4a,0,215,7,215,9
         $0c4b,$0c4d,0,215,7,215,9
         $0c4e,$0c50,0,215,7,215,9
         $0c51,$0c51,0,198,3,198,5
         $0c52,$0c53,0,200,3,200,5
         $0c54,$0c56,0,202,5,202,7
         $0c57,$0c59,0,202,5,202,7
         $0c5a,$0c5c,0,202,5,202,7
         $0c5d,$0c5f,0,202,5,202,7
         $0c60,$0c62,0,202,5,202,7
         $0c63,$0c65,0,202,5,202,7
         $0c66,$0c68,0,202,5,202,7
         $0c69,$0c6b,0,202,5,202,7
         $0c6c,$0c6e,0,310,9,310,11
         $0c6f,$0c70,0,103,5,103,7
         $0c71,$0c73,0,104,5,104,7
         $0c74,$0c75,0,105,5,105,7
         $0c76,$0c78,0,106,5,106,7
         $0c79,$0c7a,0,107,5,107,7
         $0c7b,$0c7d,0,108,5,108,7
         $0c7e,$0c80,0,93,3,93,5
         $0c81,$0c81,0,94,3,94,5
         $0c82,$0c82,0,64,5,64,7
         $0c83,$0c83,0,64,5,64,7
         $0c84,$0c84,0,64,5,64,7
         $0c85,$0c85,0,64,5,64,7
         $0c86,$0c86,0,64,5,64,7
         $0c87,$0c87,0,64,5,64,7
         $0c88,$0c88,0,64,5,64,7
         $0c89,$0c89,0,64,5,64,7
         $0c8a,$0c8a,0,64,5,64,7
         $0c8b,$0c8b,0,64,5,64,7
         $0c8c,$0c8c,0,64,5,64,7
         $0c8d,$0c8d,0,64,5,64,7
         $0c8e,$0c8e,0,64,5,64,7
         $0c8f,$0c8f,0,64,5,64,7
         $0c90,$0c90,0,64,5,64,7
         $0c91,$0c91,0,64,5,64,7
         $0c92,$0c92,0,64,5,64,7
         $0c93,$0c95,0,215,7,215,9
         $0c96,$0c98,0,215,7,215,9
         $0c99,$0c9b,0,215,7,215,9
         $0c9c,$0c9e,0,215,7,215,9
         $0c9f,$0ca1,0,215,7,215,9
         $0ca2,$0ca4,0,215,7,215,9
         $0ca5,$0ca7,0,215,7,215,9
         $0ca8,$0caa,0,215,7,215,9
         $0cab,$0cad,0,316,9,316,11
         $0cae,$0caf,0,103,5,103,7
         $0cb0,$0cb2,0,104,5,104,7
         $0cb3,$0cb4,0,105,5,105,7
         $0cb5,$0cb7,0,106,5,106,7
         $0cb8,$0cb9,0,107,5,107,7
         $0cba,$0cbc,0,108,5,108,7
         $0cbd,$0cbf,0,93,3,93,5
         $0cc0,$0cc0,0,94,3,94,5
         $0cc1,$0cc2,0,328,9,328,11
         $0cc3,$0cc5,0,329,9,329,11
         $0cc6,$0cc7,0,331,9,331,11
         $0cc8,$0cca,0,333,11,333,13
         $0ccb,$0ccd,0,333,11,333,13
         $0cce,$0cd0,0,333,11,333,13
         $0cd1,$0cd3,0,333,11,333,13
         $0cd4,$0cd6,0,333,11,333,13
         $0cd7,$0cd9,0,333,11,333,13
         $0cda,$0cdc,0,333,11,333,13
         $0cdd,$0cdf,0,333,11,333,13
         $0ce0,$0ce1,0,103,5,103,7
         $0ce2,$0ce4,0,104,5,104,7
         $0ce5,$0ce6,0,105,5,105,7
         $0ce7,$0ce9,0,106,5,106,7
         $0cea,$0ceb,0,107,5,107,7
         $0cec,$0cee,0,108,5,108,7
         $0cef,$0cf1,0,93,3,93,5
         $0cf2,$0cf2,0,94,3,94,5
         $0cf3,$0cf3,0,351,9,351,13
         $0cf4,$0cf6,0,356,11,356,13
         $0cf7,$0cf9,0,357,11,357,13
         $0cfa,$0cfc,0,356,11,356,13
         $0cfd,$0cff,0,357,11,357,13
         $0d00,$0d02,0,356,11,356,13
         $0d03,$0d05,0,357,11,357,13
         $0d06,$0d08,0,356,11,356,13
         $0d09,$0d0b,0,357,11,357,13
         $0d0c,$0d0e,0,356,11,356,13
         $0d0f,$0d11,0,357,11,357,13
         $0d12,$0d14,0,356,11,356,13
         $0d15,$0d17,0,357,11,357,13
         $0d18,$0d1a,0,356,11,356,13
         $0d1b,$0d1d,0,357,11,357,13
         $0d1e,$0d20,0,356,11,356,13
         $0d21,$0d23,0,357,11,357,13
         $0d24,$0d26,0,365,9,365,11
         $0d27,$0d28,0,366,9,366,11
         $0d29,$0d2a,0,367,9,367,11
         $0d2b,$0d2d,0,368,9,368,11
         $0d2e,$0d30,0,369,9,369,11
         $0d31,$0d33,0,371,9,371,11
         $0d34,$0d36,0,373,9,373,11
         $0d37,$0d39,0,376,11,376,13
         $0d3a,$0d3a,0,377,11,377,13
         $0d3b,$0d3d,0,378,11,378,13
         $0d3e,$0d40,0,379,11,379,13
         $0d41,$0d43,0,376,11,376,13
         $0d44,$0d44,0,377,11,377,13
         $0d45,$0d47,0,378,11,378,13
         $0d48,$0d4a,0,379,11,379,13
         $0d4b,$0d4d,0,376,11,376,13
         $0d4e,$0d4e,0,377,11,377,13
         $0d4f,$0d51,0,378,11,378,13
         $0d52,$0d54,0,379,11,379,13
         $0d55,$0d57,0,376,11,376,13
         $0d58,$0d58,0,377,11,377,13
         $0d59,$0d5b,0,378,11,378,13
         $0d5c,$0d5e,0,379,11,379,13
         $0d5f,$0d61,0,376,11,376,13
         $0d62,$0d62,0,377,11,377,13
         $0d63,$0d65,0,378,11,378,13
         $0d66,$0d68,0,379,11,379,13
         $0d69,$0d6b,0,376,11,376,13
         $0d6c,$0d6c,0,377,11,377,13
         $0d6d,$0d6f,0,378,11,378,13
         $0d70,$0d72,0,379,11,379,13
         $0d73,$0d75,0,376,11,376,13
         $0d76,$0d76,0,377,11,377,13
         $0d77,$0d79,0,378,11,378,13
         $0d7a,$0d7c,0,379,11,379,13
         $0d7d,$0d7f,0,376,11,376,13
         $0d80,$0d80,0,377,11,377,13
         $0d81,$0d83,0,378,11,378,13
         $0d84,$0d86,0,379,11,379,13
         $0d87,$0d88,0,383,9,383,11
         $0d89,$0d8b,0,384,9,384,11
         $0d8c,$0d8e,0,385,9,385,11
         $0d8f,$0d8f,0,386,9,386,11
         $0d90,$0d92,0,387,9,387,11
         $0d93,$0d95,0,388,9,388,11
         $0d96,$0d97,0,389,9,389,11
         $0d98,$0d9a,0,390,9,390,11
         $0d9b,$0d9d,0,391,9,391,11
         $0d9e,$0da0,0,392,9,392,11
         $0da1,$0da3,0,393,9,393,11
         $0da4,$0da6,0,394,9,394,11
         $0da7,$0da9,0,395,9,395,11
         $0daa,$0dab,0,103,5,103,7
         $0dac,$0dae,0,104,5,104,7
         $0daf,$0db0,0,105,5,105,7
         $0db1,$0db3,0,106,5,106,7
         $0db4,$0db5,0,107,5,107,7
         $0db6,$0db8,0,108,5,108,7
         $0db9,$0dbb,0,93,3,93,5
         $0dbc,$0dbc,0,94,3,94,5
         $0dbd,$0dbf,0,402,9,402,11
         $0dc0,$0dc1,0,403,9,403,11
         $0dc2,$0dc3,0,405,9,405,11
         $0dc4,$0dc6,0,406,9,406,11
         $0dc7,$0dc9,0,413,9,413,11
         $0dca,$0dca,0,414,9,414,11
         $0dcb,$0dcd,0,418,9,418,11
         $0dce,$0dcf,0,419,9,419,11
         $0dd0,$0dd1,0,420,9,420,11
         $0dd2,$0dd2,0,421,9,421,11
         $0dd3,$0dd4,0,427,9,427,11
         $0dd5,$0dd7,0,428,9,428,11
         $0dd8,$0dda,0,429,9,429,11
         $0ddb,$0ddc,0,430,9,430,11
         $0ddd,$0ddf,0,431,9,431,11
         $0de0,$0de2,0,433,9,433,11
         $0de3,$0de5,0,434,9,434,11
         $0de6,$0de7,0,435,9,435,11
         $0de8,$0de9,0,436,9,436,11
         $0dea,$0deb,0,437,9,437,11
         $0dec,$0dee,0,438,9,438,11
         $0def,$0def,0,440,9,440,11
         $0df0,$0df2,0,470,9,470,11
         $0df3,$0df5,0,471,9,471,11
         $0df6,$0df8,0,472,9,472,11
         $0df9,$0dfb,0,473,9,473,11
         $0dfc,$0dfe,0,476,9,476,11
         $0dff,$0e00,0,477,9,477,11
         $0e01,$0e02,0,478,9,478,11
         $0e03,$0e05,0,479,9,479,11
         $0e06,$0e07,0,480,9,480,11
         $0e08,$0e0a,0,481,9,481,11
         $0e0b,$0e0d,0,482,9,482,11
         $0e0e,$0e0e,0,484,9,484,11
         $0e0f,$0e11,0,486,9,486,11
         $0e12,$0e14,0,487,9,487,11
         $0e15,$0e17,0,488,9,488,11
         $0e18,$0e1a,0,489,9,489,11
         $0e1b,$0e1c,0,490,9,490,11
         $0e1d,$0e1e,0,491,9,491,11
         $0e1f,$0e21,0,494,9,494,11
         $0e22,$0e24,0,496,9,496,11
         $0e25,$0e25,0,497,9,497,11
         $0e26,$0e26,0,498,9,498,11
         $0e27,$0e27,0,499,9,499,11
         $0e28,$0e28,0,500,9,500,11
         $0e29,$0e2a,0,501,9,501,11
         $0e2b,$0e2b,0,502,9,502,11
         $0e2c,$0e5e,0,505,1,505,5
         $0e5f,$0ea6,0,506,1,506,5
         $0ea7,$0f0f,0,507,1,507,5
         $0f10,$0f69,0,508,1,508,5
         $0f6a,$0fc0,0,509,1,509,5
         $0fc1,$1023,0,510,1,510,5
         $1024,$104b,0,511,1,511,5
         $104c,$10c5,0,512,1,512,5
         $10c6,$1125,0,513,1,513,5
         $1126,$118d,0,514,1,514,5
         $118e,$11d3,0,515,1,515,5
         $11d4,$1211,0,516,1,516,5
         $1212,$1238,0,517,1,517,5
         $1239,$1239,0,518,1,518,5
         $123a,$123a,0,524,7,524,11
         $123b,$123b,0,524,7,524,11
         $123c,$123c,0,524,7,524,11
         $123d,$123d,0,524,7,524,11
         $123e,$123e,0,524,7,524,11
         $123f,$123f,0,524,7,524,11
         $1240,$1240,0,524,7,524,11
         $1241,$1241,0,524,7,524,11
         $1242,$1242,0,524,7,524,11
         $1243,$1243,0,524,7,524,11
         $1244,$1244,0,524,7,524,11
         $1245,$1245,0,524,7,524,11
         $1246,$1246,0,524,7,524,11
         $1247,$1247,0,524,7,524,11
         $1248,$1248,0,524,7,524,11
         $1249,$1249,0,524,7,524,11
         $124a,$124a,0,524,7,524,11
         $124b,$124b,0,524,7,524,11
         $124c,$124c,0,524,7,524,11
         $124d,$124d,0,524,7,524,11
         $124e,$124e,0,524,7,524,11
         $124f,$124f,0,524,7,524,11
         $1250,$1250,0,524,7,524,11
         $1251,$1251,0,524,7,524,11
         $1252,$1252,0,524,7,524,11
         $1253,$1253,0,524,7,524,11
         $1254,$1254,0,524,7,524,11
         $1255,$1255,0,524,7,524,11
         $1256,$1256,0,524,7,524,11
         $1257,$1257,0,524,7,524,11
         $1258,$1258,0,524,7,524,11
         $1259,$1259,0,524,7,524,11
         $125a,$125a,0,524,7,524,11
         $125b,$125b,0,524,7,524,11
         $125c,$125c,0,524,7,524,11
         $125d,$125d,0,524,7,524,11
         $125e,$125e,0,524,7,524,11
         $125f,$125f,0,524,7,524,11
         $1260,$1260,0,524,7,524,11
         $1261,$1261,0,524,7,524,11
         $1262,$1262,0,524,7,524,11
         $1263,$1263,0,524,7,524,11
         $1264,$1264,0,530,7,530,11
         $1265,$1265,0,530,7,530,11
         $1266,$1266,0,530,7,530,11
         $1267,$1267,0,530,7,530,11
         $1268,$1268,0,530,7,530,11
         $1269,$1269,0,530,7,530,11
         $126a,$126a,0,530,7,530,11
         $126b,$126b,0,530,7,530,11
         $126c,$126c,0,530,7,530,11
         $126d,$126d,0,530,7,530,11
         $126e,$126e,0,530,7,530,11
         $126f,$126f,0,530,7,530,11
         $1270,$1270,0,530,7,530,11
         $1271,$1271,0,530,7,530,11
         $1272,$1272,0,530,7,530,11
         $1273,$1273,0,530,7,530,11
         $1274,$1274,0,530,7,530,11
         $1275,$1275,0,530,7,530,11
         $1276,$1276,0,530,7,530,11
         $1277,$1277,0,530,7,530,11
         $1278,$1278,0,530,7,530,11
         $1279,$1279,0,530,7,530,11
         $127a,$127a,0,530,7,530,11
         $127b,$127b,0,530,7,530,11
         $127c,$127c,0,530,7,530,11
         $127d,$127d,0,530,7,530,11
         $127e,$127e,0,530,7,530,11
         $127f,$127f,0,530,7,530,11
         $1280,$1280,0,530,7,530,11
         $1281,$1281,0,530,7,530,11
         $1282,$1282,0,530,7,530,11
         $1283,$1283,0,530,7,530,11
         $1284,$1284,0,530,7,530,11
         $1285,$1285,0,530,7,530,11
         $1286,$1286,0,530,7,530,11
         $1287,$1287,0,530,7,530,11
         $1288,$1288,0,530,7,530,11
         $1289,$1289,0,530,7,530,11
         $128a,$128a,0,530,7,530,11
         $128b,$128b,0,530,7,530,11
         $128c,$128c,0,530,7,530,11
         $128d,$128d,0,530,7,530,11
         $128e,$128e,0,539,6,539,10
         $128f,$128f,0,539,6,539,10
         $1290,$1290,0,539,6,539,10
         $1291,$1291,0,539,6,539,10
         $1292,$1292,0,539,6,539,10
         $1293,$1293,0,539,6,539,10
         $1294,$1294,0,539,6,539,10
         $1295,$1295,0,539,6,539,10
         $1296,$1296,0,539,6,539,10
         $1297,$1297,0,539,6,539,10
         $1298,$1298,0,539,6,539,10
         $1299,$1299,0,539,6,539,10
         $129a,$129a,0,539,6,539,10
         $129b,$129b,0,539,6,539,10
         $129c,$129c,0,539,6,539,10
         $129d,$129d,0,539,6,539,10
         $129e,$129e,0,539,6,539,10
         $129f,$129f,0,539,6,539,10
         $12a0,$12a0,0,539,6,539,10
         $12a1,$12a1,0,539,6,539,10
         $12a2,$12a2,0,539,6,539,10
         $12a3,$12a3,0,539,6,539,10
         $12a4,$12a4,0,539,6,539,10
         $12a5,$12a5,0,539,6,539,10
         $12a6,$12a6,0,539,6,539,10
         $12a7,$12a7,0,539,6,539,10
         $12a8,$12a8,0,539,6,539,10
         $12a9,$12a9,0,539,6,539,10
         $12aa,$12aa,0,539,6,539,10
         $12ab,$12ab,0,539,6,539,10
         $12ac,$12ac,0,539,6,539,10
         $12ad,$12ad,0,539,6,539,10
         $12ae,$12ae,0,539,6,539,10
         $12af,$12af,0,539,6,539,10
         $12b0,$12b0,0,539,6,539,10
         $12b1,$12b1,0,539,6,539,10
         $12b2,$12b2,0,539,6,539,10
         $12b3,$12b3,0,539,6,539,10
         $12b4,$12b4,0,539,6,539,10
         $12b5,$12b5,0,539,6,539,10
         $12b6,$12b6,0,539,6,539,10
         $12b7,$12b7,0,539,6,539,10
         $12b8,$12b8,0,539,6,539,10
         $12b9,$12b9,0,539,6,539,10
         $12ba,$12ba,0,539,6,539,10
         $12bb,$12bb,0,539,6,539,10
         $12bc,$12bc,0,539,6,539,10
         $12bd,$12bd,0,539,6,539,10
         $12be,$12be,0,539,6,539,10
         $12bf,$12bf,0,539,6,539,10
         $12c0,$12c0,0,539,6,539,10
         $12c1,$12c1,0,539,6,539,10
         $12c2,$12c2,0,539,6,539,10
         $12c3,$12c3,0,539,6,539,10
         $12c4,$12c4,0,539,6,539,10
         $12c5,$12c5,0,539,6,539,10
         $12c6,$12c6,0,539,6,539,10
         $12c7,$12c7,0,539,6,539,10
         $12c8,$12c8,0,539,6,539,10
         $12c9,$12c9,0,539,6,539,10
         $12ca,$12ca,0,539,6,539,10
         $12cb,$12cb,0,539,6,539,10
         $12cc,$12cc,0,539,6,539,10
         $12cd,$12cd,0,539,6,539,10
         $12ce,$12ce,0,539,6,539,10
         $12cf,$12cf,0,539,6,539,10
         $12d0,$12d0,0,539,6,539,10
         $12d1,$12d1,0,539,6,539,10
         $12d2,$12d2,0,539,6,539,10
         $12d3,$12d3,0,539,6,539,10
         $12d4,$12d4,0,539,6,539,10
         $12d5,$12d5,0,539,6,539,10
         $12d6,$12d6,0,539,6,539,10
         $12d7,$12d7,0,539,6,539,10
         $12d8,$12d8,0,539,6,539,10
         $12d9,$12d9,0,539,6,539,10
         $12da,$12da,0,539,6,539,10
         $12db,$12db,0,539,6,539,10
         $12dc,$12dc,0,539,6,539,10
         $12dd,$12dd,0,539,6,539,10
         $12de,$12de,0,539,6,539,10
         $12df,$12df,0,539,6,539,10
         $12e0,$12e0,0,539,6,539,10
         $12e1,$12e1,0,539,6,539,10
         $12e2,$12e2,0,539,6,539,10
         $12e3,$12e3,0,539,6,539,10
         $12e4,$12e4,0,539,6,539,10
         $12e5,$12e5,0,539,6,539,10
         $12e6,$12e6,0,539,6,539,10
         $12e7,$12e7,0,539,6,539,10
         $12e8,$12e8,0,539,6,539,10
         $12e9,$12e9,0,539,6,539,10
         $12ea,$12ea,0,539,6,539,10
         $12eb,$12eb,0,539,6,539,10
         $12ec,$12ec,0,539,6,539,10
         $12ed,$12ed,0,539,6,539,10
         $12ee,$12ee,0,539,6,539,10
         $12ef,$12ef,0,539,6,539,10
         $12f0,$12f0,0,539,6,539,10
         $12f1,$12f1,0,539,6,539,10
         $12f2,$12f2,0,539,6,539,10
         $12f3,$12f3,0,539,6,539,10
         $12f4,$12f4,0,539,6,539,10
         $12f5,$12f5,0,539,6,539,10
         $12f6,$12f6,0,539,6,539,10
         $12f7,$12f7,0,539,6,539,10
         $12f8,$12f8,0,539,6,539,10
         $12f9,$12f9,0,539,6,539,10
         $12fa,$12fa,0,539,6,539,10
         $12fb,$12fb,0,539,6,539,10
         $12fc,$12fc,0,539,6,539,10
         $12fd,$12fd,0,539,6,539,10
         $12fe,$12fe,0,539,6,539,10
         $12ff,$12ff,0,539,6,539,10
         $1300,$1300,0,539,6,539,10
         $1301,$1301,0,539,6,539,10
         $1302,$1302,0,539,6,539,10
         $1303,$1303,0,539,6,539,10
         $1304,$1304,0,539,6,539,10
         $1305,$1305,0,539,6,539,10
         $1306,$1306,0,539,6,539,10
         $1307,$1307,0,539,6,539,10
         $1308,$1308,0,539,6,539,10
         $1309,$1309,0,539,6,539,10
         $130a,$130a,0,539,6,539,10
         $130b,$130b,0,539,6,539,10
         $130c,$130c,0,539,6,539,10
         $130d,$130d,0,539,6,539,10
         $130e,$130e,0,543,6,543,10
         $130f,$130f,0,543,6,543,10
         $1310,$1310,0,543,6,543,10
         $1311,$1311,0,543,6,543,10
         $1312,$1312,0,543,6,543,10
         $1313,$1313,0,543,6,543,10
         $1314,$1314,0,543,6,543,10
         $1315,$1315,0,543,6,543,10
         $1316,$1316,0,543,6,543,10
         $1317,$1317,0,543,6,543,10
         $1318,$1318,0,543,6,543,10
         $1319,$1319,0,543,6,543,10
         $131a,$131a,0,543,6,543,10
         $131b,$131b,0,543,6,543,10
         $131c,$131c,0,543,6,543,10
         $131d,$131d,0,543,6,543,10
         $131e,$131e,0,543,6,543,10
         $131f,$131f,0,543,6,543,10
         $1320,$1320,0,543,6,543,10
         $1321,$1321,0,543,6,543,10
         $1322,$1322,0,543,6,543,10
         $1323,$1323,0,543,6,543,10
         $1324,$1324,0,543,6,543,10
         $1325,$1325,0,543,6,543,10
         $1326,$1326,0,543,6,543,10
         $1327,$1327,0,543,6,543,10
         $1328,$1328,0,543,6,543,10
         $1329,$1329,0,543,6,543,10
         $132a,$132a,0,543,6,543,10
         $132b,$132b,0,543,6,543,10
         $132c,$132c,0,543,6,543,10
         $132d,$132d,0,543,6,543,10
         $132e,$132e,0,543,6,543,10
         $132f,$132f,0,543,6,543,10
         $1330,$1330,0,543,6,543,10
         $1331,$1331,0,543,6,543,10
         $1332,$1332,0,543,6,543,10
         $1333,$1333,0,543,6,543,10
         $1334,$1334,0,543,6,543,10
         $1335,$1335,0,543,6,543,10
         $1336,$1336,0,543,6,543,10
         $1337,$1337,0,543,6,543,10
         $1338,$1338,0,543,6,543,10
         $1339,$1339,0,543,6,543,10
         $133a,$133a,0,543,6,543,10
         $133b,$133b,0,543,6,543,10
         $133c,$133c,0,543,6,543,10
         $133d,$133d,0,543,6,543,10
         $133e,$133e,0,543,6,543,10
         $133f,$133f,0,543,6,543,10
         $1340,$1340,0,543,6,543,10
         $1341,$1341,0,543,6,543,10
         $1342,$1342,0,543,6,543,10
         $1343,$1343,0,543,6,543,10
         $1344,$1344,0,543,6,543,10
         $1345,$1345,0,543,6,543,10
         $1346,$1346,0,543,6,543,10
         $1347,$1347,0,543,6,543,10
         $1348,$1348,0,543,6,543,10
         $1349,$1349,0,543,6,543,10
         $134a,$134a,0,543,6,543,10
         $134b,$134b,0,543,6,543,10
         $134c,$134c,0,543,6,543,10
         $134d,$134d,0,543,6,543,10
         $134e,$134e,0,543,6,543,10
         $134f,$134f,0,543,6,543,10
         $1350,$1350,0,543,6,543,10
         $1351,$1351,0,543,6,543,10
         $1352,$1352,0,543,6,543,10
         $1353,$1353,0,543,6,543,10
         $1354,$1354,0,543,6,543,10
         $1355,$1355,0,543,6,543,10
         $1356,$1356,0,543,6,543,10
         $1357,$1357,0,543,6,543,10
         $1358,$1358,0,543,6,543,10
         $1359,$1359,0,543,6,543,10
         $135a,$135a,0,543,6,543,10
         $135b,$135b,0,543,6,543,10
         $135c,$135c,0,543,6,543,10
         $135d,$135d,0,543,6,543,10
         $135e,$135e,0,543,6,543,10
         $135f,$135f,0,543,6,543,10
         $1360,$1360,0,543,6,543,10
         $1361,$1361,0,543,6,543,10
         $1362,$1362,0,543,6,543,10
         $1363,$1363,0,543,6,543,10
         $1364,$1364,0,543,6,543,10
         $1365,$1365,0,543,6,543,10
         $1366,$1366,0,543,6,543,10
         $1367,$1367,0,543,6,543,10
         $1368,$1368,0,543,6,543,10
         $1369,$1369,0,543,6,543,10
         $136a,$136a,0,543,6,543,10
         $136b,$136b,0,543,6,543,10
         $136c,$136c,0,543,6,543,10
         $136d,$136d,0,543,6,543,10
         $136e,$136e,0,543,6,543,10
         $136f,$136f,0,543,6,543,10
         $1370,$1370,0,543,6,543,10
         $1371,$1371,0,543,6,543,10
         $1372,$1372,0,543,6,543,10
         $1373,$1373,0,543,6,543,10
         $1374,$1374,0,543,6,543,10
         $1375,$1375,0,543,6,543,10
         $1376,$1376,0,543,6,543,10
         $1377,$1377,0,543,6,543,10
         $1378,$1378,0,543,6,543,10
         $1379,$1379,0,543,6,543,10
         $137a,$137a,0,543,6,543,10
         $137b,$137b,0,543,6,543,10
         $137c,$137c,0,543,6,543,10
         $137d,$137d,0,543,6,543,10
         $137e,$137e,0,543,6,543,10
         $137f,$137f,0,543,6,543,10
         $1380,$1380,0,543,6,543,10
         $1381,$1381,0,543,6,543,10
         $1382,$1382,0,543,6,543,10
         $1383,$1383,0,543,6,543,10
         $1384,$1384,0,543,6,543,10
         $1385,$1385,0,543,6,543,10
         $1386,$1386,0,543,6,543,10
         $1387,$1387,0,543,6,543,10
         $1388,$1388,0,543,6,543,10
         $1389,$1389,0,543,6,543,10
         $138a,$138a,0,543,6,543,10
         $138b,$138b,0,543,6,543,10
         $138c,$138c,0,543,6,543,10
         $138d,$138d,0,543,6,543,10
         $138e,$138f,0,581,9,581,11
         $1390,$1392,0,582,9,582,11
         $1393,$1394,0,584,9,584,11
         $1395,$1397,0,585,9,585,11
         $1398,$1399,0,209,7,209,9
         $139a,$139c,0,210,7,210,9
         $139d,$139e,0,209,7,209,9
         $139f,$13a1,0,210,7,210,9
         $13a2,$13a3,0,209,7,209,9
         $13a4,$13a6,0,210,7,210,9
         $13a7,$13a8,0,209,7,209,9
         $13a9,$13ab,0,210,7,210,9
         $13ac,$13ad,0,209,7,209,9
         $13ae,$13b0,0,210,7,210,9
         $13b1,$13b2,0,209,7,209,9
         $13b3,$13b5,0,210,7,210,9
         $13b6,$13b7,0,209,7,209,9
         $13b8,$13ba,0,210,7,210,9
         $13bb,$13bc,0,209,7,209,9
         $13bd,$13bf,0,210,7,210,9
         $13c0,$13c0,0,198,3,198,5
         $13c1,$13c2,0,200,3,200,5
         $13c3,$13c5,0,202,5,202,7
         $13c6,$13c8,0,202,5,202,7
         $13c9,$13cb,0,202,5,202,7
         $13cc,$13ce,0,202,5,202,7
         $13cf,$13d1,0,202,5,202,7
         $13d2,$13d4,0,202,5,202,7
         $13d5,$13d7,0,202,5,202,7
         $13d8,$13da,0,202,5,202,7
         $13db,$13dc,0,590,9,590,11
         $13dd,$13de,0,591,9,591,11
         $13df,$13e0,0,596,9,596,11
         $13e1,$13e3,0,597,9,597,11
         $13e4,$13e5,0,599,9,599,11
         $13e6,$13e8,0,600,9,600,11
         $13e9,$13ea,0,604,9,604,11
         $13eb,$13ed,0,552,3,552,5
         $13ee,$13ef,0,553,3,553,5
         $13f0,$13f2,0,554,3,554,5
         $13f3,$13f4,0,555,3,555,5
         $13f5,$13f7,0,556,3,556,5
         $13f8,$13f9,0,557,3,557,5
         $13fa,$13fc,0,558,3,558,5
         $13fd,$13fe,0,559,3,559,5
         $13ff,$13ff,0,560,3,560,5
         $1400,$1401,0,561,3,561,5
         $1402,$1404,0,565,3,565,5
         $1405,$1406,0,566,3,566,5
         $1407,$1408,0,567,3,567,5
         $1409,$140a,0,568,3,568,5
         $140b,$140d,0,572,3,572,5
         $140e,$140f,0,573,3,573,5
         $1410,$1412,0,574,3,574,5
         $1413,$1415,0,552,3,552,5
         $1416,$1417,0,553,3,553,5
         $1418,$141a,0,554,3,554,5
         $141b,$141c,0,555,3,555,5
         $141d,$141f,0,556,3,556,5
         $1420,$1421,0,557,3,557,5
         $1422,$1424,0,558,3,558,5
         $1425,$1426,0,559,3,559,5
         $1427,$1427,0,560,3,560,5
         $1428,$1429,0,561,3,561,5
         $142a,$142b,0,563,5,563,7
         $142c,$142e,0,565,3,565,5
         $142f,$1430,0,566,3,566,5
         $1431,$1432,0,567,3,567,5
         $1433,$1434,0,568,3,568,5
         $1435,$1437,0,572,3,572,5
         $1438,$1439,0,573,3,573,5
         $143a,$143c,0,574,3,574,5
         $143d,$143f,0,552,3,552,5
         $1440,$1441,0,553,3,553,5
         $1442,$1444,0,554,3,554,5
         $1445,$1446,0,555,3,555,5
         $1447,$1449,0,556,3,556,5
         $144a,$144b,0,557,3,557,5
         $144c,$144e,0,558,3,558,5
         $144f,$1450,0,559,3,559,5
         $1451,$1451,0,560,3,560,5
         $1452,$1453,0,561,3,561,5
         $1454,$1455,0,563,5,563,7
         $1456,$1458,0,565,3,565,5
         $1459,$145a,0,566,3,566,5
         $145b,$145c,0,567,3,567,5
         $145d,$145e,0,568,3,568,5
         $145f,$1461,0,572,3,572,5
         $1462,$1463,0,573,3,573,5
         $1464,$1466,0,574,3,574,5
         $1467,$1469,0,552,3,552,5
         $146a,$146b,0,553,3,553,5
         $146c,$146e,0,554,3,554,5
         $146f,$1470,0,555,3,555,5
         $1471,$1473,0,556,3,556,5
         $1474,$1475,0,557,3,557,5
         $1476,$1478,0,558,3,558,5
         $1479,$147a,0,559,3,559,5
         $147b,$147b,0,560,3,560,5
         $147c,$147d,0,561,3,561,5
         $147e,$147f,0,563,5,563,7
         $1480,$1482,0,565,3,565,5
         $1483,$1484,0,566,3,566,5
         $1485,$1486,0,567,3,567,5
         $1487,$1488,0,568,3,568,5
         $1489,$148b,0,572,3,572,5
         $148c,$148d,0,573,3,573,5
         $148e,$1490,0,574,3,574,5
         $1491,$1493,0,552,3,552,5
         $1494,$1495,0,553,3,553,5
         $1496,$1498,0,554,3,554,5
         $1499,$149a,0,555,3,555,5
         $149b,$149d,0,556,3,556,5
         $149e,$149f,0,557,3,557,5
         $14a0,$14a2,0,558,3,558,5
         $14a3,$14a4,0,559,3,559,5
         $14a5,$14a5,0,560,3,560,5
         $14a6,$14a7,0,561,3,561,5
         $14a8,$14a9,0,563,5,563,7
         $14aa,$14ac,0,565,3,565,5
         $14ad,$14ae,0,566,3,566,5
         $14af,$14b0,0,567,3,567,5
         $14b1,$14b2,0,568,3,568,5
         $14b3,$14b5,0,572,3,572,5
         $14b6,$14b7,0,573,3,573,5
         $14b8,$14ba,0,574,3,574,5
         $14bb,$14bd,0,552,3,552,5
         $14be,$14bf,0,553,3,553,5
         $14c0,$14c2,0,554,3,554,5
         $14c3,$14c4,0,555,3,555,5
         $14c5,$14c7,0,556,3,556,5
         $14c8,$14c9,0,557,3,557,5
         $14ca,$14cc,0,558,3,558,5
         $14cd,$14ce,0,559,3,559,5
         $14cf,$14cf,0,560,3,560,5
         $14d0,$14d1,0,561,3,561,5
         $14d2,$14d3,0,563,5,563,7
         $14d4,$14d6,0,565,3,565,5
         $14d7,$14d8,0,566,3,566,5
         $14d9,$14da,0,567,3,567,5
         $14db,$14dc,0,568,3,568,5
         $14dd,$14df,0,572,3,572,5
         $14e0,$14e1,0,573,3,573,5
         $14e2,$14e4,0,574,3,574,5
         $14e5,$14e7,0,552,3,552,5
         $14e8,$14e9,0,553,3,553,5
         $14ea,$14ec,0,554,3,554,5
         $14ed,$14ee,0,555,3,555,5
         $14ef,$14f1,0,556,3,556,5
         $14f2,$14f3,0,557,3,557,5
         $14f4,$14f6,0,558,3,558,5
         $14f7,$14f8,0,559,3,559,5
         $14f9,$14f9,0,560,3,560,5
         $14fa,$14fb,0,561,3,561,5
         $14fc,$14fd,0,563,5,563,7
         $14fe,$1500,0,565,3,565,5
         $1501,$1502,0,566,3,566,5
         $1503,$1504,0,567,3,567,5
         $1505,$1506,0,568,3,568,5
         $1507,$1509,0,572,3,572,5
         $150a,$150b,0,573,3,573,5
         $150c,$150e,0,574,3,574,5
         $150f,$1511,0,552,3,552,5
         $1512,$1513,0,553,3,553,5
         $1514,$1516,0,554,3,554,5
         $1517,$1518,0,555,3,555,5
         $1519,$151b,0,556,3,556,5
         $151c,$151d,0,557,3,557,5
         $151e,$1520,0,558,3,558,5
         $1521,$1522,0,559,3,559,5
         $1523,$1523,0,560,3,560,5
         $1524,$1525,0,561,3,561,5
         $1526,$1527,0,563,5,563,7
         $1528,$152a,0,565,3,565,5
         $152b,$152c,0,566,3,566,5
         $152d,$152e,0,567,3,567,5
         $152f,$1530,0,568,3,568,5
         $1531,$1533,0,572,3,572,5
         $1534,$1535,0,573,3,573,5
         $1536,$1538,0,574,3,574,5
         $1539,$153a,0,117,5,117,7
         $153b,$153d,0,118,5,118,7
         $153e,$1540,0,615,9,615,11
         $1541,$1541,0,616,9,616,11
         $1542,$1543,0,618,9,618,11
         $1544,$1546,0,619,9,619,11
         $1547,$1548,0,620,9,620,11
         $1549,$154a,0,621,9,621,11
         $154b,$154c,0,622,9,622,11
         $154d,$154f,0,623,9,623,11
         $1550,$1552,0,625,9,625,11
         $1553,$1555,0,626,9,626,11
         $1556,$1558,0,627,9,627,11
         $1559,$155a,0,103,5,103,7
         $155b,$155d,0,104,5,104,7
         $155e,$155f,0,105,5,105,7
         $1560,$1562,0,106,5,106,7
         $1563,$1564,0,107,5,107,7
         $1565,$1567,0,108,5,108,7
         $1568,$156a,0,93,3,93,5
         $156b,$156b,0,94,3,94,5
         $156c,$156d,0,636,9,636,11
         $156e,$156f,0,637,9,637,11
         $1570,$1571,0,638,9,638,11
         $1572,$1574,0,639,9,639,11
         $1575,$1575,0,641,9,641,11
         $1576,$1578,0,642,9,642,11
         $1579,$157b,0,643,9,643,11
         $157c,$157e,0,644,9,644,11
         $157f,$1581,0,645,9,645,11
         $1582,$1584,0,646,9,646,11
         $1585,$1587,0,648,11,648,13
         $1588,$158a,0,648,11,648,13
         $158b,$158d,0,648,11,648,13
         $158e,$1590,0,648,11,648,13
         $1591,$1593,0,648,11,648,13
         $1594,$1596,0,648,11,648,13
         $1597,$1599,0,648,11,648,13
         $159a,$159c,0,648,11,648,13
         $159d,$159d,0,650,9,650,11
         $159e,$159f,0,652,1,652,6
         $15a0,$15a7,0,654,9,654,13
         $15a8,$15af,0,656,9,656,13
         $15b0,$15b7,0,658,9,658,13
         $15b8,$15ba,0,674,9,674,11
         $15bb,$15bc,0,680,9,680,11
         $15bd,$15be,0,681,9,681,11
         $15bf,$15c0,0,682,9,682,11
         $15c1,$15c3,0,683,9,683,11
         $15c4,$15c5,0,684,9,684,11
         $15c6,$15c7,0,685,9,685,11
         $15c8,$15c9,0,686,9,686,11
         $15ca,$15cc,0,687,9,687,11
         $15cd,$15ce,0,688,9,688,11
         $15cf,$15d0,0,689,9,689,11
         $15d1,$15d2,0,690,9,690,11
         $15d3,$15d5,0,691,9,691,11
         $15d6,$15d7,0,692,9,692,11
         $15d8,$15d9,0,693,9,693,11
         $15da,$15db,0,694,9,694,11
         $15dc,$15de,0,695,9,695,11
         $15df,$15e0,0,696,9,696,11
         $15e1,$15e2,0,697,9,697,11
         $15e3,$15e4,0,698,9,698,11
         $15e5,$15e7,0,699,9,699,11
         $15e8,$15ea,0,700,9,700,11
         $15eb,$15ec,0,701,9,701,11
         $15ed,$15ee,0,702,9,702,11
         $15ef,$15f0,0,703,9,703,11
         $15f1,$15f3,0,704,9,704,11
         $15f4,$15f4,0,705,9,705,11
      </Block>
      <Block name="Character data">
         $1800,$1fff,0,713,3,713,7
      </Block>
      <Block name="Terminator sprite data">
         $2000,$203f,0,745,7,745,11
         $2040,$207f,0,745,7,745,11
         $2080,$20bf,0,745,7,745,11
         $20c0,$20ff,0,745,7,745,11
         $2100,$213f,0,745,7,745,11
         $2140,$217f,0,745,7,745,11
         $2180,$21bf,0,745,7,745,11
         $21c0,$21ff,0,745,7,745,11
         $2200,$223f,0,745,7,745,11
         $2240,$227f,0,745,7,745,11
         $2280,$22bf,0,745,7,745,11
         $22c0,$22ff,0,745,7,745,11
         $2300,$233f,0,745,7,745,11
         $2340,$237f,0,745,7,745,11
         $2380,$23bf,0,745,7,745,11
         $23c0,$23ff,0,745,7,745,11
         $2400,$243f,0,745,7,745,11
         $2440,$247f,0,745,7,745,11
         $2480,$24bf,0,745,7,745,11
         $24c0,$24ff,0,745,7,745,11
         $2500,$253f,0,745,7,745,11
         $2540,$257f,0,745,7,745,11
         $2580,$25bf,0,745,7,745,11
         $25c0,$25ff,0,745,7,745,11
         $2600,$263f,0,745,7,745,11
         $2640,$267f,0,745,7,745,11
         $2680,$26bf,0,745,7,745,11
         $26c0,$26ff,0,745,7,745,11
         $2700,$273f,0,745,7,745,11
         $2740,$277f,0,745,7,745,11
         $2780,$27bf,0,745,7,745,11
         $27c0,$27ff,0,745,7,745,11
         $2800,$283f,0,745,7,745,11
         $2840,$287f,0,745,7,745,11
         $2880,$28bf,0,745,7,745,11
         $28c0,$28ff,0,745,7,745,11
         $2900,$293f,0,745,7,745,11
         $2940,$297f,0,745,7,745,11
         $2980,$29bf,0,745,7,745,11
         $29c0,$29ff,0,745,7,745,11
         $2a00,$2a3f,0,745,7,745,11
         $2a40,$2a7f,0,745,7,745,11
         $2a80,$2abf,0,745,7,745,11
         $2ac0,$2aff,0,745,7,745,11
         $2b00,$2b3f,0,745,7,745,11
         $2b40,$2b7f,0,745,7,745,11
         $2b80,$2bbf,0,745,7,745,11
         $2bc0,$2bff,0,745,7,745,11
         $2c00,$2c3f,0,745,7,745,11
         $2c40,$2c7f,0,745,7,745,11
         $2c80,$2cbf,0,745,7,745,11
         $2cc0,$2cff,0,745,7,745,11
         $2d00,$2d3f,0,745,7,745,11
         $2d40,$2d7f,0,745,7,745,11
         $2d80,$2dbf,0,745,7,745,11
         $2dc0,$2dff,0,745,7,745,11
         $2e00,$2e3f,0,745,7,745,11
         $2e40,$2e7f,0,745,7,745,11
         $2e80,$2ebf,0,745,7,745,11
         $2ec0,$2eff,0,745,7,745,11
         $2f00,$2f3f,0,745,7,745,11
         $2f40,$2f7f,0,745,7,745,11
         $2f80,$2fbf,0,745,7,745,11
         $2fc0,$2fff,0,745,7,745,11
         $3000,$303f,0,745,7,745,11
         $3040,$307f,0,745,7,745,11
         $3080,$30bf,0,745,7,745,11
         $30c0,$30ff,0,745,7,745,11
         $3100,$313f,0,745,7,745,11
         $3140,$317f,0,745,7,745,11
         $3180,$31bf,0,745,7,745,11
         $31c0,$31ff,0,745,7,745,11
         $3200,$323f,0,745,7,745,11
         $3240,$327f,0,745,7,745,11
         $3280,$32bf,0,745,7,745,11
         $32c0,$32ff,0,745,7,745,11
         $3300,$333f,0,745,7,745,11
         $3340,$337f,0,745,7,745,11
         $3380,$33bf,0,745,7,745,11
         $33c0,$33ff,0,745,7,745,11
         $3400,$343f,0,745,7,745,11
         $3440,$347f,0,745,7,745,11
         $3480,$34bf,0,745,7,745,11
         $34c0,$34ff,0,745,7,745,11
         $3500,$353f,0,745,7,745,11
         $3540,$357f,0,745,7,745,11
         $3580,$35bf,0,745,7,745,11
         $35c0,$35ff,0,745,7,745,11
      </Block>
      <Block name="Lower scroll sprite data">
         $3600,$397f,0,753,3,753,7
         $3980,$3980,0,757,5,757,9
         $3981,$3981,0,757,5,757,9
         $3982,$3982,0,757,5,757,9
         $3983,$3983,0,757,5,757,9
         $3984,$3984,0,757,5,757,9
         $3985,$3985,0,757,5,757,9
         $3986,$3986,0,757,5,757,9
         $3987,$3987,0,757,5,757,9
         $3988,$3988,0,757,5,757,9
         $3989,$3989,0,757,5,757,9
         $398a,$398a,0,757,5,757,9
         $398b,$398b,0,757,5,757,9
         $398c,$398c,0,757,5,757,9
         $398d,$398d,0,757,5,757,9
         $398e,$398e,0,762,5,762,9
         $398f,$398f,0,762,5,762,9
         $3990,$3990,0,762,5,762,9
         $3991,$3991,0,762,5,762,9
         $3992,$3992,0,762,5,762,9
         $3993,$3993,0,762,5,762,9
         $3994,$3994,0,762,5,762,9
         $3995,$3995,0,762,5,762,9
         $3996,$3996,0,762,5,762,9
         $3997,$3997,0,762,5,762,9
         $3998,$3998,0,762,5,762,9
         $3999,$3999,0,762,5,762,9
         $399a,$399a,0,762,5,762,9
         $399b,$399b,0,762,5,762,9
         $399c,$399c,0,769,5,769,9
         $399d,$399d,0,769,5,769,9
         $399e,$399e,0,769,5,769,9
         $399f,$399f,0,769,5,769,9
         $39a0,$39a0,0,769,5,769,9
         $39a1,$39a1,0,769,5,769,9
         $39a2,$39a2,0,769,5,769,9
         $39a3,$39a3,0,769,5,769,9
         $39a4,$39a4,0,769,5,769,9
         $39a5,$39a5,0,769,5,769,9
         $39a6,$39a6,0,769,5,769,9
         $39a7,$39a7,0,769,5,769,9
         $39a8,$39a8,0,769,5,769,9
         $39a9,$39a9,0,769,5,769,9
         $39aa,$39aa,0,773,5,773,9
         $39ab,$39ab,0,773,5,773,9
         $39ac,$39ac,0,773,5,773,9
         $39ad,$39ad,0,773,5,773,9
         $39ae,$39ae,0,773,5,773,9
         $39af,$39af,0,773,5,773,9
         $39b0,$39b0,0,773,5,773,9
         $39b1,$39b1,0,773,5,773,9
         $39b2,$39b2,0,773,5,773,9
         $39b3,$39b3,0,773,5,773,9
         $39b4,$39b4,0,773,5,773,9
         $39b5,$39b5,0,773,5,773,9
         $39b6,$39b6,0,773,5,773,9
         $39b7,$39b7,0,773,5,773,9
      </Block>
      <Block name="Music">
         $4000,$4d49,0,778,1,778,5
      </Block>
      <Block name="Sine tables">
         $4d4a,$4d4b,0,807,7,807,11
         $4d4c,$4d4d,0,808,7,808,11
         $4d4e,$4d4f,0,810,7,810,11
         $4d50,$4d51,0,811,7,811,11
         $4d52,$4d53,0,813,7,813,11
         $4d54,$4d55,0,814,7,814,11
         $4d56,$4d57,0,817,7,817,11
         $4d58,$4d59,0,818,7,818,11
         $4d5a,$4d5b,0,820,7,820,11
         $4d5c,$4d5d,0,821,7,821,11
         $4d5e,$4d5f,0,823,7,823,11
         $4d60,$4d61,0,824,7,824,11
         $4d62,$4e39,0,827,2,827,6
         $4e3a,$4f11,0,829,2,829,6
         $4f12,$4fe9,0,832,3,832,7
         $4fea,$50c1,0,834,3,834,7
         $50c2,$5199,0,837,3,837,7
         $519a,$5271,0,839,3,839,7
         $5272,$5349,0,842,3,842,7
         $534a,$5421,0,844,3,844,7
         $5422,$54f9,0,847,3,847,7
         $54fa,$55d1,0,849,3,849,7
      </Block>
   </Segment>

   <Labels values="SEGMENT,ADDRESS,NAME,START,END,FILE_IDX,LINE1,COL1,LINE2,COL2">
      Default,$080e,nmi,0,130,1,130,4
      Default,$080f,start,0,132,1,132,6
      Default,$08e6,irq0,0,220,1,220,5
      Default,$0914,irq1,0,223,1,223,5
      Default,$0980,irq2,0,250,1,250,5
      Default,$09ed,irq3,0,260,1,260,5
      Default,$0a31,skipSpritePointerRotation,0,268,8,268,32
      Default,$0a5f,irq4,0,277,1,277,5
      Default,$0acb,irq5,0,285,1,285,5
      Default,$0b24,irq6,0,291,1,291,5
      Default,$0b7b,irq7,0,296,1,296,5
      Default,$0bd2,irq8,0,301,1,301,5
      Default,$0c28,irq9,0,306,1,306,5
      Default,$0c82,irq10,0,313,1,313,6
      Default,$0cc1,irq_open_border,0,324,1,324,16
      Default,$0cf3,scrollShift,0,350,1,350,12
      Default,$0cf4,irq_lower_sprites,0,353,1,353,18
      Default,$0dbd,moveScroller,0,401,1,401,13
      Default,$0dd3,advanceScrollText,0,425,1,425,18
      Default,$0dd4,newCharLocation,0,426,8,426,22
      Default,$0df0,drawNextChar,0,468,1,468,13
      Default,$0dfc,loadNextChar,0,474,1,474,13
      Default,$0dfd,scrollTextIndex,0,475,8,475,22
      Default,$0e20,copyFrom,0,493,8,493,15
      Default,$0e23,copyTo,0,495,8,495,13
      Default,$0e2c,scrollText,0,504,1,504,11
      Default,$123a,spriteAddressLow,0,521,1,521,17
      Default,$1264,spriteAddressHigh,0,527,1,527,18
      Default,$128e,characterAddressLow,0,537,1,537,20
      Default,$130e,characterAddressHigh,0,541,1,541,21
      Default,$138e,irq_move_sprites,0,578,1,578,17
      Default,$13dc,sineindex,0,589,8,589,16
      Default,$13e0,nextSineTablePointer,0,595,8,595,27
      Default,$13e5,nextSpriteMovementSpeed,0,598,8,598,30
      Default,$13ea,sineTablePointer,0,602,8,602,23
      Default,$1543,spriteMovementSpeed,0,617,8,617,26
      Default,$156c,colorFade,0,634,1,634,10
      Default,$156d,colorIndex,0,635,8,635,17
      Default,$15a0,spriteColor1,0,653,1,653,13
      Default,$15a8,spriteColor2,0,655,1,655,13
      Default,$15b0,spriteColor3,0,657,1,657,13
      Default,$15b8,handleMusicEvent,0,671,1,671,17
      Default,$1800,characterData,0,712,1,712,14
      Default,$2000,spriteData,0,717,1,717,11
      Default,$3600,lowerspritedata,0,752,1,752,16
      Default,$3980,lowerpointers,0,755,1,755,14
      Default,$398e,lowerXLow,0,760,1,760,10
      Default,$399c,lowerXHigh,0,767,1,767,11
      Default,$39aa,lowerXHigh2,0,771,1,771,12
      Default,$4d4a,sineTablesLo,0,805,1,805,13
      Default,$4d56,sineTablesHi,0,816,1,816,13
      Default,$4d62,sine1,0,826,1,826,6
      Default,$4e3a,sine1hi,0,828,1,828,8
      Default,$4f12,sine2,0,831,1,831,6
      Default,$4fea,sine2hi,0,833,1,833,8
      Default,$50c2,sine3,0,836,1,836,6
      Default,$519a,sine3hi,0,838,1,838,8
      Default,$5272,sine4,0,841,1,841,6
      Default,$534a,sine4hi,0,843,1,843,8
      Default,$5422,sine5,0,846,1,846,6
      Default,$54fa,sine5hi,0,848,1,848,8
      Default,$080b,upstartEnd,1,61,1,61,11
   </Labels>

   <Breakpoints values="SEGMENT,ADDRESS,ARGUMENT">
      Default,$1393,
      Default,$13eb,
      Default,$1413,
      Default,$143d,
      Default,$1467,
      Default,$1491,
      Default,$14bb,
      Default,$14e5,
      Default,$150f,
   </Breakpoints>

   <Watchpoints values="SEGMENT,ADDRESS1,ADDRESS2,ARGUMENT">
      Default,$d012,,
      Default,$d016,,
      Default,$d011,,
   </Watchpoints>

</C64debugger>
nurpax commented 3 years ago

XML -- now that's a name I haven't heard in years (spoken in Obi-Wan voice).

Thanks, I found the manual now. Doesn't look too hard to implement but looks like it might need some changes in my debug info tracking.. Might be easier for me to do this.

nurpax commented 3 years ago

Ughh.. I don't know how to use C64Debugger.

On macOS, I was unable to get it to start my PRG file. I run it like:

/Users/janne/Downloads/c64dbg/C64\ 65XE\ NES\ Debugger\ v0.64.58.2/C64\ Debugger.app/Contents/MacOS/C64\ Debugger x.prg

The debugger starts but nothing happens. Also tried -prg x.prg and -prg x.prg -autojmp, nothing works. Running the same PRG like x64 x.prg works just fine. I haven't updated macOS in a while so maybe that can explain it, but the GUI comes up, PRG just doesn't start running.

On Linux, it doesn't seem to work at all, I get an error related to missing libxcb-util.so.0 and when I tried some workarounds from https://csdb.dk/release/?id=185361, it doesn't seem to start. (The screen is just empty, no debugger to be seen.)

EDIT: ok it starts running x.prg if I do CMD-O and use the file dialog to open the prg. I wonder why I can't use the command line to do the same.

EDIT 2: ok adding these options fixes it -wait 2200 x.prg -autojmp I must be using this somehow wrong, I'd imagine such non-obvious options are not required by default.

What does the KickAss debug info offer on C64Debugger? There's some hints in the C64Debugger manual that it'd know how to load vicmon labels too. And if KickAss is required, how can I check that it does indeed get correctly loaded?

Sorry for asking all these questions. Somehow C64Debugger GUI has always been quite unintuitive for me, and while I love what it is capable of, I keep forgetting how to actually use it.

nurpax commented 3 years ago

VICE moncommands labels seems to work with both VICE and C64debugger. C64debugger seems to load these labels fine too.

loading vice symbols is done with -symbols foo.txt.

I'm not sure how to load the KickAss debug formatted labels? Also with -symbols? Does it need some specific file extension to figure out what format to try using? The manual doesn't say.

micheldebree commented 3 years ago

Those options are what I use aswell: -prg x.prg -wait 2500 -autojmp It took a while to figure out the wait; sometimes it would work without it, sometimes not. The C64 debug formatted labels are loaded from an x.dbg next to x.prg The vice labels can be used in C64Debugger, but I couldn't get the breakpoints to work :(

For cycle exact code and keeping track of the raster beam, c64debugger is really excellent :) I am trying to make something with all borders removed, and it's really hand to be able to step through the code while watching the beam redraw the screen.

P.S. this is my Makefile for compiling:

# http://www.theweb.dk/KickAssembler
KICKASS=/Users/michel/dev/github/c64-dev/KickAssembler/KickAss.jar
# https://sourceforge.net/projects/c64-debugger/
DEBUGGER=/Applications/C64\ Debugger.app/Contents/MacOS/C64\ Debugger
# DEBUGGER=start "" "C:\Program Files\C64Debugger.exe" # on Windows
# https://bitbucket.org/magli143/exomizer/wiki/Home
EXOMIZER=/usr/local/bin/exomizer

.PHONY: %.debug clean
.PRECIOUS: %.exe.prg

%.prg: %.asm $(KICKASS)
    java -jar $(KICKASS) -debugdump -vicesymbols "$<"

%.exe.prg: %.prg
    exomizer sfx basic "$<" -o "$@"
    x64sc -initbreak ready -moncommands "$*.vs" "$@"

%.debug: %.prg
    $(DEBUGGER) -prg "$<" -pass -wait 2500 -autojmp -layout 9
    # x64sc -moncommands "$*.vs" "$@"
nurpax commented 3 years ago

Excellent, thank you! Very helpful. I also managed to get c64debugger to run on Linux -- built it from source, it's working fine now.

nurpax commented 3 years ago

Source level debugging in C64Debugger seems to be working now -- it's in the c64dbg branch if you wanna try it. I need to test segment support a bit more, there are probably some bugs in it. But seems to work for one of my demo projects that compiles everything into the default segment.

image

micheldebree commented 3 years ago

Wow that's cool :) I tried it, and it did enter a breakpoint, but not the one I defined. Some quick feedback:

No matter where I define breakpoints, there is just one and the same breakpoint in the dbg info, even if I define no breakpoints at all. The dbg info always has

   <Breakpoints values="SEGMENT,ADDRESS,ARGUMENT">
      Default,$0924,
   </Breakpoints>

The labels seem to be off, at first it seems they are 2 lines too early, later on I am losing the pattern...

Screenshot 2021-02-21 at 07 47 08

The view that you show above, is off for me aswell

Screenshot 2021-02-21 at 08 00 00

It is still the same project: https://github.com/micheldebree/big_angry_sprite/tree/c64jasm

Great stuff though, if we could get breakpoints to work reliably that would be a big help.

nurpax commented 3 years ago

Oh whoops, I posted a little too soon. This version doesn’t implement breakpoints in the c64debugger output at all. :) Sorry about that! They do work in the moncommands output. I was just excited about the source level stepping that seemed to work now. But looks like you saw some bugs with it too.

Breaks are an easy thing to add now so they should be coming in today.

nurpax commented 3 years ago

Pushed support for breakpoints in the C64Debugger format. I can also reproduce that weird off by one or more lines source view.

nurpax commented 3 years ago

@micheldebree I think it's working for your test project now. (I had to fix a couple of things in your code to get it to compile first, but got something running.)

Debugging macro heavy code is a little confusing with c64debugger (or any assembly level stepping debugger, I imagine). I didn't test how this works with KA but at least with C64jasm, the source view will jump to whichever source line generated a particular memory location. So it will jump around in the source files a lot. I'm not sure if there's a good solution to this.

I haven't released a new version on npmjs.com but npm run gen, npm run compile and then using yarn asm <cli options like in c64jasm> should work.

micheldebree commented 3 years ago

This is great, it seems to be working perfectly! I didn't have to change anything myself to get it to compile. Mind you, it is not yet 100% the same as the original, the sprites will not move properly yet. That's just a shortcut I made for now.

One nitpicky comment about the c64debugger option; maybe the name of the option is a bit long? Just c64debugger-info?

Now I plan to port my current little project to c64jasm and actively develop using c64jasm. I expect to be able to switch over from Kickass, which I would like to do for reasons I already mentioned before I think:

I am really impressed at the speed at which you picked this up, thanks a lot!. Is there anything you want me to test or pay special attention to?

nurpax commented 3 years ago

Re: c64debugger info. I wish there was a consistent name for this format, then I'd just use that. :)

The KA manual command line reference names this:

-debugdump: "Dumps an infofile for c64 debugger that maps assembled bytes to locations in the sourcecode."

(IMO this is a too generic name for c64jasm as "debug dump" could mean pretty much anything.)

It's also referred to as DebugDump.

OTOH, C64Debugger names the same "KickAss debug symbols"

How about "--c64debugger-symbols-file"?

Although tbh, I'd like to get rid of the "-file" postfix and have a way of using the same switch to print to either file or stdout in all options that generate file output. E.g., combine:

--dump-labels
--labels-file LABELSFILE

to

--dump-labels <FILE>  # '-' for <FILE> will print to stdout (as is common in GNU software like gcc)

In this scheme, --c64debugger-symbols would get my vote.

nurpax commented 3 years ago

which I would like to do for reasons I already mentioned before I think

Thanks! I like to think so too.

a very responsive and helpful main developer :)

To be fair, you had some luck with your timing on this bug. :) I just came back from almost a 1 year long hobby coding hiatus.. many other bugs in c64jasm and Petmate have kind of languished.

nurpax commented 3 years ago

I'll try to release this today on npm.