Amstrad Plus Index du Forum

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

*****Loader universel (Load & Save)

 
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Programmation Cpc -> i/o load/save
Sujet précédent :: Sujet suivant  
Auteur Message
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Mar 9 Jan - 22:18 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Bonjour,


Travaillant en équipe avec Chany afin de réaliser un loader universel qui permet de tout lire aussi bien sur drive a ou b, que sur X-Mass, j'ai décidé de vous partager le code. Si l'idée d'être compatible avec la x-Mass de TotO vous venait, sachez que le code a été testé et qu'il est 100% compatible avec la x-Mass, que ce soit avec ACMEdos ou iMPdos.



Voici donc, le fruit de ma réflexion.

Code:
      ORG &A500
      ENT $
;
; bcd4
; in : hl=rsx name
; out : c=rom number
;     : hl=adresse de la rsx dans la rom
;
;
;
          LD   HL,(&BE7D)
          LD   A,(HL)
          PUSH AF       ; recup numero de lecteur
          CP   3
          CALL Z,foundrsx  ; si 3 cherche la Rsx "ùX"                                                          
          PUSH BC           ; sauve numéro de rom
          PUSH HL          ; sauve adresse ou sauter dans la rom
;   
          DI
          LD   BC,&7F88+2 ; mode 2 - Lower Rom On | Upper Rom Off
          OUT  (C),C
          EXX
          CALL &44     ; réinit la zone 0-#3f
          CALL &08BD   ; réinit les vecteurs systèmes (vecteur pour 6128 et 6128 plus)
          CALL &BB00   ; init le Key Manager
          LD   A,&C9    ; disable char pour eviter les messages des roms                                              
          LD   (&BB5A),A  ; c'est un peu brut mais ça fonctionne !
          LD   DE,&40    ; init All ROMs
          LD   HL,&ABFF
          CALL &BCCB
          LD   A,&CF    ; enable char 
          LD   (&BB5A),A
          POP  HL       ; recup adr de la Rsx
          POP  BC       ; recup numero de rom           
;
          POP  AF       ; recup numero de drive
;
          CP   3
          CALL Z,&1B    ; si lecteur =3 execute Rsx (ùX)   
;
          LD   HL,(&BE7D) ; Quoiqu'il en soit on poke le bon lecteur
          LD   (HL),A
;
;
; Load a file
;
loading   LD   DE,&C000     ; buffer
          LD   HL,file      ; nom a charger
          LD   B,endfile-file ; le nom contient combien de lettres ?                                                  
          CALL &BC77        ; charge le Header
          LD   HL,&7D      ; adresse de début du fichier
          CALL &BC83
          CALL &BC7A
          JP   &9788       ; adresse d'execution
;
; Cherche ACMEDos ?
;
foundrsx
          LD   HL,rsx0
          CALL &BCD4
          JR   NC,foundrsx1
          RET
;
; Cherche iMPdos ?          
;
foundrsx1
          LD   HL,rsx1
          CALL &BCD4
          JR   NC,bip
          ret       
;
; Rsx Not found -> Bip
;
bip       LD   A,7      ; biiiip
          JP   &BB5A
;
rsx0   byte "D"+&80
rsx1   BYTE "X"+&80
file  BYTE "IMPACT.BIN"
endfile










_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Dernière édition par Ast le Mar 30 Oct - 17:20 (2018); édité 3 fois
Revenir en haut
Francouai


Hors ligne

Inscrit le: 23 Avr 2017
Messages: 201
Localisation: IDF
Masculin
Point(s): 60
Moyenne de points: 0,30

MessagePosté le: Mer 10 Jan - 10:00 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

salut!
quand tu parles de "LOADER", tu veux dire un logiciel type "Filemanager"?
tu navigues avec le curseur pour sélectionner les fichiers et la touche ENTER pour le lancer?
tu fais une compatibilité avec la carte M4 aussi?
_________________
--
Francouai
CPC 6128, 6128+, ATARI STe, Mega STE, FALCON, AMIGA A500-Vampire/A1200/A4000-40.


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Mer 10 Jan - 11:11 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Non, un loader c'est une routine qui re permet de lire un fichier basic, binaire ou ascii....
Quand tu fais run"Disc la routine qui va lire les données sur ton Disc s'appelle un loader.
Ma routine est compatible drive à/b et x-mass.
Malheureusement pour la m4, cela risque d'être difficile vu que je n'en ai pas mais, si une âme charitable venait à m'offrir une m4, il m'apparaît évident que je le ferais.

