Plus de concret moins de blabla ? Voici quelques routines afin d'expérimenter par vous-même le monde fabuleux du DOS.Toujours tout prévoir. Que KL_FIND_COMMAND ne trouve pas votre RSX est peu probable si vous avez bien initialisé la ROM. Mais sait-on jamais ? Mieux vaut un message d'erreur qu'un plantage, surtout si c'est un plantage à retardement. Pour les opérations disque, c'est encore plus évident : vous ne pouvez pas certifier qu'il y aura bien une disquette dans le lecteur, formatée, en bon état, etc. S'il y a eu erreur, le Carry sera faux. Quant à repérer de quelle erreur il s'agit, ça sera l'objet d'un autre article. Le rhum ne se fait pas en 1 jour. PETITE REMARQUE Une fois la RSX trouvée, le nom ne sert plus à rien. On pourrait donc l'écraser en réutilisant l'octet pour stocker le poids faible de l'adresse. Mais ceci engendrerait un plantage si vous réexécutez votre programme sans le réassembler. On place donc l'adresse et le numéro de ROM à côté (DEFS 3), tout proprement. Mais attention à l'appel de la routine (RD_SECT+1 et non pas RD_SECT). LOST PATROL Pour lire un secteur, il faut préciser son "nom". Je ne parle pas de numéro : &C1 (=193) n'est pas le 194ème secteur de la piste ! Si vous essayez de lire un secteur &c? sur une disquette formatée "SYSTEM" (secteurs de &41 à &49), vous obtiendrez un Read ta il. Il faut analyser le format de la disquette pour être sûr de demander les bons secteurs. C'est le rôle du LOGIN, qui est effectué RSX 1 par 1ère méthode (vecteur #1B) LD HL,ERROR_EN CALL #BCD4 ;KL_FIND_COMMAND RET NC ;ou JR NC,ERROR LD A,1 ;messages inhibés JP #1B ;le RET de la routine ; rendra la main ERROR_EN DEFB 1 + #80 ;1er et dernier caractèrepar les RSX A et B. Au retour, la table de paramètres FDC est mise à jour. Il ne reste qu'à lire FSC (premier secteur de chaqui piste) situé en +&19F pour le lecteur A et ei +&1DF pour le lecteur B, par rapport ai début de la table AMSDOS, dont l'adresse est stockée en &BE7D. Vous aurez quelque chose qui ressemble à :LD HL,(&BE7D) LD BC,&19F ADD HL,BC LD A,(HL)...Ca y est, vous avez conçu une routine de lecture du catalogue ? Il vous manque peut être un algorithme de tri ? AMSTRAD LIVE peut vous aider.Madram RSX 4 par 2eme méthode (restart #18) LD HL,RD_SECT CALL #BCD4 RET NC ;problème LD (RD_SECT+1),HL LD A,C ;Numéro de ROM LD (RD_SECT+3),A ; un peu plus tard LD E,0 ; Lecteur/ tête LD D,0 ; Piste LD C,#C1 ;Secteur LD HL,RD_BUF ;Tampon RST #18 ;Le retour se fera DEFW RD_SECT+1 ;après le DEFWJP NC,RD_ERR ;Il y a eu une erreur RET RD_SECT DEFB #84 ;On y copiera l'adresse et le DEFS 3 ; numéro de ROM (3 octets) RD_BUF DEFS 512 ;Dépend de la taille du secteur AMSLIVE n°7 |