BAS:
		'**************************************
		'*     GENERATEUR DE DISQUETTES       *
		'*     VIRTUELLES AU FORMAT DATA      *
		'* Commande CpcAlive a partir du dos: *
		'*           ! CreaDisc               *
		'**************************************

'** Initialisations **

        gosub ProgIni

        INPUT "NOM DE DISQUETTE/DISKETTE NAME:",file$
		|OUTPUT,file$,@er%:if er%<>0 then FileOutputEr

'** SORTIE ENTETE DISQUE **

        PRINT#8,"MV - CPCEMU Disk-File"
        PRINT#8,"Disk-Info"
        'Deplacement pointeur de fichier en &30
        |OUTPUT,":GO,&30",@er%:if er%<>0 then FileOutputEr
        value=40:GOSUB PrnOByte:'nombre de pistes
        value=1:GOSUB PrnOByte
        value=&1300:GOSUB PrnOWord:'taille pistes

        'Deplacement pointeur de fichier en &100
        |OUTPUT,":GO,&100",@er%:if er%<>0 then FileOutputEr

'** SORTIE PISTES **

        FOR piste=0 TO 39
                gosub PstOut
        NEXT

'Ferme le fichier disquette et retablit le fichier de sortie par defaut

        |OUTPUT,":CLOSE"

'Charge disquette

        |INPUT,file$,@er%:if er%<>0 then FileInputEr
		cls:? upper$(file$):cat
        end

'----------------------------------------------------------------------

'** ENTETE PISTE + PISTE **
'<piste=numero de piste
PstOut:
        PRINT"Creation piste ";piste

        '** ENTETE PISTE **
		PRINT#8,"Track-Info"
        RESTORE DataPstHead
        FOR i=1 TO 12
                GOSUB DataRead
        NEXT
        FOR i=1 TO 9
                value=piste:GOSUB PrnOByte
                FOR j=1 TO 7
                        GOSUB DataRead
                NEXT
        NEXT
        value=0
        FOR i=1 TO 160
                GOSUB PrnOByte
        NEXT

        '** DATAS PISTE **
		FOR i=1 TO 9
                ':D,block_lenght,adr_block_source_in_Cpc_memory,file_end,@error_code
                |OUTPUT,":D,&200,&A9B0,-1",@er%
                if er%<>0 then FileOutputEr
        NEXT

        RETURN

'** LECTURE DATAs & SORTIE **
DataRead:
        READ a$:value=VAL("&"+a$)
        goto PrnOByte

'output word in PRN file
'<Value
PrnOWord:
        gosub PrnOByte
        value=int(value/256)

'output byte in PRN file
'<Value
PrnOByte:
        print#8,chr$(value and 255);
        return

'** Initialisations **
ProgIni:
        'init variable de rapport d'erreur
        er%=0
        'init tampon secteurs
        FOR i=0 TO 511
                poke &A9B0+i,&E5
        NEXT
        mode 2
        return

FileOutputEr:
        if er%=1 then ? "|OUTPUT,"+file$+": parameters error":end
        if er%=2 or er%=5 then ? file$+": refused access":end
        if er%=3 then ? file$+": directory not found":end
        if er%=4 then ? "|OUTPUT,"+file$+": no more Dos handle":end
        ?"Output file error":end

FileInputEr:
        if er%=1 then ? "|INPUT,"+file$+": parameters error":end
		if er%=2 then ? file$+": file not found":end
        if er%=3 then ? file$+": directory or file not found":end
        if er%=4 then ? "|INPUT,"+file$+": no more Dos handle":end
		if er%=5 then ? file$+": refused access":end
        ?"Input file error":end

DataPstHead:

'** DATAS ENTETE PISTE **
DATA 00,00,00,00,00,00,00,00,02,09,4E,E5
DATA 00,C2,02,00,00,00,02
DATA 00,C3,02,00,00,00,02
DATA 00,C4,02,00,00,00,02
DATA 00,C5,02,00,00,00,02
DATA 00,C6,02,00,00,00,02
DATA 00,C7,02,00,00,00,02
DATA 00,C8,02,00,00,00,02
DATA 00,C9,02,00,00,00,02
DATA 00,C1,02,00,00,00,02


