CODINGAMSLIVE ★ AMSLIVE n°18 - BIDULES ET MACHINS VRAIMENT CHOUETTES ★

AMSLIVE n°18 - BIDULES ET MACHINS VRAIMENT CHOUETTESCoding Amslive

Cet article est dédié à tous les nomades, qui, parcourant le monde, transmettent oralement l'enseignement des anciens.

ROM-O'PLA-CARD

Tout comme un marin initié commence la journée avec quatre verres dans le nez, chaque ROM initialisée consomme au moins 4 octets, à partir du Himem (le système créant une liste chaînée pour retrouver ses petits).

Cela gêne certains programmes, pour diverses raisons :

— il n'y a plus assez de mémoire (gros programmes BASIC).

— la zone de travail AMSDOS a été rabaissée (si présence de ROMs au dessus de la ROM 7), et se retrouve écrasée lors d'un chargement. Ce n'est pas beau à voir.

— la zone de travail AMSDOS a été humiliée (hum, je ne suis pas convaincu que l'utilisation de synonymes chargés d'éviter les inéluctables répétitions d'un article technique malgré tout parfaitement rédigé par un homme en quasi-complète possession de ses moyens soit forcément une bonne idée, surtout après 4 heures du matin) et les loaders hérétiquement programmés piochent la variable « lecteur actif » à une adresse obsolète.

— d'autres programmes plus malsains encore réinitialisent toutes les ROMs, y compris celles dont ils n'ont pas besoin, pouvant alors écraser des données précieuses venant d'être délicatement déposées en mémoire (suite à un décompactage par exemple).

Pour jouir de ces programmes malgré tout, il faut désactiver les ROMS. Pour cela, nul besoin de débrancher sa RAMCARD, de voler le sac d'une personne âgée à la sortie d'un bureau de Poste, ni même de mettre tous les switchs concernés sur OFF :

+ On peut tenter la RSX ROMOFF des ROMs Arnor (Utopia, Maxam...).

+ On reprogramme les ROMs en s'inspirant de celles modifiées par OFFSETURs', qui ne s'initialisent pas lors du reset si la touche SHIFT est pressée comme un citron.

+ Solution radicale, on bascule le premier interrupteur de sélection de plage : ainsi, vos ROMs se rangent 128 numéros plus haut et le système ne les détecte plus au reset.

ROM FRELATÉE

Pour un chargeur (loader en sanskrit) langage machine, toute la gymnastique consistant à sauvegarder le lecteur actif, initialiser la ROM 7 et replacer le lecteur actif est dictée par ces deux faits :

  • la commande RUN"nom" du BASIC dévalide toutes les ROMs en cas de fichier binaire.
  • l'AMSDOS est incapable, contrairement à RODOS par exemple, de détecter qu'il a précédemment été initialisé, et par suite, de rattraper les paramètres courants.

Coller le code binaire dans un petit programme BASIC résout le problème, même si le procédé reste imparfait (le programme n'est pas censé se charger obligatoirement en &170, même si c'est toujours le cas !).

16 AU LIT

On se casse parfois la tête (surtout Targhan) pour poker une valeur 16 bits sous BASIC. En effet tes nombres exprimés en hexa se voient signés (PRINT &ffff donne -1), tandis que les résultats obtenus par un calcul tel que PEEK(ad)+PEEK(ad+1)*256 s'étalent de 0 à 65535.

Soit x une valeur 16 bits (signée ou non, ça marche dans les deux cas). Voici une façon de procéder :

POKE ad,x-INT(x/256)*256
POKE ad+1,(x/256) AND &ff

La première expression fournit le reste positif (division euclidienne), la deuxième élimine les 8 bits de poids faible (décalage signé) et passe en binaire pur.

Rendons grâce à la fonction INT qui arrondit à l'entier précédent.

Autre solution :

POKE ad,VAL("&"+RIGHT$(HEX$(x),2) )
POKE ad+1,VAL("&"+LEFT$(HEX$(x, 4) , 2) )

Tant que nous y additions, illustrons par un exemple simple l'efficacité de DEF FN :

10 DEF FNek(a)=PEEK(a)+PEEK(a+l)*256
20 va=FNek(&39):?HEX$(va)

JE RETIENS MIEUX LA NUIT

Afin de se rappeler aisément le fonctionnement des diverses instructions de manipulation de bits, analysons placidement leurs petits noms.

SRA : S comme Shift, soit décalage. R comme Right, à droite. A comme Arithmetic, c'est à dire que le bit 7 ne va pas être changé, afin de conserver le signe. Il s'agit donc d'une division par 2 signée (FE =* -2 donne FF = -1).

SRL : cette fois, L comme Logic. On injecte 0 dans le bit 7, fournissant du même coup une division par 2 non signée (FE = 254
donne 7F = 127).

SLA : décalage à gauche en injectant 0 dans le bit 0, cela correspond aussi à une multiplication par deux (que le nombre soit signé ou non). C'est donc arithmétique et logique à la fois, et cela explique que SLL n'existe pas.

Les instructions non documentées CB 38 à CB 3F, qui décalent à gauche en positionnant le bit 0 à 1, méritent plutôt le nom de SL1, contrairement à ce que j'avais indiqué dans un ancien numéro (mais j'étais encore sous le choc).
Dans tous les cas, Carry reçoit le bit qui déborde ! Ça me fait penser que j'ai rencontré, lors d'un voyage à Londres, une Carrie qui y arrivait sans les mains. Un triste accident de bateau.

