{"id":2041,"date":"2024-07-17T10:30:57","date_gmt":"2024-07-17T10:30:57","guid":{"rendered":"https:\/\/research.swissdigitization.ch\/?p=2041"},"modified":"2024-07-17T10:30:57","modified_gmt":"2024-07-17T10:30:57","slug":"blitter-die-datenschleuder-das-beast-herzstueck-des-visuellen-amigas-wird-upgedatet","status":"publish","type":"post","link":"https:\/\/research.swissdigitization.ch\/?p=2041","title":{"rendered":"Blitter die Datenschleuder &#8211; das Beast, Herzst\u00fcck des visuellen Amigas [wird upgedatet]"},"content":{"rendered":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Spaceballs - Blitter Madness - Amiga Demo (50 FPS)\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/TKXGTI_Ev9Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Der Blitter (<a href=\"https:\/\/de.wikipedia.org\/wiki\/Blitter_(Amiga)\">https:\/\/de.wikipedia.org\/wiki\/Blitter_(Amiga)<\/a>) ist einer der CustomChips, die den Amiga einzigartig gemacht haben im Homecomputerbereich. Das Herzst\u00fcck des Amigas der 68000er Prozessor von Motorola ist zwar schnell und m\u00e4chtig und einfach zu programmieren. Er ist aber &#8211; das zeigt der Atari ST &#8211; am Anschlag, wenn es darum geht Games mit vielen Objekten zu handeln. <\/p>\n\n\n\n<p>Anders der Amiga &#8211; er hat neben peinlichen 8 Sprites &#8211; Sonderchips &#8211; wie sp\u00e4ter alle Computermodelle. Und der m\u00e4chtigste unter ihnen ist der Amiga-Blitter. <br><br>Er ist in der Lage grosse Bl\u00f6cke zu kopieren und zu kombinieren. Dabei meint man mit Bl\u00f6cken nicht etwa rechteckige Bl\u00f6cke auf einem Blatt sondern Speicherbl\u00f6cke also hintereinanderliegender Speicher. Dies ist eine wichtige Einschr\u00e4nkung, was die Programmierung auf Hardwareebene (Assembler), sehr m\u00fchsam macht.<\/p>\n\n\n\n<p>Der Blitter besteht prinzipiell aus 4 Kan\u00e4len (vgl. DMA), die kombiniert werden k\u00f6nnen. Die Kombinationsm\u00f6glichkeiten lassen sich hier ausprobieren:<br><a href=\"http:\/\/deadliners.net\/BLTCONCheatSheet\/index.html\">http:\/\/deadliners.net\/BLTCONCheatSheet\/index.html<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"422\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-1024x422.png\" alt=\"\" class=\"wp-image-2042\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-1024x422.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-300x124.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-768x316.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-1536x632.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-2048x843.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-10.27.21-624x257.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Im obigen Bild sieht man die M\u00f6glichkeit der sogenannten Blobs eine Art &#8222;HardSoftsprites&#8220;. Das heisst die Kombination eines Hintergrunds mit einer Maske und einem Objekt. Dazu braucht der ABlitter das gesamte Potential. Es gibt aber auch die M\u00f6glichkeit in der Kombination Dinge zu f\u00fcllen, zu kopieren etc.<\/p>\n\n\n\n<p>Die M\u00f6glichkeiten sind teilweise auch v\u00f6llig unsinnig und in der Programmierung ist es denn auch schwierig genau zu verstehen, was passiert. Der Chip ist eine Art Black Box. <\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Konkrete Programmierung<\/strong><\/h2>\n\n\n\n<p>Der Chip funktioniert (und das ganz anders als davor etwa auf dem C64) als eine Art Channelsystem. Das heisst die Konfiguration wird erstellt in dem man sagt, was mit was kombiniert wird etwa als eine Art Befehl in einer Speicherstelle.<br><br>Befehl: Channel A ist Source &amp; Channel B ist Destination<br><br>Dann definiert man die Speicheradresse f\u00fcr den Source<br>Dann definiert man die Speicheradresse f\u00fcr die Destination<\/p>\n\n\n\n<p>Jetzt muss man definieren, wie der Chip vorgehen soll, wenn er den Befehl prozessiert. Es wird also angegeben wieviel er springen soll (skip) bei jeder Linie, die er abarbeitet. Der Chip behandelt ja nur Bl\u00f6cke!<br><br>Sind etwa Source und Destination Screens, so muss man eine Zeile (320Pixel\/8b) 40 bytes &#8211; die Breite des VisuellenBlockes springen &#8211; sagen wir 64Pixel (64\/8) 8 bytes. Das heisst der Chip springt pro Zeil 8 Bytes und macht da weiter. <\/p>\n\n\n\n<p>Der Befehl wird dann ausgel\u00f6st, wenn das Programm die Gr\u00f6sse des Blockes reinschreibt. In unserem Fall w\u00e4ren das 64 Pixel x 64 Pixel (64\/8) 8b * 64. Also 512bytes lang. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>        move.l #$09f00000,BLTCON0(a6) ; copy command a>d \n\tmove.l #$ffffffff,BLTAFWM(a6) ; mask \n\tmove.l ADRESSESOURCE,BLTAPTH(a6) ; source\n\tmove.l ADRESSEDESTINATION,BLTDPTH(a6); target - screen\n\tmove.w #(320-64)\/8,BLTAMOD(a6); skip source (in bytes)\n\tmove.w #(320-64)\/8,BLTDMOD(a6); ; skip destination (in bytes)\n\tmove.w #(64\/8)*64,BLTSIZE(a6) ; size of the block (height*64 + wdith\/16)\n\n        (Zur Erkl\u00f6rung: A6 ist die Adresse des Chips)<\/code><\/pre>\n\n\n\n<p>Die Fehlerm\u00f6glichkeiten sind dabei unendlich. Und zu allem \u00dcberfluss macht der Chip auch immer noch etwas, das dargestellt wird. Das Debugging ist dementsprechend schwierig.<\/p>\n\n\n\n<p>Da der Amiga seine Grafik mit Planes aufbaut, ist die Sache noch komplizierter. Das heisst ein Screen ist aufgeteilt in Ebenen von 0\/1. Diese Ebenen werden dann kombiniert und zum Bild. Ist das Bild monochrom dann gibt es eine Ebene. Bei 16 Farben sind es dann 4 Ebenen und 32 Farben 5 Ebenen. Dabei ist jede Ebene 2 hoch x. das heisst die Farben entstehen zusammengestellt: 2^0 + 2^1 + 2^2 + 2^3. Dadurch kann das System erweitert werden, Memory gespart werden und allerlei Tricks gemacht werden: Etwa eine Schrift nur auf einer Ebene scrollen etc. Der Preis daf\u00fcr ist aber auch ein total kompliziertes System. Anders gesagt, es muss bei 16 Farben die Prozedur jeweils 4mal angewandt werden: Also 4x Kopie auf jedem Layer und alle Grafik muss in diesen gelayerten Planes daherkommen.<\/p>\n\n\n\n<p>Es ist fast schon unglaublich, wie die Entwickler damals dieses &#8222;Biest&#8220; in den Griff bekommen haben. Die Stunden m\u00fcssen hier mal noch evaluiert werden, welche Aufw\u00e4nde da betrieben wurden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Warten auf den Blitter<\/h3>\n\n\n\n<p>Da der Blitter unabh\u00e4nig vom Rest der Hardware funktioniert (auch hier ein Paradigmenwechsel etwa zum C64) darf nichts in den Chip geschrieben werden. Die Folgen sehen etwa so aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"949\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1-1024x949.png\" alt=\"\" class=\"wp-image-2043\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1-1024x949.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1-300x278.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1-768x712.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1-624x579.png 624w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-16-um-16.30.40-1.png 1154w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Hier wird der Blitter w\u00e4hrend dem Ausf\u00fchren mit neuen Daten gef\u00fcttert. Es ist also ein Muss zu warten bis der Blitter zu Ende ist. Diese Parallelisierung von Prozessen erfordert eine dynamischere Sicht des Computers als davor, als alles linear war. Das trifft gerade &#8211; anders als bei der Demoscene &#8211; auf interaktive Games zu, die sich permanent ver\u00e4ndern. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bobs &#8211; Blitter Objects &#8211; HardwareSimulierte Sprites<\/h2>\n\n\n\n<p>Noch komplizierter wird es bei den BOBS. Diese sind eigentliche virtualisierte Sprites ohne deren Vorteile (null Rechenzeit, automatisches Refresh des visuellen Dahinters, kein Flackern, Mangement von Position, Kollision). Daf\u00fcr sind sie flexibel.  Die mageren 8Sprites des Amiga machten es also unumg\u00e4nglich diesen Chip zu nutzen und so l\u00e4sst sich vermuten (anhand der Berichte und Texte), dass fast jedes Games diese benutzt haben muss. Eine Analyse der Schweizer Spiele und Demos steht noch aus.<\/p>\n\n\n\n<p>Bobs bestehen bei den Sources den Visuellen Daten und einer Maske &#8211; immer gelayered als Planes. Dies sieht dann in etwa wie folgt aus f\u00fcr ein 16&#215;16 Bob:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bob1616_1:\t\t\n                ; plane_0\n\t\tdc.b %11111111,%11111111,0,0\n\t\tdc.b %00000000,%00011110,0,0\n                ; x8\n\n                ; plane_1\n                &#91;..]\n                ; plane_1&#91;..]\n                &#91;..]\n <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>bob1616_1_mask:\n\t\t ; mask\n                 dc.w %1111111111111100,0\n\t\t dc.w %1110001100011100,0\n                 ; x8\n<\/code><\/pre>\n\n\n\n<p>Man kann nun fragen, warum die Zusatzbytes bei den Planes ,0,0 oder bei der Maske ,0. Dies ist, weil die Bobs ja sich auch horizontal verschieben k\u00f6nnen m\u00fcssen. Die Logik ist sonst, dass der Bildschirmspeicher in 8Pixel unterteilt ist. Und so m\u00fcssen die Bobs zur Seite geschoben (shift) werden, damit sie dann am richtigen Ort wieder reinpassen. Anders gesagt, die Logik des Bildschirms ist in Byte aufgeteilt also 1b ist 8Pixel und alles weitere muss m\u00fchsam &#8211; hier mit Blitter &#8211; verschoben werden.<\/p>\n\n\n\n<p>Und in diese zwei Bytes wird quasi geshiftet. Daraus ergeben sich in der Konfiguration die Hinzunahme von weiteren Channels:<\/p>\n\n\n\n<p>Channel 1: Maske des Bobs (mit 2 bytes mehr)<br>Channel 2: Visuelle Daten Bobs<br>Channel 3: Destination mit was kombiniert werden soll (Screen)<br>Channel 4: Destination, wohin das Resultat geschrieben werden soll<br><br>Das f\u00fchrt zu einem Set, das wirklich nicht einfach ist und nur im Resultat slim und logisch aussieht. Aber Stunden, Tage, Wochen braucht bis man es zusammengepuzzelt hat. Veteranen werden selbstverst\u00e4ndlich das Gegenteil dazu aussagen. Aber es ist auch schon 35 Jahre  her.<\/p>\n\n\n\n<p>Der Code, selbstverst\u00e4ndlich m\u00fcsste dieser erweitert werden auf 4 Planes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\t\tmove.l #$ffff0000,BLTAFWM(a6) ; mask \n\t\t\t\n                move.w\t#7,BLTCON1(a6) ;  position x: %16+7&lt;\n\t\tor.w\t#$0fca,d1\t; \tset up the A scroll value and the\n\t\tmove.w\td1,BLTCON0(a6)\t;\tminterm for D = notA.C + B\n\t\t        \n                move.l #bob1616_1_mask,BLTAPTH(a6) ; source maske\n\t        move.l #bob1616_1,BLTBPTH(a6); ; source bitplane\n\t\t\t\n                move.l #Gamescreen+(320+64)\/8,BLTCPTH(a6); target source \t\t\t                        \n                move.l #Gamescreen+(320+64)\/8,BLTDPTH(a6); target - screen\n\t\t\t\n\t        move.w #0,BLTBMOD(a6); skip source (in bytes)\t\t\t\n\t\tmove.w #0,BLTAMOD(a6); skip source (in bytes)\n\t\tmove.w #(320-(16+16))\/8,BLTCMOD(a6); ; skip destination (in bytes)\n\t\tmove.w #(320-(16+16))\/8,BLTDMOD(a6); ; skip destination (in bytes)\n\t\t\t\n\t\tmove.w #16*64+(16+16)\/16,BLTSIZE(a6) \n                ; size of the block (height*64 + wdith\/16)\t\t\n\t\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Kurzes Fazit<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"565\" src=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-1024x565.png\" alt=\"\" class=\"wp-image-2044\" srcset=\"https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-1024x565.png 1024w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-300x165.png 300w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-768x423.png 768w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-1536x847.png 1536w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-2048x1129.png 2048w, https:\/\/research.swissdigitization.ch\/wp-content\/uploads\/2024\/07\/Bildschirmfoto-2024-07-17-um-12.23.43-624x344.png 624w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Der Blitter (Teil des Agnus Chips) hat die Art, wie eine Application aufgebaut ist stark ver\u00e4ndert und parallelisiert.  Und hat die Art wie im Homecomputerbereich Spiele entwickelt wurden ver\u00e4ndert, indem er den Blitter statt Sprites in den Vordergrund stellte und damit HardwareSprites auch &#8222;virtualisiert&#8220;.  Der Blitter ist das Ding, warum auch heute der Amiga eine der Demomaschinen par exellence ist. Damit l\u00e4sst sich immer noch neues finden und rumtrixen. &#8222;Amiga!Amiga!&#8220; schreit die Szene da normalerweise. <\/p>\n\n\n\n<p>Der Blitter ist aber auch ein schwer zu kontrollierendes St\u00fcck Hardware. Er ist aber auch eine Art Black Box f\u00fcr die Entwickler*. Die Entwickler* geben Macht vom Prozessor &#8211; hier dem 68k ab und \u00fcberlassen es einem CustomChip, parallel etwas zu tun. Dadurch liegt zwar noch alle Macht beim Programmierer* aber eben nicht mehr in seinem Code.  <\/p>\n\n\n\n<p>Insofern bleibt fraglich, wer im Vergleich die gr\u00f6ssen Cracks waren, die Leute auf dem Atari ST, die aus lausiger Hardware wahnsinnig viel rausholten oder die Amiga-Cracks, die aus einer einzigartigen Hardware auch maximal viel herausgeholt haben. Die Systeme m\u00fcssen bis heute als eigene Systeme betrachtet werden, auch wenn im Spielemarkt eigentlich beide eher Br\u00fcder als zwei Cousins waren. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendungen in CH-Spielen und CH-Demos<\/h2>\n\n\n\n<p>Vermutlich muss man eher fragen, wer verwendete den Blitter mit Bobs und Co in Amiga-Spielen!<\/p>\n\n\n\n<p>Dennoch hier ein Beispiel mit vielen Tricks. <br><a href=\"https:\/\/en.wikipedia.org\/wiki\/Supaplex\">https:\/\/en.wikipedia.org\/wiki\/Supaplex<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"SUPAPLEX - GAIT - LEVEL 1\" width=\"625\" height=\"352\" src=\"https:\/\/www.youtube.com\/embed\/8ffHTQsSE6Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Weiterf\u00fchrende Links<\/h2>\n\n\n\n<p>Wem dies alles nur Kratzen an der Oberfl\u00e4che war, hier weitergehende Links zum Eintauchen ins Datenschleudern:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.stashofcode.fr\/afficher-sprites-et-bobs-sur-amiga-2\/\">https:\/\/www.stashofcode.fr\/afficher-sprites-et-bobs-sur-amiga-2\/<\/a><br><a href=\"https:\/\/codetapper.com\/amiga\/diary-of-a-game\/menace\/part-5-aliens-2\/\">https:\/\/codetapper.com\/amiga\/diary-of-a-game\/menace\/part-5-aliens-2\/<\/a><br><a href=\"https:\/\/eab.abime.net\/showthread.php?t=68011\">https:\/\/eab.abime.net\/showthread.php?t=68011<\/a><br><a href=\"https:\/\/www.stashofcode.fr\/afficher-sprites-et-bobs-sur-amiga-2\/\">https:\/\/www.stashofcode.fr\/afficher-sprites-et-bobs-sur-amiga-2\/<\/a><br><a href=\"https:\/\/www.markwrobel.dk\/post\/amiga-machine-code-letter7\/\">https:\/\/www.markwrobel.dk\/post\/amiga-machine-code-letter7\/<\/a><\/p>\n\n\n\n<p><br><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">ToDo: Tech-Erkl\u00e4rungsvideos von den Machern. Gemeinsames Spielen der Spiele und Aufnahme!<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Blitter (https:\/\/de.wikipedia.org\/wiki\/Blitter_(Amiga)) ist einer der CustomChips, die den Amiga einzigartig gemacht haben im Homecomputerbereich. Das Herzst\u00fcck des Amigas der 68000er Prozessor von Motorola ist zwar schnell und m\u00e4chtig und einfach zu programmieren. Er ist aber &#8211; das zeigt der Atari ST &#8211; am Anschlag, wenn es darum geht Games mit vielen Objekten zu handeln. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39,52,83,81],"tags":[],"class_list":["post-2041","post","type-post","status-publish","format-standard","hentry","category-16bit","category-amiga","category-demoscene","category-gamedev"],"_links":{"self":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/2041","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2041"}],"version-history":[{"count":1,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/2041\/revisions"}],"predecessor-version":[{"id":2045,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=\/wp\/v2\/posts\/2041\/revisions\/2045"}],"wp:attachment":[{"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/research.swissdigitization.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}