 DAMS-FR TXT      
  r !                                      ! {sentes en m{moire.


madram / Overlanders

Gerey Yves
Overland le 12/8/2002

DAMS-OVL avec |store 	: DAMS et RSX pour sauvegarde du source.
BURN			: copie un fichier ROM dans la RAMCARD.

____________

DAMS-OVL v1.
____________

Syntaxe 

|ds 	: charge DAMS en #3e8
|ds,ad  : charge DAMS en ad.
|dms & |dams : idem.   


Qu'apporte cette version ROM ?

- Pav{ num{rique utilisable.
- Break inhib{ (un appui malencontreux sur ESC provoquait un plantage).
- Sauvegarde du source en bank / r{installation @ chaud.

Ce dernier point m{rite pr{cisions. 

Lors du d{veloppement, il est bien naturel de retrouver son source au 
retour du programme, pour peu que ce dernier n'ait pas corrompu toute 
la m{moire.
Les ceusses se for\ant @ recharger leurs sources (voire DAMS lui-meme) 
ont vite abandonn{ la programmation Z80 au profit de la chasse en 
discoth}que. Pire, certains se sont tourn{s vers les {mulateurs ou autres 
exp{diants d{mesur{s.

D'autre part, les 64ko de base {tant priviligi{s, beaucoup logent DAMS en 
bank. Mais cela fixe une limite superflue @ la taille du source.

Quoiqu'il en soit, pendant l'ex{cution du code, pourquoi garder DAMS en 
m{moire quand on dispose du fichier en ROM ?

La solution de stockage propos{e ici s'arrange d'une initialisation de 
DAMS en configuration de base (&C0).
Elle permet, au retour d'un programme, de r{installer DAMS en m{moire. On 
peut ainsi r{cup{rer l'espace occup{ par DAMS pour en faire une zone de 
travail.

Dans un soucis de confort,les variables d'environnement (position du 
pointeur d'{dition, chaines de recherche, etc) sont sauvegard{es. C'est 
justement la premi}re fonction de la RSX |store.
Voici les param}tres @ fournir :

- A : num{ro de bank suppl{mentaire servant @ la sauvegarde.
(1 = #C4, 2 = #C5, 5 = #CC) ... 
- IX : adresse normale de retour, @ r{cup{rer dans la pile.
- DE : adresse d'une zone libre de32 octets dans laquelle sera plac{ le 
code de retour. !!! Adresses #C000 @ #FFFF non autoris{es.


  On comprendra ais{ment que l'op{ration de restauration ne soit pas 
propos{e sous forme de RSX : elle doit rester accessible meme si le 
firmware a {t{ {cras{. C'est pourquoi |store place une petite routine de 
retour @ l'adresse indiqu{e par DE. Pour revenir sous DAMS, il suffit de 
sauter @ cette routine, quelque soit l'{tat de la pile et de la m{moire.
  On choisira par exemple l'adresseBE80. Ainsi, en cas de reset, un 
CALL &BE80 r{installera DAMS avec votre source (voir plus loin).

L'adresse de retour, @ charger dans IX, sert @ retrouver l'adresse 
d'impl{mentation de DAMS (c'est vraiment de la bidouille !).
On {crira donc en d{but de source :

	LD   hl,rsxname
	CALL #bcd4	; KL FIND COMMAND
	JR   nc,no_rsx
;
	LD   a,1	; (ou #81, voir plus loin)
	LD   de,fin
	POP  ix
	CALL #1b        ; Prend en entr{e C et HL renvoy{s par #BCD4
no_rsx
	...		; Votre ing{nieux programme

fin     di		; Permet d'utiliser HACKER ou MULTIFACE si 
	halt            ; |store n'existe pas.
	defs 30

rsxname defm stor
	defb "e"+#80


Attention, la RSX |store pr{sume que la connection courante des banks est 
&C0, et, en sortie, reconnecte en cons{quence.

Ne vous {tonnez pas de voir apparaitre desmerdouilles @ l'{cran, 
c'est au contraire le signe du bon d{roulement du stockage, puisque la 
page #C000-#FFFF sert de tampon.

L'{criture en bank commence @ partir de #4000, et si seul DAMS est 
sauvegard{, cela prend #54 octets.


Vous noterez que tout cela ne remet absolument pas en cause l'utilisation 
du source avec une version de DAMS d{pourvue de cette RSX suppl{mentaire 
: le code de retour ne sera tout simplement pas g{n{r{.
Votre programme fonctionnera donc sans probl}me, seulement il n'y aura 
pas de retour @ DAMS. 



SAUVEGARDE DU SOURCE

Forcer le bit 7 de A indique @ la RSX qu'il faut aussi sauvegarder le 
source. Il sera plac{ @ la suite des param}tres de DAMS, et 
{ventuellement dans la bank suivante : attention@ ne pas vous faire 
surprendre quand il d{passera les #3F9C octets (sa taille est donn{e par 
l'instruction 'x' de DAMS).



LA RESTAURATION

Dans tous les cas, le syst}me est int{gralement r{initialis{, r{adoptant 
ainsi un sch{ma plus logique : 
ce n'est pas @ votre programme de remettre les choses en place une 
fois termin{ (surtout que rien ne permet de connaitre la configuration 
de d{part), mais c'est au logiciel appel{ (ici DAMS) de se placer dans 
les conditions qui conviennent (bon format d'{cran, AMSDOS 
initialis{...).

Une somme de controlea {t{ effectu{e pour garantir le bon {tat de la 
sauvegarde. Si aucun message d'erreur n'apparait, tout est ok.



UTILISATION EN TEMPS QUE POINT D'ARRET

Malgr{ la compl}te r{initialisation du syst}me,l'{tat de TOUS les 
registres (lors de l'appel de la routine de retour) est conserv{.
Ne me demandez pas comment, je n'en sais fichtre rien. Ah ben si, je le 
sais, puisque c'est moi qui l'ai fait.

Vous pouvez donc revenir @ DAMS @ n'importe quelle moment, ind{pendamment 
de l'{tat de la pile, soit en sautant @ la routine de retour, soit en 
ayant recopi{ cette derniere par un simple LDIR @ l'endroit souhait{.
La commande T vous donnera l'{tat des registres.

Attention ! Si SP a {t{ d{tourn{, cela ne g{nera pas DAMS qui utilise 
son propre pointeur de pile. Mais cela peut provoquer un plantage lors 
d'une nouvelle ex{cution du code, @ moins de recharger SP avec le 
classique #C000 (commande .SP,#C000).
Amis lecteurs, si vous ne voyez pas de quoi je parle, ce n'est pas 
grave, c'est que vous n'etes surement pas concern{s. 


ULTIMES REMARQUES

L'adresse d'impl{mentation moins 1 est stock{e en AE5E, AE60, B071, 
B073 communiquant ainsi au BASIC le nouveau Himem. S'il est devenu 
trop bas pour les acc}s discs (MEMORY FULL), pensez aux RSX (|DIR, et 
|LOAD & |SAVE si vous poss{dez UTOPIA). 

Cette version n'inclue pas l'astuce (du Nul Part System ?) consistant @ 
forcer l'adresse limite d'{criture en m{moire @ C000. Si de plus gros 
codes {taient effectivement permis, ils {crasaient alors la zone AMSDOS, 
provoquant g{n{ralement un plantage quand, apr}s un assemblage, on 
enregistrait le source.
Au contraire, cette adresse limite est ici fix{e au Himem syst}me, afin 
de prot{ger les RSX. Pour regagner de la place, d{validez les ROMS 
UTOPIA, PROTEXT...


Si vous souhaitez modifier la ROM, n'oubliez pas de mettre @ jour l'octet 
de checksum en #ffff, de telle fa\on @ ce que la somme des &4000 octets 
soit nulle modulo &100.


Remarque anecdotique, il y a (dans la version originale) un petit bug 
lorsque DAMS est ex{cut{ pour la premi}re fois : il prend soin de 
sauvegarder les registres (ce qui est plutot inutile, du reste), mais se 
fourvoie en oubliant un PUSH. 


A FAIRE

- Proposer la sauvegarde de la table des symboles.
- Corriger petit bug graphique quand curseur moniteur en bas de page.
- Ajouter une RSX de restauration (utile avec une MEMCARD).


CONCLUSION

La vraie solution serait de disposer d'un assembleur r{sidant en ROM. 
C'est le cas de MAXAM, mais ce dernier moult pr{sente d{fauts.

Il ne s'agit ici que de bricolage, en attendant mieux.

Pour tout dire, j'ai con\u cette RSX lors du bouclage de la d{mo du Croco 
Chanel, car la m{moire commen\ait @ manquer. Si cela peut servir @ 
quelqu'un d'autre, tant mieux.

Mais sachez qu'ANA proposera un m{canisme similaire de sauvegarde / 
r{initialisation du syst}me, en plus propre.


________

BURN V1.
________

|BURN,"nom",rom

Remplit la meme fonction que le programme "RAMCARD.BAS". Le nom de cette 
RSX est un clin d'oeil @ l'op{ration de programmation des vraies EPROM 
(on brule une ROM, dans le jargon des {lectroniciens - aucun rapport avec 
N{ron).

Utilisation :

- Activez la ROM que vous souhaitez programmer en positionnant le switch 
correspondant.Cette manoeuvre peut aussi etre effectu{e une fois la RSX 
lanc{e.                             
- Entrez la commande |BURN,"nom",rom.
- Quand on y vous invite, placez le switch d'{criture de votre RAMCARD 
sur ON.
- Attendez 0.4 secondes.
- Placez le switch d'{criture sur OFF.
- Vous pouvez reprendre le cours normal de vos activit{s.

Ce programme v{rifie que la zone #4000-#8800 est bien libre, pour ne pas 
{craser malencontreusement des donn{es pr{sentes en m{moire.


madram / Overlanders

Gerey Yves
7 bis rue des vignes
33470 Le Teich
madram@cpcscene.com