RR : rotation à droite (à l'intérieur même de l'octet). Le bit 0 se retrouve dans le bit 7 ET dans Carry.

RL : non mais !?

RRC : rotation à droite avec Carry, participant cette fois pleinement à cette ronde merveilleuse. Le bit 0 va dans Carry qui, lui, va dans le bit 7.

RLC : vous reprendrez bien un peu de Viandox ?

RLD et RRD, avec un D comme Digit (chiffre) mais aussi comme Décimal (décimal) et Daygirl (externe) : ceux-là travaillent avec des quartets (cf. AMSLIVE 5, si ça vous dit).

En passant, notez que RR A (2 octets, 2 NOPS) fait la même chose que RRA (1 octet, 1 NOP), mais en remettant à jour les flags Zéro, Signe et Parité.

SET met le bit désiré à 1.

RES, lui, RESet, donc met un bit à 0.

SCF = Set Carry Flag. Cette instruction ne posera pas le plancher à votre place.

CCF = Complément Carry Flag. Inverse l'état de Carry en le flattant.

Pour annuler le carry, un OR A ou AND A fera avantageusement l'affaire.

JEU, SET & MATCH

Sous DAMS aussi, il est possible d'insérer des points d'arrêt (breakpoints en démotique), à savoir des instructions qui rendent la main en fournissant l'état des registres.