Concernant le filemanager, il est toujours wip!
_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
Francouai


Hors ligne

Inscrit le: 23 Avr 2017
Messages: 201
Localisation: IDF
Masculin
Point(s): 60
Moyenne de points: 0,30

MessagePosté le: Mer 10 Jan - 11:29 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

ah ok!
j'attends que tu releases ton FILEMANAGER pour tester sur ma M4.
_________________
--
Francouai
CPC 6128, 6128+, ATARI STe, Mega STE, FALCON, AMIGA A500-Vampire/A1200/A4000-40.


Revenir en haut
cmp


Hors ligne

Inscrit le: 08 Sep 2014
Messages: 186
Localisation: nord
Masculin Balance (23sep-22oct)
Point(s): 9
Moyenne de points: 0,05

MessagePosté le: Mer 10 Jan - 13:32 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Lol Smile Si tu payes une M4 à David pas de problème Smile
_________________
CMP from impact cpc


Revenir en haut
Skype
Publicité






MessagePosté le: Mer 10 Jan - 13:32 (2018)    Sujet du message: Publicité

Revenir en haut
cmp


Hors ligne

Inscrit le: 08 Sep 2014
Messages: 186
Localisation: nord
Masculin Balance (23sep-22oct)
Point(s): 9
Moyenne de points: 0,05

MessagePosté le: Mer 10 Jan - 13:33 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

En tout cas Smile


Merci pour ce bout de code David ^^ Smile


Sympa de faire partager la communauté.
_________________
CMP from impact cpc


Revenir en haut
Skype
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Mer 10 Jan - 13:38 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Un bout de code ? C'est le loader complet... y'a plus qu'à adapter. Mort de Rire
_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
cmp


Hors ligne

Inscrit le: 08 Sep 2014
Messages: 186
Localisation: nord
Masculin Balance (23sep-22oct)
Point(s): 9
Moyenne de points: 0,05

MessagePosté le: Mer 10 Jan - 16:36 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Je m'en doutais Smile que tu allais dire cela ^^  Mort de Rire
_________________
CMP from impact cpc


Revenir en haut
Skype
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Mer 21 Mar - 14:09 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Je vais bientôt modifier la routine proposée plus haut car il y a quelques faiblesses.

En premier lieu, il faut que le loader récupère quelques infos comme :
-Le répertoire dans lequel nous nous trouvons
-Le numéro du lecteur

En effet, lors d'un RUN" certains paramètres sont réinitialisés, donc...
_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Jeu 29 Mar - 23:56 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Voici la routine universelle que je vous avais promis. 
Elle permet de lire, aussi bien sur le drive a, b que sur la x-Mass, sous iMPdos, bien évidemment.

Code:
;
; Loader Universel v2 compatible iMPdos - AsT/iMPact 29/03/2018
; #b8fa-fb-fc : Secteur répertoire courant
; #b8fd : numéro de drive (0=A | 1=B | 3=X-Mass)
;
         org #a000
;
         ld hl,#b8fa ; sauve la config
         ld de,config ; drive+repertoire
         ld bc,4
         ldir
;
         LD   HL,(&BE7D) ; Début de l'Amsdos
         LD   A,(HL) ; récupère numéro du lecteur
         push af ; sauve lecteur
         ld (#b8fd),a
         DI
         LD   BC,&7F88+2 ; mode 2 - Lower Rom On | Upper Rom Off
         OUT  (C),C
         EXX
         CALL &44     ; réinit la zone 0-#3f
         CALL &08BD   ; réinit les vecteurs systèmes (vecteur pour 6128 et 6128 plus)
         CALL &BB00   ; init le Key Manager
         LD   A,&C9    ; disable char pour eviter les messages des roms                                              
         LD   (&BB5A),A  ; c'est un peu brut mais ça fonctionne !
         LD   DE,&40    ; init All ROMs
         LD   HL,&ABFF
         CALL &BCCB
         LD   A,&CF    ; enable char 
         LD   (&BB5A),A
;
          ld hl,config ; restitue la config
          ld de,#b8fa ; repertoire+numéro de drive
          ld bc,4
          ldir
          ld hl,#b8fa ; copie adresse secteur repertoire
          ld de,#b34A ; dans adresse impdos
                      ; Sector Low
          ldi:ldi
          ld a,(hl)   ; Sector High
          ld (#b349),a 
          inc hl      ; Drive
;         
          ld a,(hl)
          CP   3
          CALL Z,foundrsx    ; si lecteur =3 recherche et execute Rsx (ùX)   
;
          pop af ; recupère numéro du lecteur
          LD   HL,(&BE7D) ; Quoiqu'il en soit on poke le bon lecteur
          LD   (HL),A
;
; Load a file
;
loading   LD   DE,&C000     ; buffer
          LD   HL,file      ; nom a charger
          LD   B,endfile-file ; 
          CALL &BC77        ; charge le Header
           
          LD   HL,&c000      ; adresse de début du fichier
          CALL &BC83
          CALL &BC7A
          JP   &bb18    ; Attente d'une touche
 
;
; Cherche iMPdos ?          
;
foundrsx
          LD   HL,rsxX
          CALL &BCD4
          JR   NC,bip
          jp #1b
;
config byte 0,0,0,0 ; sauvegarde du répertoire+du numéro de drive                  
;
; Rsx Not found -> Bip
; Bip si iMPdos n'est pas trouvé.
;
bip       LD   A,7      ; biiiip
           JP   &BB5A
;
rsxX   BYTE "X"+&80
file  BYTE "ast.scr"
endfile










_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Dernière édition par Ast le Mer 4 Avr - 17:45 (2018); édité 1 fois
Revenir en haut
Publicité






MessagePosté le: Jeu 29 Mar - 23:56 (2018)    Sujet du message: Publicité

Revenir en haut
roudoudou


Hors ligne

Inscrit le: 14 Juil 2016
Messages: 430
Localisation: LYON
Masculin
Point(s): 50
Moyenne de points: 0,12

MessagePosté le: Ven 30 Mar - 13:28 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

J'apporte ma M4 demain, tu pourras nous faire une version, compatible aussi :p

Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Ven 30 Mar - 13:41 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Pourquoi pas ? J'y avais pensé.
_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
Kris


Hors ligne

Inscrit le: 08 Sep 2014
Messages: 285
Localisation: 35
Masculin Gémeaux (21mai-20juin)
Point(s): 112
Moyenne de points: 0,39

MessagePosté le: Mar 3 Avr - 15:04 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Merci pour le partage du source Smile
_________________
Kris


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Mer 4 Avr - 17:49 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Vu que Chany en avait besoin, j'ai réalisé cet après midi le code pour la sauvegarde sur xmass.
Je partage donc avec vous, histoire que, si vous en aviez besoin, vous puissiez puiser ici.

Code:
;
; Sauvegarde Xmass Universel - Drive A/B/xMass iMPdos  
; by AsT/iMPact 
;
 org #a000
       LD   HL,(&BE7D) ; Debut de l'Amsdos
         LD   A,(HL) ; recupere numero du lecteur
         push af ; sauve lecteur
         ld (#b8fd),a
;
 ld hl,#b349 ; sauve les datas du secteurs
 ld de,config
 ld bc,3
 ldir
;
 ld hl,#B300 ; sauve parametre dir
 ld de,param
 ld bc,#60
 ldir
;
 ld hl,#b8fa ; sauve adresse sect repertoire
 ld de,config2
 ld bc,3
 ldir
;
         DI
         LD   BC,&7F88+2 ; mode 2 - Lower Rom On | Upper Rom Off
         OUT  (C),C
         EXX
         CALL &44     ; reinit la zone 0-#3f
         CALL &08BD   ; reinit les vecteurs systemes (vecteur pour 6128 et 6128 plus)
         CALL &BB00   ; init le Key Manager
         LD   A,&C9    ; disable char pour eviter les messages des roms                                              
         LD   (&BB5A),A  ; c'est un peu brut mais ca fonctionne !
         LD   DE,&40    ; init All ROMs
         LD   HL,&ABFF
         CALL &BCCB
         LD   A,&CF    ; enable char 
         LD   (&BB5A),A
;
 ld bc,#7f8c+2
 out (c),c
;
 ld hl,config ; recupere secteur ou ecrire le
 ld de,#b349 ; nom du fichier dans directory
 ld bc,3
 ldir
 
 ld hl,(#be7d)
 pop af
 ld (hl),a
 ld (#b8fd),a
;
        ld a,(hl)
        CP   3
        CALL Z,foundrsx    ; si lecteur =3 recherche et execute Rsx (ùX)    
;
  ld b,finnom-nom ; longueur du nom à sauvegarder
 ld hl,nom ; adresse du nom du fichier 
 ld de,#c000 ; buffer
 call #bc8c ; ouverture du fichier en sortie
 jr nc,bip  ; si erreur -> bip
 ld hl,#c000 ; adresse de départ
 ld de,#3FFF ; Longueur du fichier à sauver
 ld bc,#caca ; Adresse d'execution
 ld a,2      ; type de fichier (0 : bas | 1 : Basic Protégé | 2 : Binaire | #16 : Ascii)
 call #bc98  ; On sauvegarde
 jr nc,bip   ; si erreur -> Bip
 call #bc8f  ; Fermeture du fichier en sortie
;
lastconfig
;
 ld hl,config2 ; recupere secteur position directory
 ld de,#B34A
 ld bc,2
 ldir
 ld a,(hl)
 ld (#b349),a
;
  ld hl,param ; restitut parametre dir
 ld de,#b300
 ld bc,#60
 ldir
 ret
;
; Cherche iMPdos ?          
;
foundrsx
          LD   HL,rsxX
          CALL &BCD4
          JR   NC,bip
          jp #1b
;
; Rsx Not found -> Bip
; Bip si iMPdos n'est pas trouve.
;
bip       LD   A,7      ; biiiip
          call   &BB5A
 jr lastconfig
;
rsxX   BYTE "X"+&80
;
nom byte "chany.ch1"
finnom
;
config byte 0,0,0,0 ;                  
config2 byte 0,0,0 ; retour repertoire
param ds #60,0
;



_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
Ast
Administrateur

Hors ligne

Inscrit le: 05 Sep 2014
Messages: 3 169
Masculin
Point(s): 609
Moyenne de points: 0,19

MessagePosté le: Sam 1 Sep - 12:16 (2018)    Sujet du message: *****Loader universel (Load & Save) Répondre en citant

Bonjour,


Suite à une discussion avec Chany, j'ai décidé de vous partager une version plus compacte d'un loader de fichier compatible AmsDos & XMass.
C'est le moment de poser vos questions, si toutefois vous en aviez.


Code:

      ORG &A000
      ENT $
;
; #b8fa-#b8fb : sector low
; #b8fc : sector High
; #b8fd : current drive
;      
; #b34a-#b34b : sector low
; #b349 ; sector high
; peek(#be7d) : start amsdos adr
;
; X-Mass & Amsdos Loader 100%
; ------ AsT/iMPACT 01/09/18
;            

          di
          ld   bc,&7F88+2
          out  (c),c
          exx
          call &44      ; restore 0-#3f
          call &08BD    ; restore vector system
          call &BB00    ; reinit keyb buffer and back to basic
          ei
;
          ld   a,(&B8FD) ; save current drive
          push af
;                       
; Save iMPdos important data
;
          ld   hl,&B300
          ld   de,xmassbuffer
          ld   bc,&0100
          ldir
;
          call &BB57    ; txt off
;
          ld   de,&40   ; init All roms (rom 7 included)
          ld   hl,&ABFF
          call &BCCB
;
          call &BB54    ; txt on
;                       
; Restore iMPdos important data
;
          ld   hl,xmassbuffer
          ld   de,&B300
          ld   bc,&0100
          ldir
;
          pop  af       ; current drive number
          ld   hl,(&BE7D) ; in Amsdos drive
          ld   (hl),a
          cp   3        ; xmass ?
          jr   nz,loadfile
;                      
; X-Mass flag drive detected ?
;
          call findrom  ; find rom "|x"
;
loadfile
          call &B903    ; disable upper rom
          ld   hl,file
          ld   b,file1-file
          call load0
;
          call &BB18
;
          ld   hl,file1
          ld   b,file2-file1
          call load0
;   
          ret
;
load0     ld   de,&C000
          call &BC77
          ld   hl,&C000
          call &BC83
          jp   &BC7A
;
findrom   ld   hl,rsxX
          call &BCD4
          ret  nc
          jp   &1B
;
rsxX  BYTE "X"+&80
;
file  BYTE "vacance1.scr"
file1 BYTE "vacance0.scr"
file2
;
; Xmass buffer here
; Zone #b300-#b400
;                
xmassbuffer FILL 256,0
;

_________________
Ast/iMPACT

Par le pouvoir du crâne ancestral....


Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Amstrad Plus Index du Forum -> Programmation Cpc -> i/o load/save Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com