Ce matin je me suis amusé a essayer de convertir ATOMIK en version disquette, et la solution de Daniel reste certainement la plus simple à cause du manque de place en RAM avec le DOS, pour la compression ca n'a pas était concluant !!!
Par contre je me suis aperçu de 2 choses en essayant d’écrire directement dans des secteurs:
1) les docs techniques (clefs pour MO5 et assembleur des périphériques) sont bourrés d'erreurs ou omissions et des erreur dans la typographie des adresses ....
2) Au départ je voulais utiliser l'utilitaire de Daniel DCFDutils pour stocker le binaire en temps que fichiers dans un .fd vide et fraichement formaté, et en ayant l'espoir que le fichier serait crée défragmenté sur des secteurs contigües.
L'utilitaire crée bien un fichier sur des secteurs contigües mais dans un ordre décroissant
et de plus avec le système de fichiers et de bloc de demi piste ce n'est pas possible de le relire
Par contre si je fait un SAVEM"" sous DCMOTO de la zone mémoire concerné sur une disquette vierge j'obtiens un fichier sur des secteurs contigües dans un ordre croissant
Mais par contre impossible de le relire 'brut' par secteur évidemment
Finalement pour intégrer mon binaire "brut" dans le .fd j'ai opté pour cette solution :
- créer une nouvelle disquette formaté avec le DOS
- sous DCMOTO SAVEM"TOTO",&H3200,&HAFFF,&H3200 (uniquement pour créer un fichier et allouer les blocs du système de fichier, avec de la marge en plus, aucune importance du contenu, puisque impossible de charger le binaire complet avec le DOS)
- sous DCMOTO reboot avec le DOS
- dans l'outil mise au point injecter le binaire "brut" à partir de $3200
- injecter en $1000 un petit outil en ASM que j'ai créer pour copier les données dans les secteurs réservé précédemment par le SAVEM
- ne surtout pas retourner dans l'emu mais modifier au préalable l'adresse PC par $1000.
- retourner dans l'emu et la il écrit le binaire dans les secteurs
- une fois terminé le jeu démarre, on peut rebooter et finir en écrivant le loader binaire sur le .fd.
Le plus compliqué c'est de trouver les secteurs occupés par le fichier crée par SAVEM, il faut obligatoirement utiliser un éditeur hexadécimal, et bien décortiquer la FAT
J'ai rencontré un problème lors du chargement en RAM en utilisant les chargement de secteurs par le moniteur, dès que j'écrit dans le zone RAM en $9E00-$9FFF, je pense à un problème de pile (le registre S est dans cette zone en Basic) mais je ne connais pas assez le MO5 pour affirmer et contourner ce problème
Merci Daniel, grâce à toi Je me suis bien amusé et programmé un nouveau truc
Voici mon modeste outil pour écrire directement dans les secteurs :
Code : Tout sélectionner
;FDD
;-------------------
REGISTER EQU $2048
EXECUTE EQU $26
DRIVE EQU $2049
PISTE EQU $204A ;( 16 bits)
SECTEUR EQU $204C
BUFFER EQU $204F ;(16 bits)
STATE EQU $204E
INIT EQU $01
READ EQU $02
WRITE EQU $08
.ORG $1000
; ECRITURE DANS DES SECTEURS D'UN BINAIRE
PSHS A,B,X,Y
LDX #$3200 ; 7E 32 D6 7E 32 58
LDY #$22
PISTEADD2
LDB #$01
WRITESECTOR
STX BUFFER
STY PISTE
STB SECTEUR
LDA #$00
STA DRIVE
LDA #WRITE
STA REGISTER
PSHS X,B,Y
SWI
FCB $26
PULS Y,B,X
TBA
LDB #$FF
ABX
INX
CPX #$9E00
BHS GO
TAB
INCB
CMPB #17
BNE WRITESECTOR
INY
JMP PISTEADD2
GO
PULS Y,X,B,A
JMP $8350
Voici mon modeste code pour lire directement les secteurs :
Code : Tout sélectionner
;FDD
;-------------------
REGISTER EQU $2048
EXECUTE EQU $26
DRIVE EQU $2049
PISTE EQU $204A ;( 16 bits)
SECTEUR EQU $204C
BUFFER EQU $204F ;(16 bits)
STATE EQU $204E
INIT EQU $01
READ EQU $02
WRITE EQU $08
.ORG $1000
LDX #$3200 ; 7E 32 D6 7E 32 58
LDY #$0022
PISTEADD
LDB #$01
READSECTOR
STX BUFFER
STY PISTE
STB SECTEUR
LDA #$00
STA DRIVE
LDA #READ
STA REGISTER
PSHS X,B
SWI
FCB $26
PULS B,X
TBA
LDB #$FF
ABX
INX
CPX #$9E00
BHS GO
TAB
INCB
CMPB #17
BNE READSECTOR
INY
JMP PISTEADD
GO
JMP $8350