Pour cela, il suffit de placer un CALL x> (après avoir reconnecté la bonne BANK si le besoin s'en fait sentir), où xx est l'adresse d'implantation de DAMS.

Ensuite, entrez en mode Trace (T) pour connaître le contenu des registres ; en s'exécutant, DAMS, avant toute chose, les a précieusement mis de côté !

L'adresse PC se trouve bien entendu dans la pile.
D'ailleurs, si SP fut détourné pendant le programme, cela n'affectera pas DAMS qui utilise sa propre pile, mais il faudra penser à le replacer avant de réexécuter le code (commande .SP,#C000).

Une méthode ancestrale consiste à placer un DI : HALT à l'endroit souhaité, puis à activer la Multiface II quand le programme s'interrompt. Au retour, le Z80 sautera à l'instruction suivant le HALT.

CE TYPE N'EST PAS UNE FUSÉE

Si jamais une compression ou un autre précalcul demande trop de temps à votre goût, voici comment en gagner (du temps, pour le goût, il n'y a plus rien à faire). Attention, la méthode (donnée comme illustration par le physicien Langevin) reste difficilement réalisable, mais a le mérite d'exister.
Lancez le calcul. Partez en flisée à une vitesse de 299750 km/seconde. Revenez cinq minutes après. La Terre aura, elle, vieilli de 500 minutes (ou moins si votre fusée est poussive) et le calcul sera terminé.

TOUT METTRE DANS L'EQU

Imaginez une valeur. Imaginez que cette valeur puisse influer sur votre code, afin de conjuguer optimisation et paramétrabilité.

Imaginez un monde meilleur, dans lequel le plaquo-plâtre vaudrait deux fois moins cher.

; Multiplication par un nombre ; défini par EQU.

coef EQU 32

; Obligatoirement puissance de 2
; pour cet exemple.

IF coef/2
; Vaut 0 si COEF<2, ; et non nul, sinon !
ADD hl,hl
END ; END.IF pour MAXAM
IF coef/4
ADD hl,hl
END
IF coef/8
ADD hl,hl
END

Il s'agit là d'un exemple parmi tant d'autres d'utilisation de l'assemblage conditionnel.

MANIFESTE HIDEUR

Vous souhaitez connaître les attributs d'un fichier, bien que n'ayant aucun outil sous la main. Pas de soucis, cela reste beaucoup plus simple que de soutirer le numéro de téléphone d'une passante.

Après un OPENIN"fichier", dédaignez avec panache le message d'erreur (« Satyre ! »), et récupérez :
en + &77 : le type du fichier (célibataire ou non).
en + &7A : l'adresse de départ (ciné ou café).
en + &7D : la longueur (mensurations pour futurs achats de lingerie).
en + &7F : l'adresse d'exécution (numéro de la chambre).

Tout cela relativement à l'adresse de départ de la zone de travail AMSDOS (généralement A700), donnée en BE7D.

Bien sûr, cela demande d'avoir Amstrad

Live sous la main (ce qui consistue déjà un outil précieux), ou bien de disposer d'une mémoire d'éléphant. Et là, header, hideur, éléphant, madram, tout devient clair.

Les plus malins repéreront facilement ces infos dans un petit dump mémoire, un peu après le nom du fichier.

LE CONSEIL DE MARCEL

La taille des rosiers se fait en automne et au printemps, mais jamais pour les rosiers grimpants pour lesquels il suffit d'enlever le bois mort.

PERCUTANT

Bonjour ! Pour obtenir un son de percussion, il n'est pas obligatoire d'injecter du bruit, comme l'expose ce petit programme.

10 ' Drum of doom
20 '
30 t=20:DIM p(t-1),v(t-1)
40 dep=400:arr=3000
50 pe=0.3:pv=0.9
70 MODE 1
100 FOR i=0 TO t-1
110 p(i)=(i/(t-l))Ape*(arr-dep)+dep
115 x=i/t*100:PLOT x,p(i)/10,2
120 v(i)=(i/(t-l))Apv*(-15)+15
125 PLOT x,v(i)*10,3
130 NEXT
200 PRINT"Bonjour toi ! Tu es vraiment en train de recopier ça ?"
210 :FOR i=0 TO t-1: SOUND 129, p(i) , 2, v(i) :CALL &BD19.-NEXT: CALL &BB06: GOTO 200

La variable / représente le nombre de pas en 1/25 de seconde. Pe et Pv jouent sur l'évolution des enveloppes de période et de volume, respectivement. Une valeur de 1 aboutit à une progression linéaire ; en choisissant une valeur inférieure, la courbe évoluera rapidement sur le début pour ensuite se calmer, tandis qu'avec une valeur supérieure à 1, ça mettra longtemps à démarrer, et convergera rapidement sur la fin. Admirez la terminologie !

Ce programme permet d'autres bruitages rigolos, et j'espère qu'il vous donnera des idées pour le concours 10 ou 2 lignes.

QUEL SOUDARD !

Beb a résolu pour dix ans ses ennuis de faux contacts sur le port d'extension, d'une part en décrétant sa chambre « zone non-fumeurs », d'autre part en étamant chaque piste, puis en ôtant le surplus à l'aide d'une tresse à dessouder. Les connecteurs résistent alors un poil à l'enfichage. gage d'une jonction sans faille.

Parmi les autres recommandations pour le maintien de l'hygiène de vie, citons :

  • la mise en place de connecteurs Centronics (la carte mère est percée à cet effet).
  • le soudage de la nappe directement dans les trous en question, pour une intégration de l'interface sous le capot même du CPC.
  • et pour tout voyage, débranchez les cartes de RAM7 au niveau du connecteur HE-10, il est là pour ça.

TOUT ME TIENT A CoeUR

Répandu autant qu'enchevêtré en d'inextricables lamentations sur ma déchéance et les bugs du HACKER v4.81, le même Beb, décidément bien nommé, m'apparu tel le panonceau lumineux d'une issue de secours.
Il me signala que la commande RAM (qui permet un retour au BASIC sans effacer la mémoire) fonctionnait correctement dès que la ROM 1 était désélectionnée.

  • Vala, c'était bien, non ?
  • Mouis, mais t'en as pas marre des jeux de mots foireux ?
  • Si. mais non. (Georges)

m/dr/m, AMSLIVE n°18

★ ANNÉE: ???
★ AUTEUR: MADRAM

Page précédente : AMSLIVE n°17 - Comment Reagit Tout Crtc

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » AMSLIVE n°15 - PPI / PSG
» Coding » AMSLIVE : La rubriques programmation
» Coding » AMSLIVE n°07 - SINUS SITE , LA SUITE (2/2)
» Coding » AMSLIVE n°04 - Asic - Scrollhard
» Coding » AMSLIVE n°01 - Z80
» Coding » AMSLIVE n°02 - Choisir Son Assembleur
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 170 millisecondes et consultée 1709 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.