{"id":764,"date":"2019-09-04T09:50:07","date_gmt":"2019-09-04T08:50:07","guid":{"rendered":"http:\/\/bergatrollet.se\/blog\/?p=764"},"modified":"2021-10-07T11:00:58","modified_gmt":"2021-10-07T10:00:58","slug":"the-vice-monitor-pro-level-breaking","status":"publish","type":"post","link":"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/","title":{"rendered":"The VICE monitor &#8211; Pro level breaking"},"content":{"rendered":"\n<p>VICE emulator is the leading tool for emulating the c64 on modern hardware. It works really fine, with the option of providing a near perfect emulation. For reversers like myself, the opportunity to be able to intercept the program with breakpoints that the program cannot detect no matter what, is ace. Also being able to set breakpoints in the disk drive can only be done in emulated mode. On the native system, once you have fired custom software into the drive, that is out of reach. It will likely only respond to communication as per the custom software.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">So the monitor can do break and watch.<\/h4>\n\n\n\n<p>Both &#8220;<em>break<\/em>&#8221; and &#8220;<em>watch<\/em>&#8221;  supports <em>load<\/em>, <em>store <\/em>and <em>exec <\/em>as arguments, so they are in fact the vary same thing. The only difference is that if you skip setting the triggering conditions, then <em>break <\/em>will trigger on exec and <em>watch<\/em> will trigger on load and store.<br><br>In addition you can add a &#8220;<em>condition<\/em>&#8221; (super flexible and granular criteria for triggering) and &#8220;<em>command<\/em>&#8221; (trigger a command to be executed at every break.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1) The Command command<\/h4>\n\n\n\n<p>&#8220;<em>Command<\/em>&#8221; is really handy for watching a particular memory region. Set your breakpoint to where you want it to be and then add a &#8220;<em>command<\/em>&#8221; so that it triggers a command after each break. You define the <em>command <\/em>with which breakpoint it&#8217;s supposed to be associated, and then you provide the command you want to execute as a string. Then, when the break executes, your command is executed. A common use case is you want to follow how a value in memory is changing, then you don&#8217;t have to type the same command over and over again after the break. Do see the command stacking below as a bonus to the <em>command<\/em>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"291\" data-attachment-id=\"768\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-3-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-3.png?fit=551%2C291\" data-orig-size=\"551,291\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-3\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-3.png?fit=551%2C291\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-3.png?resize=551%2C291\" alt=\"\" class=\"wp-image-768\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-3.png?w=551 551w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-3.png?resize=300%2C158 300w\" sizes=\"auto, (max-width: 551px) 100vw, 551px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">2) Creating scripts<\/h4>\n\n\n\n<p>You can record a script file, containing a number of monitor commands after each other (and we are talking about actual commands, and not the command &#8220;command&#8221; as per the topic above. Use <\/p>\n\n\n\n<p><em>record &#8220;filename&#8221; <\/em><\/p>\n\n\n\n<p>And then issue the commands one by one.<\/p>\n\n\n\n<p>Issue &#8220;<em>stop<\/em>&#8220;, to close the file and stor the recording.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"109\" data-attachment-id=\"769\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-4-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-4.png?fit=476%2C109\" data-orig-size=\"476,109\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-4\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-4.png?fit=476%2C109\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-4.png?resize=476%2C109\" alt=\"\" class=\"wp-image-769\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-4.png?w=476 476w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-4.png?resize=300%2C69 300w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure>\n\n\n\n<p>To playback the commands, issue<\/p>\n\n\n\n<p><em>pb &#8220;filename&#8221; <\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"474\" height=\"71\" data-attachment-id=\"770\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-5-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-5.png?fit=474%2C71\" data-orig-size=\"474,71\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-5\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-5.png?fit=474%2C71\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-5.png?resize=474%2C71\" alt=\"\" class=\"wp-image-770\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-5.png?w=474 474w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-5.png?resize=300%2C45 300w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/figure>\n\n\n\n<p>The script files don&#8217;t have any particular extension and the &#8220;stop&#8221; command is also included, but in the context of the playback, it doesn&#8217;t do anything. You can easily both create and also edit a script file using a normal text editor (and start by removing the stop \ud83d\ude09<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">3) Combining Command and scripts<\/h4>\n\n\n\n<p>It&#8217;s also possible to combine the <em>command <\/em>command with the <em>pb<\/em>, but this is tricky.<\/p>\n\n\n\n<p>Both <em>pb<\/em> and <em>command <\/em>takes a string as an argument, so in case you want to use <em>pb <\/em>as an argument to <em>command<\/em>, then you need to put a string inside a string. Use \\&#8221; to enter the quotation mark of the string inside the string, as per this example:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"326\" height=\"51\" data-attachment-id=\"771\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-6-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-6.png?fit=326%2C51\" data-orig-size=\"326,51\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-6\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-6.png?fit=326%2C51\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-6.png?resize=326%2C51\" alt=\"\" class=\"wp-image-771\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-6.png?w=326 326w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-6.png?resize=300%2C47 300w\" sizes=\"auto, (max-width: 326px) 100vw, 326px\" \/><\/figure>\n\n\n\n<p><s>There is one issue; the command doesn&#8217;t provide any output.  It seems the output is generated, but never sent to the console. However, when you issue one other command (say &#8220;<em>m 1000 1001<\/em>&#8220;) then you first get the result of that command, and then you get the result of the <em>pb <\/em>command. I&#8217;d say this is a bug &#8230;<\/s><\/p>\n\n\n\n<p>(The above was fixed in bugreport <a href=\"https:\/\/sourceforge.net\/p\/vice-emu\/bugs\/1150\/\">#1150<\/a>)<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">4) Strange load\/store<\/h4>\n\n\n\n<p>This issue was fixed in VICE. You can now select if the dummy read should trigger the break or not. Default is that it doesn&#8217;t. The command &#8220;dummy&#8221; allows you to select the mode you want to work in, and the default is that breaks aren&#8217;t triggered on the dummy read. The below is retained for historical purposes only.<\/p>\n\n\n\n<p>The exec command is very straight forward, but there is an issue worth mentioning and that is the triggering of load. That might work in a way you do not expect. <\/p>\n\n\n\n<p>I elaborated over the topic in <a href=\"https:\/\/sourceforge.net\/p\/vice-emu\/bugs\/1134\/\">this thread on the VICE bugtracker<\/a> thinking it was an error, but in fact this is correct emulation and correct triggering (even if the actual triggering in this case it totally and utterly useless unless you look at scenarios that clear data on read).  If you add an index to an absolute instruction (for example &#8220;LDA $1000,X&#8221;), there is a bogus read on cycle four, and this is triggering the watch command break. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"452\" data-attachment-id=\"765\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-8\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image.png?fit=566%2C452\" data-orig-size=\"566,452\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image.png?fit=566%2C452\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image.png?resize=566%2C452\" alt=\"\" class=\"wp-image-765\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image.png?w=566 566w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image.png?resize=300%2C240 300w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">5) Breakpoints and snapshot bug<\/h4>\n\n\n\n<p>The combination snapshot and breakpoint was flawed, as per <a href=\"https:\/\/sourceforge.net\/p\/vice-emu\/bugs\/970\/\">this bug report<\/a>. It&#8217;s now fixed and work properly, but the below is retained for historical purposes.<\/p>\n\n\n\n<p>Create a snapshot (Alt + S in the main window) &#8211; now you have a snapshot<\/p>\n\n\n\n<p>Now type in this small piece of code, set a break to 1000 and start it (&#8220;g1000&#8221;):<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"138\" height=\"157\" data-attachment-id=\"773\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-7-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-7.png?fit=138%2C157\" data-orig-size=\"138,157\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-7\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-7.png?fit=138%2C157\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-7.png?resize=138%2C157\" alt=\"\" class=\"wp-image-773\"\/><\/figure>\n\n\n\n<p>So now pressing a key will change the border colour.<\/p>\n\n\n\n<p>Now reset and load the snapshot (ALT+L).  <br><br>The break point is still listed (type &#8220;break&#8221;), but it will not trigger.<\/p>\n\n\n\n<p>Edit: When testing this, I get a total error reading back a snapshot and the above behaviour is no longer there. The breakpoint is no longer listed. This might ba a function fixed but that snapshots are broken in the process.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Bonus:<br>6) Stacking command<\/h4>\n\n\n\n<p>Talking with Markus64, he showed that you can stack commands by mearly adding a semicolon between them.<\/p>\n\n\n\n<p>So &#8220;m 1000 1010 ; m 1020 1030&#8221; works just fine.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"555\" height=\"98\" data-attachment-id=\"766\" data-permalink=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/image-1-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-1.png?fit=555%2C98\" data-orig-size=\"555,98\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-1.png?fit=555%2C98\" src=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-1.png?resize=555%2C98\" alt=\"\" class=\"wp-image-766\" srcset=\"https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-1.png?w=555 555w, https:\/\/i0.wp.com\/bergatrollet.se\/blog\/wp-content\/uploads\/2019\/09\/image-1.png?resize=300%2C53 300w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Bonus 2:<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">7) Fixed<\/h4>\n\n\n\n<p>VICE traditionally increased the breakpoint counter indefinitely, so when you added and deleted them, they would still increase. Recording a script that sets a break and the associate it with a command, would only work if the current breakpoint counter was the same when the script was launched.<\/p>\n\n\n\n<p>Since a very recent build of VICE, the counter is reset to 1 when there are no remaining breakpoints. Please mind that you can then record a new script that starts with &#8220;delete&#8221;, removing all breakpoints. Then you are sure that the first one you set is indexed as 1.<\/p>\n\n\n\n<p><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>VICE emulator is the leading tool for emulating the c64 on modern hardware. It works really fine, with the option of providing a near perfect emulation. For reversers like myself, the opportunity to be able to intercept the program with &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"http:\/\/bergatrollet.se\/blog\/2019\/09\/the-vice-monitor-pro-level-breaking\/\"> <span class=\"screen-reader-text\">The VICE monitor &#8211; Pro level breaking<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[88,105,3],"tags":[],"class_list":["post-764","post","type-post","status-publish","format-standard","hentry","category-88","category-c64","category-code"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pkM6p-ck","jetpack_likes_enabled":true,"_links":{"self":[{"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/posts\/764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/comments?post=764"}],"version-history":[{"count":18,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/posts\/764\/revisions"}],"predecessor-version":[{"id":1181,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/posts\/764\/revisions\/1181"}],"wp:attachment":[{"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/media?parent=764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/categories?post=764"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/bergatrollet.se\/blog\/wp-json\/wp\/v2\/tags?post=764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}