MSX Village forum

La Place des Développeurs BLOAD un fichier en RAM

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2907

Le 12/10/2022 à 08h58
Je n'arrive pas à charger un fichier binaire a un endroit donné de la mémoire avec l'instruction Basic BLOAD.
Deux problèmes :

1) BLOAD a un offset pour l'endroit où charger le fichier, mais j'ai trouvé nul part par rapport à quoi était cet offset.
Par rapport au début de la RAM (par ex. à 8000h pour un MSX avec 32+ KB de RAM) ?

2) Quelque soit l'adresse où je BLOAD, j'ai toujours une erreur "Bad file mode".
Le fichier .bin que j'essaye de charger est pourtant tout petit (moins de 100 octets).
Si je mets un entête de programme Basic, l'erreur disparaît, mais je souhaite pouvoir simplement charger des données a une adresse.
On peut pas juste charger un fichier binaire quelconque à une adresse donnée ?


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2907

Le 12/10/2022 à 18h28
C'est bizarre, ça ne fonctionne que si mon fichier binaire commence par l'entête des programmes sous Basic (les 7 octets).
C'est pas grave parce que je peux faire un DEF USR a l'adresse du fichier + 7, mais je trouve étrange qu'on puisse pas simplement charger un fichier quelconque en RAM... :hum


On est toujours ignorant avant de savoir.
Github    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10731

Le 13/10/2022 à 08h10
L'instruction bload utilise toujours le header
Si tu as un header FE 00 C0 00 C1 10 C0
Le programme se charge en C000h
Il démarre en C010h
Pour le décalage c'est à partir de l'adresse de début
, &H1000 va le charger en D000h
, -&H1000 va le charger en B000h


:noel
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2907

Le 13/10/2022 à 08h46
Et il n'y a aucun autre moyen en Basic de charger en mémoire un fichier binaire sans header ?
Par exemple si tu veux utiliser des niveaux de jeu créés avec un autre programme.


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 13/10/2022 à 09h06
Sans le header, non.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 13/10/2022 à 20h48
Y a toujours moyen de bidouiller des trucs...

Moi j'ai déjà BLOADé un BIN en VRAM, pour le POKEr en RAM là où je voulais.

BLOAD "fichier.bin",S,&hxxx

&hxxx l'adresse en VERAM où tu veux charger le binaire. Edité par ericb59 Le 13/10/2022 à 20h48


banniere-ericb59e
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1503

Le 13/10/2022 à 20h54
OK pour les bidouilles, mais là franchement, on est pas en train de dire qu'il faut faire 3 heures de programmation pour le rendre compatible avec un simple BLOAD ... Il suffit de rajouter 7 octets au fichier existant, et voilà.

Avec un éditeur hexa, y en a pour 2 minutes montre en main (et encore je compte large).


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2907

Le 13/10/2022 à 22h54
Ok, c'est juste étonnant quand il s'agit de données pour un jeu, mais effectivement, c'est pas la mer à boire. :)


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 14/10/2022 à 08h29
tu peux aussi ouvrir n'importe quel fichier comme si c'était un fichier "séquentiel"

10 OPEN "DATA.BIN" FOR INPUT AS #1
20 IF EOF(1) THEN 40
30 A$=INPUT$(3,1) : PRINT A$ : GOTO 20
40 CLOSE#1


input$ ( <nombre de byte>, <numero de fichier ouvert> )
Edité par ericb59 Le 14/10/2022 à 08h29


banniere-ericb59e
Site web    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2907

Le 14/10/2022 à 09h16
Avec cette méthode, si tu veux copier le fichier entier en RAM, il faut faire la copie octet par octet ?


On est toujours ignorant avant de savoir.
Github    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5566

Le 14/10/2022 à 11h41
aoineko :
Avec cette méthode, si tu veux copier le fichier entier en RAM, il faut faire la copie octet par octet ?


TU peux prendre 255 octets à la fois.

A$=INPUT$(255,1)


banniere-ericb59e
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie