{"id":2927,"date":"2020-03-08T11:01:56","date_gmt":"2020-03-08T10:01:56","guid":{"rendered":"https:\/\/ceo.oric.org\/?p=2927"},"modified":"2020-03-08T11:01:56","modified_gmt":"2020-03-08T10:01:56","slug":"sauvegardez-vos-tableaux-alphanumeriques-en-toute-serenite-dstore-drecall-version-2","status":"publish","type":"post","link":"https:\/\/oric.bqtt.net\/index.php\/2020\/03\/08\/sauvegardez-vos-tableaux-alphanumeriques-en-toute-serenite-dstore-drecall-version-2\/","title":{"rendered":"Sauvegardez vos tableaux (alphanum\u00e9riques) en toute s\u00e9r\u00e9nit\u00e9 (DSTORE \/ DRECALL version 2)"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dans un pr\u00e9c\u00e9dent article (voir CEO-Mag n\u00b0357), j\u2019expliquais\nclairement que les commandes <strong>DSTORE<\/strong>\n\/ <strong>DRECALL<\/strong> souffraient de certaines\nlimites&nbsp;dans leur version initiale :<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Impossibilit\u00e9\nde sauver des tableaux \u00e0 plusieurs dimensions&nbsp;;<\/li><li>Risque\nd\u2019\u00e9crasement de la routine en cas de red\u00e9finition du jeu de caract\u00e8res\naltern\u00e9s&nbsp;;<\/li><li>Utilisation\ndu mode TEXT uniquement.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Avec cette nouvelle version, ces imperfections appartiennent\nd\u00e9sormais au pass\u00e9&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La routine loge entre $9400 et $977B, ce qui permet d\u2019utiliser le mode HIRES et de red\u00e9finir les caract\u00e8res altern\u00e9s mais n\u00e9cessite un <strong>HIMEM#93FF<\/strong> avant toute utilisation&nbsp;;<\/li><li>Gr\u00e2ce \u00e0 l\u2019appel de la commande SAVEM de SEDORIC, les tableaux alphanum\u00e9riques de grandes tailles (et de plusieurs dimensions) peuvent \u00eatre stock\u00e9s sur la disquette.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La syntaxe n\u2019a quant \u00e0 elle pas \u00e9volu\u00e9e&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>DSTORE<\/strong>\nTAB, &#8220;Nom Fichier&#8221;&nbsp;: sauve un tableau alpha\/num\u00e9rique avec le\nnom &#8220;Nom Fichier&#8221; sur disquette<\/li><li><strong>DRECALL<\/strong>\nTAB, &#8220;Nom Fichier&#8221;&nbsp;: r\u00e9cup\u00e8re un tableau alpha\/num\u00e9rique portant\nle nom &#8220;Nom Fichier&#8221; depuis la disquette<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Le branchement sur la routine se fait d\u00e9sormais\ngr\u00e2ce \u00e0 <strong>DOKE#4EA,#9400<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>COMMENT \u00c7A\nMARCHE&nbsp;?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La sauvegarde des caract\u00e8res qui composent un\ntableau alphanum\u00e9rique a toujours lieu en RAM Overlay, de $C400 \u00e0 $C7FF&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>$C400-$C401&nbsp;:\nnombre d\u2019\u00e9l\u00e9ments stock\u00e9s.<\/li><li>$C402-$C7FF&nbsp;:\ncaract\u00e8res du tableau alphanum\u00e9rique. Les caract\u00e8res sont pr\u00e9c\u00e9d\u00e9s d\u2019un nombre\nqui indique la taille de la variable alphanum\u00e9rique en cours de stockage.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque l\u2019adresse de stockage en RAM Overlay d\u00e9passe\n$C7FF, une premi\u00e8re sauvegarde a lieu sur la disquette. Le stockage des\n\u00e9l\u00e9ments restants reprend alors en RAM Overlay \u00e0 partir de $C400, et un nouveau\nfichier sera ajout\u00e9 au pr\u00e9c\u00e9dent gr\u00e2ce \u00e0 la commande SAVEM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lors de la r\u00e9cup\u00e9ration des donn\u00e9es depuis la\ndisquette, le premier fichier est transf\u00e9r\u00e9 en RAM Overlay de $C400 \u00e0 $C7FF.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chaque \u00e9l\u00e9ment du tableau alphanum\u00e9rique est cr\u00e9\u00e9 en\nRAM gr\u00e2ce \u00e0 la routine $D264\/RAM Overlay ($D5AB\/ROM) qui r\u00e9serve une cha\u00eene dont\nla longueur est dans le registre A (adresse cha\u00eene r\u00e9serv\u00e9e en $D1-$D2,\nlongueur en $D0).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les caract\u00e8res sont ensuite copi\u00e9s un par un, depuis\nla RAM Overlay vers la RAM jusqu\u2019\u00e0 obtenir la longueur finale de la cha\u00eene en\ncours.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque toutes les cha\u00eenes du fichier en cours ont \u00e9t\u00e9 transf\u00e9r\u00e9es en RAM, on v\u00e9rifie s\u2019il existe un fichier &#8220;merg\u00e9&#8221; et on poursuit de la m\u00eame mani\u00e8re si tel est le cas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Au passage, quelques routines en ROM \/ RAM Overlay&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>$EA9E<\/strong> (ROM)&nbsp;: Ajuster adresse tableau alphanum\u00e9rique dans $0209-$02AA ($0C-$0D) et $02AB-$02AC.<\/li><li><strong>$D264<\/strong> ($D5AB\/ROM)&nbsp;: R\u00e9server cha\u00eene de longueur A (adresse cha\u00eene r\u00e9serv\u00e9e en $D1-$D2, longueur en $D0).<\/li><li><strong>$E12E<\/strong> (RAM Overlay)&nbsp;: Charger fichier merg\u00e9 selon valeurs en $C102,x et $C103,x (avec valeur x fix\u00e9e par le registre X).<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>UN BEAU DESSIN\nVAUT MIEUX QU\u2019UN LONG DISCOURS<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ci-apr\u00e8s, les ordinogrammes des commandes DSTORE et DRECALL afin d\u2019y voir plus clair.<\/p>\n\n\n\n<p class=\"wp-block-pdfemb-pdf-embedder-viewer\"><\/p>\n\n\n\n<p class=\"wp-block-pdfemb-pdf-embedder-viewer\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>UN P\u2019TIT COUP DE D\u00c9BOGUEUR POUR LA ROUTE&nbsp;?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les copies d\u2019\u00e9cran du d\u00e9bogueur ci-dessous montrent le descripteur du tableau alphanum\u00e9rique M$ et une portion dudit tableau stock\u00e9 en RAM Overlay.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/03\/image.png\" alt=\"Descripteur tableau alphanum\u00e9rique M$(21)\" class=\"wp-image-2930\"\/><figcaption>Descripteur tableau alphanum\u00e9rique M$(21)<\/figcaption><\/figure><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/03\/image-2.png\" alt=\"Sauvegarde tableau alphanum\u00e9rique M$ en RAM Overlay\" class=\"wp-image-2932\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s sauvegarde du tableau alphanum\u00e9rique M$ via la commande <strong>DSTORE M$,&#8221;TABLEAUM&#8221;<\/strong>, un rapide \u2018DIR\u2019 permet de v\u00e9rifier la pr\u00e9sence du fichier \u2018TABLEAUM\u2019 sur la disquette et de contr\u00f4ler ses adresses de d\u00e9but ($C400) et de fin ($C6C8) ainsi que le type de fichier ($42).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/03\/image-3.png\" alt=\"\" class=\"wp-image-2933\"\/><figcaption>Contenu disquette<br>STREC.BIN (routine principale #C9400-#977B)<br>DEMALPHA (programme de d\u00e9mo en Basic)<br>TABLEAUM (Tableau alpha M$ sauv\u00e9 en #C400-#C6C8)<\/figcaption><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bonnes sauvegardes&nbsp;!!!<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/03\/STORECALL2.zip\">STORECALL2<\/a><a href=\"https:\/\/oric.bqtt.net\/wp-content\/uploads\/2020\/03\/STORECALL2.zip\" class=\"wp-block-file__button\" download>T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dans un pr\u00e9c\u00e9dent article (voir CEO-Mag n\u00b0357), j\u2019expliquais clairement que les commandes DSTORE \/ DRECALL souffraient de certaines limites dans leur version initiale :<\/p>\n<p>&#8211;\tImpossibilit\u00e9 de sauver des tableaux \u00e0 plusieurs dimensions ;<br \/>\n&#8211;\tRisque d\u2019\u00e9crasement de la routine en cas de red\u00e9finition du jeu de caract\u00e8res altern\u00e9s ;<br \/>\n&#8211;\tUtilisation du mode TEXT uniquement.<\/p>\n<p>Avec cette nouvelle version, ces imperfections appartiennent d\u00e9sormais au pass\u00e9.<\/p>\n","protected":false},"author":1,"featured_media":2933,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[338,348,22,317],"tags":[668,771,773,872],"class_list":["post-2927","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-338","category-basic","category-ceomag","category-programmation","tag-ceomag359","tag-drecall","tag-dstore","tag-sedoric"],"_links":{"self":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/2927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/comments?post=2927"}],"version-history":[{"count":0,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/posts\/2927\/revisions"}],"wp:attachment":[{"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/media?parent=2927"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/categories?post=2927"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oric.bqtt.net\/index.php\/wp-json\/wp\/v2\/tags?post=2927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}