IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hardware Discussion :

quel langage pour modifier le BIOS


Sujet :

Hardware

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    octobre 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : octobre 2020
    Messages : 20
    Points : 7
    Points
    7
    Par défaut quel langage pour modifier le BIOS
    Bonjour

    Je souhaite modifier un BIOS pour usage personnel, je souhaite aussi créer mon propre utilitaire pour flasher le BIOS.

    Pour cela quelles compétences sont nécessaires c.a.d quel langages de programmations faut-il connaître ?

    J’hésite entre le C ou le C++ et l’assembleur, et si j'ai lancé cette conversation ici c'est que j'estime que l’assembleur est le plus probable.

    Merci de vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    décembre 2010
    Messages
    14 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2010
    Messages : 14 398
    Points : 22 277
    Points
    22 277
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Pour modifier un BIOS il faut utiliser le langage hexadécimal, pour transférer le fichier ainsi conçu, on peut utiliser des mnémoniques de type assembleur.

    Avant on utilisait une DATA I/O (ICI) pour modifier directement l'ÉÉPROM avec les nouveaux codes hexadécimaux.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  3. #3
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 400
    Points : 17 203
    Points
    17 203
    Par défaut
    Citation Envoyé par toyo2020 Voir le message
    Je souhaite modifier un BIOS pour usage personnel, je souhaite aussi créer mon propre utilitaire pour flasher le BIOS.
    c'est comme les OS , chaque BIOS est spécifique donc il faut un SDK qui corrresponde à chaque carte-mère.
    Et oui comme le dit mon prédécesseur il faut un programmateur d'EPROM donc le kit sera sans doute livré avec

  4. #4
    Inactif  

    Homme Profil pro
    Directeur R&D
    Inscrit en
    novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur R&D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : novembre 2009
    Messages : 22
    Points : 0
    Points
    0
    Billets dans le blog
    1
    Par défaut OOOUUUUuuu... TRES-BON !...
    Bonjour Mmes, Mrs... zé autres Programmeurs...

    (Pour les '''Gentils-Admins'''... si je ne suis pas au bon endroit (comme je le suppose, mais c'est pas dit ?... dites moi où ?... et je le déplacerai, avec un lien ici, car le sujet m'intéresse beaucoup... MERCI...))

    Vous savez que '''tout viens à point à qui sait attendre...''', et bien...

    1-J'en ai marre du '''Monde-de-Bill''' !... (oui je sais, je l'utilise souvent sur les forums !... mais j'aime ce jeu de mots !)

    2-J'en ai marre que MA machine... soit utilisée par '''d'autres''', voir ne fonctionne plus à cause d'eux !!!... (Les MAJ, Modifs, Versions, certificats ...zé-autres !!!...)

    Donc depuis début 2020... j'apprends Linux, Python, Apache, HTML, CSS, PHP, MySQL, C... j'achète du '''vieux matos''', des '''bouquins''' sur les avis des '''forumeurs'' (les Eyrolles entre autres), et j'apprends en autodidacte... comme depuis 1980... à mes débuts...(Zx80)

    Bref, je '''Bidouille''', et comme, RIEN N'EST LIBRE ni FINI... dans ce MONDE ?!?!......

    J'ai entrepris de me faire MA Machine => La base... un HP DL580 G5, 64Go ram, 4*146Go sas... pour 100euros !... une merveille, où j'ai '''viré''' W-Server 2008 r... eur... (oui je sais mauvais jeu de mots...)

    (Heuuu... les '''écolos''', au lieu de nous rabattre les oreilles pour des conne***** !!!... que pensez-vous du recyclage intelligent du matériel pas cher... aux démunis... ou presque ?????.....
    ... ça vide les poubelles, évite l'augmentation carbone, et permet l'apprentissage et la maîtrise... en supprimant les dépendances et monopoles... à méditer !!!... sans compter l'entraide et la convivialité...)

    Ensuite, j'ai essayé, tous les '''débian-débiles'''... (oui, j'imite Canonical !)... débians, que j'ai '''viré'''... avec les z'autres aussi, TROP mal faits !...
    ... pour... finir avec Kubuntu !... Stable-Propre-Lisible... Une bonne base... à MODIFIER-bien-sur !!!...

    Et voila, le but du jeu => Pouvoir TOUT posséder-utiliser-régler... de l'allumage => jusqu'à l'extinction !... (Raspberry+Python+carte domo... peut-être ?... non, SUREMENT !!!...)

    Et c'est là que nous arrivons au sujet :

    En théorie, le BIOS, Firmwares et autres contrôleurs sont '''écrits''', en EPROM, voir EEprom... bref...

    MAIS, Question => pour fonctionner, ils sont positionnés, dans une portion de la RAM... ou ailleurs(ROM en accès direct ?...) => NON-ACCESSIBLES ?... (Mais où, et Comment ?... Livres/Sites/Cours ?...)

    QST-2 => S'ils sont en RAM, est-il possible d'accéder à cette portion de la RAM, pour les modifier APRES-installation, et démarrer SA propre session MODIFIEE ?...
    ( Vous vous rappelez les peek et poke... et les goto... ça '''existe''' toujours... mais autrement, faut juste savoir comment ?... et ou est la '''MANNE-Instructive''' ???...(les Sites, librairies, fac, Profs ?...)

    QST-3 => Si on crée une machine virtuelle, ces Données, Réglages, Traductions, et autres '''Protections''' sont-t-ils Modifiables de l'extérieur ?... (du pc lui-même ?... ou d'une autre machine virtuelle ?... Y-compris les '''droits-Admin-journaux-ect'''... genre cette salop*** de SMART !!!...)

    QST-4 => On parle de '''monde-libre''', c'est pas vraiment ça...donc, quand je me suis acheté => Développement Système sous Linux(eyrolles)... dans le magasin, j'ai fait la connaissance d'un Monsieur (+70ans), qui m'a expliqué pourquoi mon serveur avait planté !... avec LES débians 20.04 !!!... une vague histoire de compteur et génération de nombre/ou calcul ?!?!... bref, qui BUG !!!...
    (là aussi... faut chercher ?!?!...)

    Donc, avec cette possibilité, de pouvoir Modifier, Régler, et PROTéGER sa machine... je pourrai '''Shunter-le-Bazard'''... Et... Je serai... sous Débian !!!... avec L'Origine, vous voyez ?...

    VOILA pourquoi votre sujet m'intéresse... Je vais prendre LES infos, que vous me donnez, les récupérer, et les assimiler, avant de revenir... pour en discuter... si vous voulez ?...

    Le BUT ?... Créer MON '''Organe Numérique''', qui exécute-réalise-et fonctionne par et pour MOI !... (J'ai plein d'autres organes... mais pas celui là !...) Et,

    N'oubliez pas... on a acheté la '''machine'''... elle NOUS appartient !!!... c'est pas une location !... c'est NOTRE propriété, et le pire c'est que, quelque soit '''l'ensemble'''...

    ... RIEN n'est fait, en totalité, pour l'Utilisateur Final !!!... Et moi, je compte bien changer cela !!!... au moins pour MÔA !!!...

    MERCI de m'avoir lu jusqu'au bout, et surtout, en dehors de ma façon de présenter les choses, j'attends...

    ===>>> les critiques, les corrections, explications, infos, liens... D'AUTRES points de vues !...

    ... TOUT ce qui peux faire avancer le '''SMILBLICK'''... ( Une 'Tite pensée pour lui en passant... le 1er novembre...)

    RE-MERCI à TOUSSS ...@+++...

    PS... Heuuu... Pourquoi mon ID me présente comme nouveau candidat ???... ça doit faire '''une bonne dizaine d'années''' que je suis inscrit ???... et bien plus que je viens ???... je vais essayer de corriger... MERCI d'avance...

  5. #5
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    7 400
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 400
    Points : 17 203
    Points
    17 203
    Par défaut
    mister.BIXS j'arrive pas à comprendre là où vous voulez en venir.
    Merci de faire plus clair.
    Vous voulez créer votre propre microprocesseur, votre propre BIOS ?

  6. #6
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    décembre 2010
    Messages
    14 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2010
    Messages : 14 398
    Points : 22 277
    Points
    22 277
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Ce n'est pas si simple l'utilisation du BIOS et son fonctionnement.

    J'ai appris et même formé des personnes à l'Assembleur 8086 et 68000.

    La partie sur laquelle je m'étais spécialisée, c'est justement celle qui te pose problème.

    Il y avait un bon livre à l'époque La maîtrise du MS-DOS et du BIOS fait par Philippe Mercier un professeur d'Université.

    Je me suis formé avec tous ces livres, c'était vraiment une pointure Philippe Mercier dans les années 1990.

    Pour parler simplement :

    Il y a le BIOS dans une mémoire morte de type PROM et une autre partie du BIOS dans une mémoire modifiable de type EPROM ou EEPROM.

    Dans ce BIOS en PROM, il y a la partie non modifiable qui représente surtout l'interface.

    Dans la partie EPROM ou EEPROM il y a la partie modifiable qui représente les données d'environnement de la machine.

    Par exemple, le type de disque dur ou de mémoire vive qui peuvent évoluer suivant la sortie de nouveau matériel.

    Puis il y a la gestion matériel de la machine, cette gestion est faite dans des instructions en PROM que l'on appelle des interruptions.

    Il existe donc des interruptions Hardware dans la PROM et des Interruptions Software dans le système d'exploitation le DOS à l'époque.

    Le livre de Philippe Mercier correspondant s'appelle, La Maitrise des programmes résidents sous MS-DOS.

    Il existe ensuite deux autres livres qui s'occupent de ça, Les Interruptions du MS-DOS et l'Assembleur facile.

    Revenons à nos moutons :

    Les interruptions ont une adresse d'interruption qui permet de les appeler.

    On peut modifier cette adresse d'interruption et écrire soit même l'interruption correspondante.

    Voilà ce que j'apprenais à mes jeunes informaticiens en école d'informatique industrielle d'Aurillac dans le Cantal (Département 15)

    J'utilisais au début l'application Debug du DOS pour fabriquer ces programmes en Assembleur, ensuite l'école d'Aurillac a acheté l'application TASM.

    Ce n'est pas si simple et cela fait longtemps que je n'ai pas fait de cours.



    Voici ce que l'on peut faire en Assembleur, c'était un créateur de fichier que j'ai fait en exercice pour un BTS informatique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    892
    893
    894
    895
    896
    897
    898
    899
    900
    901
    902
    903
    904
    905
    906
    907
    908
    909
    910
    911
    912
    913
    914
    915
    916
    917
    918
    919
    920
    921
    922
    923
    924
    925
    926
    927
    928
    929
    930
    931
    932
    933
    934
    935
    936
    937
    938
    939
    940
    941
    942
    943
    944
    945
    946
    947
    948
    949
    950
    951
    952
    953
    954
    955
    956
    957
    958
    959
    960
    961
    962
    963
    964
    965
    966
    967
    968
    969
    970
    971
    972
    973
    974
    975
    976
    977
    978
    979
    980
    981
    982
    983
    984
    985
    986
    987
    988
    989
    990
    991
    992
    993
    994
    995
    996
    997
    998
    999
    1000
    1001
    1002
    1003
    1004
    1005
    1006
    1007
    1008
    1009
    1010
    1011
    1012
    1013
    1014
    1015
    1016
    1017
    1018
    1019
    1020
    1021
    1022
    1023
    1024
    1025
    1026
    1027
    1028
    1029
    1030
    1031
    1032
    1033
    1034
    1035
    1036
    1037
    1038
    1039
    1040
    1041
    1042
    1043
    1044
    1045
    1046
    1047
    1048
    1049
    1050
    1051
    1052
    1053
    1054
    1055
    1056
    1057
    1058
    1059
    1060
    1061
    1062
    1063
    1064
    1065
    1066
    1067
    1068
    1069
    1070
    1071
    1072
    1073
    1074
    1075
    1076
    1077
    1078
    1079
    1080
    1081
    1082
    1083
    1084
    1085
    1086
    1087
    1088
    1089
    1090
    1091
    1092
    1093
    1094
    1095
    1096
    1097
    1098
    1099
    1100
    1101
    1102
    1103
    1104
    1105
    1106
    1107
    1108
    1109
    1110
    1111
    1112
    1113
    1114
    1115
    1116
    1117
    1118
    1119
    1120
    1121
    1122
    1123
    1124
    1125
    1126
    1127
    1128
    1129
    1130
    1131
    1132
    1133
    1134
    1135
    1136
    1137
    1138
    1139
    1140
    1141
    1142
    1143
    1144
    1145
    1146
    1147
    1148
    1149
    1150
    1151
    1152
    1153
    1154
    1155
    1156
    1157
    1158
    1159
    1160
    1161
    1162
    1163
    1164
    1165
    1166
    1167
    1168
    1169
    1170
    1171
    1172
    1173
    1174
    1175
    1176
    1177
    1178
    1179
    1180
    1181
    1182
    1183
    1184
    1185
    1186
    1187
    1188
    1189
    1190
    1191
    1192
    1193
    1194
    1195
    1196
    1197
    1198
    1199
    1200
    1201
    1202
    1203
    1204
    1205
    1206
    1207
    1208
    1209
    1210
    1211
    1212
    1213
    1214
    1215
    1216
    1217
    1218
    1219
    1220
    1221
    1222
    1223
    1224
    1225
    1226
    1227
    1228
    1229
    1230
    1231
    1232
    1233
    1234
    1235
    1236
    1237
    1238
    1239
    1240
    1241
    1242
    1243
    1244
    1245
    1246
    1247
    1248
    1249
    1250
    1251
    1252
    1253
    1254
    1255
    1256
    1257
    1258
    1259
    1260
    1261
    1262
    1263
    1264
    1265
    1266
    1267
    1268
    1269
    1270
    1271
    1272
    1273
    1274
    1275
    1276
    1277
    1278
    1279
    1280
    1281
    1282
    1283
    1284
    1285
    1286
    1287
    1288
    1289
    1290
    1291
    1292
    1293
    1294
    1295
    1296
    1297
    1298
    1299
    1300
    1301
    1302
    1303
    1304
    1305
    1306
    1307
    1308
    1309
    1310
    1311
    1312
    1313
    1314
    1315
    1316
    1317
    1318
    1319
    1320
    1321
    1322
    1323
    1324
    1325
    1326
    1327
    1328
    1329
    1330
    1331
    1332
    1333
    1334
    1335
    1336
    1337
    1338
    1339
    1340
    1341
    1342
    1343
    1344
    1345
    1346
    1347
    1348
    1349
    1350
    1351
    1352
    1353
    1354
    1355
    1356
    1357
    1358
    1359
    1360
    1361
    1362
    1363
    1364
    1365
    1366
    1367
    1368
    1369
    1370
    1371
    1372
    1373
    1374
    1375
    1376
    1377
    1378
    1379
    1380
    1381
    1382
    1383
    1384
    1385
    1386
    1387
    1388
    1389
    1390
    1391
    1392
    1393
    1394
    1395
    1396
    1397
    1398
    1399
    1400
    1401
    1402
    1403
    1404
    1405
    1406
    1407
    1408
    1409
    1410
    1411
    1412
    1413
    1414
    1415
    1416
    1417
    1418
    1419
    1420
    1421
    1422
    1423
    1424
    1425
    1426
    1427
    1428
    1429
    1430
    1431
    1432
    1433
    1434
    1435
    1436
    1437
    1438
    1439
    1440
    1441
    1442
    1443
    1444
    1445
    1446
    1447
    1448
    1449
    1450
    1451
    1452
    1453
    1454
    1455
    1456
    1457
    1458
    1459
    1460
    1461
    1462
    1463
    1464
    1465
    1466
    1467
    1468
    1469
    1470
    1471
    1472
    1473
    1474
    1475
    1476
    1477
    1478
    1479
    1480
    1481
    1482
    1483
    1484
    1485
    1486
    1487
    1488
    1489
    1490
    1491
    1492
    1493
    1494
    1495
    1496
    1497
    1498
    1499
    1500
    1501
    1502
    1503
    1504
    1505
    1506
    1507
    1508
    1509
    1510
    1511
    1512
    1513
    1514
    1515
    1516
    1517
    1518
    1519
    1520
    1521
    1522
    1523
    1524
    1525
    1526
    1527
    1528
    1529
    1530
    1531
    1532
    1533
    1534
    1535
    1536
    1537
    1538
    1539
    1540
    1541
    1542
    1543
    1544
    1545
    1546
    1547
    1548
    1549
    1550
    1551
    1552
    1553
    1554
    1555
    1556
    1557
    1558
    1559
    1560
    1561
    1562
    1563
    1564
    1565
    1566
    1567
    1568
    1569
    1570
    1571
    1572
    1573
    1574
    1575
    1576
    1577
    1578
    1579
    1580
    1581
    1582
    1583
    1584
    1585
    1586
    1587
    1588
    1589
    1590
    1591
    1592
    1593
    1594
    1595
    1596
    1597
    1598
    1599
    1600
    1601
    1602
    1603
    1604
    1605
    1606
    1607
    1608
    1609
    1610
    1611
    1612
    1613
    1614
    1615
    1616
    1617
    1618
    1619
    1620
    1621
    1622
    1623
    1624
    1625
    1626
    1627
    1628
    1629
    1630
    1631
    1632
    1633
    1634
    1635
    1636
    1637
    1638
    1639
    1640
    1641
    1642
    1643
    1644
    1645
    1646
    1647
    1648
    1649
    1650
    1651
    1652
    1653
    1654
    1655
    1656
    1657
    1658
    1659
    1660
    1661
    1662
    1663
    1664
    1665
    1666
    1667
    1668
    1669
    1670
    1671
    1672
    1673
    1674
    1675
    1676
    1677
    1678
    1679
    1680
    1681
    1682
    1683
    1684
    1685
    1686
    1687
    1688
    1689
    1690
    1691
    1692
    1693
    1694
    1695
    1696
    1697
    1698
    1699
    1700
    1701
    1702
    1703
    1704
    1705
    1706
    1707
    1708
    1709
    1710
    1711
    1712
    1713
    1714
    1715
    1716
    1717
    1718
    1719
    1720
    1721
    1722
    1723
    1724
    1725
    1726
    1727
    1728
    1729
    1730
    1731
    1732
    1733
    1734
    1735
    1736
    1737
    1738
    1739
    1740
    1741
    1742
    1743
    1744
    1745
    1746
    1747
    1748
    1749
    1750
    1751
    1752
    1753
    1754
    1755
    1756
    1757
    1758
    1759
    1760
    1761
    1762
    1763
    1764
    1765
    1766
    1767
    1768
    1769
    1770
    1771
    1772
    1773
    1774
    1775
    1776
    1777
    1778
    1779
    1780
    1781
    1782
    1783
    1784
    1785
    1786
    1787
    1788
    1789
    1790
    1791
    1792
    1793
    1794
    1795
    1796
    1797
    1798
    1799
    1800
    1801
    1802
    1803
    1804
    1805
    1806
    1807
    1808
    1809
    1810
    1811
    1812
    1813
    1814
    1815
    1816
    1817
    1818
    1819
    1820
    1821
    1822
    1823
    1824
    1825
    1826
    1827
    1828
    1829
    1830
    1831
    1832
    1833
    1834
    1835
    1836
    1837
    1838
    1839
    1840
    1841
    1842
    1843
    1844
    1845
    1846
    1847
    1848
    1849
    1850
    1851
    ;------------------ directives d'assemblage pour programme .EXE ----------------
    projet  segment
            .model small
            .stack 200             ;ajouter la pile pour programme.EXE
            org 100h               ;assemblage programme .EXE
            assume cs:projet
    ;-------------------------------------------------------------------------------
    ;------------------- sauve les registres neutralise ctrl b ---------------------
    start:  pushf
            push dx
            push ds
            push bx
            push cx                ;sauve les registres de travail
            push ax
            push es
    ;-------------------------------------------------------------------------------
    ;---------------------------- adresse m‚moire ----------------------------------
    id20    dw ?                   ;sauve l'adresse de l'int ctrl break (1bh)
    id21    dw ?
    ;-------------------------------------------------------------------------------
    ;--------------------- neutralise l'action du ctrl break -----------------------
            mov ax,351bh           ;adresse de l'int 1bh
            int 21h
    
            mov [id20],es          ;sauve le segment + l'offset de l'int 1bh
            mov [id21],bx
    
           jmp suite1
    
    ctrlb: iret
    
    suite1: mov ah,25h
            mov al,1bh
            push cs                ;supprime l'action de ctrl break (int 1bh)
            pop ds
            mov dx,offset ctrlb
            int 21h
    ;-------------------------------------------------------------------------------
    ;=================================== DEBUT =====================================
            jmp debut              ;début du programme
    ;-------------------------------------------------------------------------------
    ;------------------------------- adresses mémoire ------------------------------
    
    id1     db 41 DUP (?)          ;emplacement réservé pour le nom du fichier
    
    id2     db "...Copyright 1992 JML$"
    
    id3     dw ?                   ;contient le handle (nø) du fichier
    id46    db "       ÉÍÍÍÍ          ÉÍÍÍÍ$"
    id41    db "       º              ºÍÍ$"
    id4     db "ù      º r‚ation d'un º ichier      ù$"
    id45    db "       ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ$"
    id44    db "ÉÍÍÍÍÍÍÍÍ»$"
    id42    db "º CF.exe º$"
    id43    db "ÈÍÍÍÍÍÍÍͼ$"
    
    id5     dw ?                   ;contient bx (offset id1 fichier ou id8 écriture)
    id51    db ?                   ;contient le nombre de caractère
    id52    db 0                   ;indicateur de retour
    id53    db 0                   ;indicateur de sauvegarde
    id54    db 0                   ;indicateur touche [F10]
    id55    db 0                   ;indicateur de remontée
    id56    db 0                   ;indicateur d'effacement touche [back space]
    id57    db 0                   ;indicateur de retour touche [F10]
    
    id6     db "FICHIER = Unité\Chemin\Nom.ext ÍÍͳ$"
    id62    db "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿$"
    id63    db "³$"
    id61    db "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ$"
    id64    db "                                   $"
    
    id7     db " $"                ;caractère réservé à l'effacement [back space]
    id71    dw 2020h
    id72    dw 0a0dh
    
    id8     db 80 dup (?)          ;emplacement réservé à l'écriture d'une ligne
    
    id9   db"[F2]=EffaceL  [F5]=Quitte  [F10]=Sauve  [Ù]=Valide  [-]=EffaceC  ["
          db"]=Déplace$"
    id91    db "                         ---- Suite ----                         $"
    
    id10    db ?                   ;contient dl (nøcolonne)
    id11    db ?                   ;contient dh (nøligne)
    id12    db ?                   ;contient dl (nøcolonne effacement d'une ligne)
    id13    db 0                   ;contient l'ancien nø de ligne
    id14    db 0                   ;contient l'ancienne colonne
    id15    db 0
    ;-------------------------------------------------------------------------------
    ;----------------- emplacement mémoire des lignes d'écriture -------------------
    ligne1  db 81 dup (?)          ;ligne d'écriture nø 1
    col1    db ?                   ;contient la colonne de la ligne
    lig1    db ?                   ;
    nbr1    db 0                   ;contient le nombre de caractères à écrire
    ligne2  db 81 dup (?)
    col2    db ?
    lig2    db ?
    nbr2    db 0
    ligne3  db 81 dup (?)
    col3    db ?
    lig3    db ?
    nbr3    db 0
    ligne4  db 81 dup (?)
    col4    db ?
    lig4    db ?
    nbr4    db 0
    ligne5  db 81 dup (?)
    col5    db ?
    lig5    db ?
    nbr5    db 0
    ligne6  db 81 dup (?)
    col6    db ?
    lig6    db ?
    nbr6    db 0
    ligne7  db 81 dup (?)
    col7    db ?
    lig7    db ?
    nbr7    db 0
    ligne8  db 81 dup (?)
    col8    db ?
    lig8    db ?
    nbr8    db 0
    ligne9  db 81 dup (?)
    col9    db ?
    lig9    db ?
    nbr9    db 0
    ligne10 db 81 dup (?)
    col10   db ?
    lig10   db ?
    nbr10   db 0
    ligne11 db 81 dup (?)
    col11   db ?
    lig11   db ?
    nbr11   db 0
    ligne12 db 81 dup (?)
    col12   db ?
    lig12   db ?
    nbr12   db 0
    ligne13 db 81 dup (?)
    col13   db ?
    lig13   db ?
    nbr13   db 0
    ligne14 db 81 dup (?)
    col14   db ?
    lig14   db ?
    nbr14   db 0
    ligne15 db 81 dup (?)
    col15   db ?
    lig15   db ?
    nbr15   db 0
    ligne16 db 81 dup (?)
    col16   db ?
    lig16   db ?
    nbr16   db 0
    ligne17 db 81 dup (?)
    col17   db ?
    lig17   db ?
    nbr17   db 0
    ligne18 db 81 dup (?)
    col18   db ?
    lig18   db ?
    nbr18   db 0
    ligne19 db 81 dup (?)
    col19   db ?
    lig19   db ?
    nbr19   db 0
    ligne20 db 81 dup (?)
    col20   db ?
    lig20   db ?
    nbr20   db 0
    ligne21 db 81 dup (?)
    col21   db ?
    lig21   db ?
    nbr21   db 0
    ligne22 db 81 dup (?)
    col22   db ?
    lig22   db ?
    nbr22   db 0
    ligne23 db 81 dup (?)
    col23   db ?
    lig23   db ?
    nbr23   db 0
    ligne24 db 81 dup (?)
    col24   db ?                   ;ligne d'écriture nø 24
    lig24   db ?
    nbr24   db 0
    ligne25 db 81 dup (?)
    col25   db ?
    lig25   db ?
    nbr25   db 0
    ;-------------------------------------------------------------------------------
    ;----------------------- début gestion curseur et affichage --------------------
    debut:  mov ah,0h
            mov al,02h             ;mode vidéo 80 colonnes 25 lignes CGA
            int 10h
    
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;décalage de 25 lignes (efface l'écran)
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
    
            mov ah,01h
            mov ch,6               ;modifie la forme du curseur = (_)
            mov cl,7
            int 10h
    
            mov dh,2               ;ligne 2
            mov dl,58              ;colonne 58
            mov ah,02h
            mov bh,0
            int 10h
    
            mov ah,09h
            mov dx,offset id2      ;affiche le texte id2
            int 21h
    
            mov dh,1               ;ligne nø1
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 1 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id44     ;affiche le texte id44
            int 21h
    
            mov dh,2               ;ligne nø2
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 2 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id42     ;affiche le texte id42 (EDP)
            int 21H
    
            mov dh,3               ;ligne nø3
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 3 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id43     ;affiche le texte id43
            int 21h
    
            mov dh,8
            mov dl,18
            mov ah,02h
            mov bh,0
            int 10h
    
            mov ah,09h
            mov dx,offset id46
            int 21h
    
            mov dh,11              ;ligne nø11
            mov dl,18              ;colonne nø37
            mov ah,02h
            mov bh,0               ;place le curseur ligne 2 colonne 37
            int 10h
    
            mov ah,09h
            mov dx,offset id45     ;affiche le texte id45
            int 21h
    
            mov dh,10              ;ligne nø10
            mov dl,18              ;colonne nø26
            mov ah,02h
            mov bh,0               ;place le curseur ligne 10 colonne 26
            int 10h
    
            mov ah,09h
            mov dx,offset id4      ;affiche le texte id4 (CREATION de FICHIER...)
            int 21h
    
            mov dh,9               ;ligne nø15
            mov dl,18              ;colone nø40
            mov ah,02h
            mov bh,0               ;place le curseur ligne 15 colonne 40
            int 10h
    
            mov ah,09h
            mov dx,offset id41     ;affiche le texte id41
            int 21h
    
            mov dh,21              ;ligne nø 21
            mov dl,36              ;colonne nø36
            mov ah,02h
            mov bh,0               ;place le curseur ligne 21 colonne 36
            int 10h
    
            mov ah,09h
            mov dx,offset id61     ;affiche le texte id61
            int 21h
    
            mov dh,19              ;ligne nø19
            mov dl,36              ;colonne nø36
            mov ah,02h
            mov bh,0               ;place le curseur ligne 19 colonne 36
            int 10h
    
            mov ah,09h
            mov dx,offset id62     ;affiche le texte id62
            int 21h
    
            mov dh,20              ;ligne nø20
            mov dl,79              ;colonne nø79
            mov ah,02h
            mov bh,0               ;place le curseur ligne 20 colonne 79
            int 10h
    
            mov ah,09h
            mov dx,offset id63     ;affiche le texte id63
            int 21h
    
            mov dh,21              ;ligne nø21
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 21 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id64     ;affiche le texte id64
            int 21h
    
            mov dh,20              ;ligne nø20
            mov dl,1               ;colonne nø1
            mov ah,02h
            mov bh,0               ;place le curseur ligne 20 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id6      ;affiche le texte id6 (FICHIER = [ unité....])
            int 21h
    
            mov ch,0
            mov bh,0
            mov bx,offset id1      ;met l'adresse du nom du fichier dans bx
    ;-------------------------------------------------------------------------------
    ;------------------------- entrée des données du fichier -----------------------
    entreF: mov ch,[id10]          ;récupère la position du pointeur d'écriture
    
    entreC: mov ah,0
            int 16h                ;entrée d'un caractère au clavier
            mov [bx],al            ;place le code ascii du caractère dans id1
    
            cmp ah,3fh             ;compare le scan code avec la touche [F5]
            jnz suite2             ;si vrai fin
            jmp fermeF
    
    suite2: cmp ah,01h             ;compare le scan code avec la touche [ESC]
            jnz suite3             ;si vrai entrée d'un caractére
            jmp entreF
    
    suite3: cmp ah,1ch             ;compare le scan code de la touche avec [enter]
            jnz suite4             ;si comparaison vraie crée le fichier
            jmp creeF
    
    suite4: cmp ah,0eh             ;compare le scan code avec [back space]
            jnz suite5a            ;si comparaison vraie efface le caractére
            jmp effC
    
    suite5a:cmp ah,0fh             ;compare le scan code avec la touche TAB
            jnz suite5             ;si comparaison vraie entrée d'un caractère
            jmp entreF
    
    suite5: cmp ch,41              ;compare le nombre de caractères entré
            jnz suite6             ;si vrai attente de la touche [enter]
            jmp entreC
    
    suite6: mov [id5],bx           ;sauve bx à l'adresse id5
            add bx,+1              ;additionne bx avec +1
    
            mov dl,al
            mov ah,02h             ;affiche le caractère entré au clavier
            int 21h
    
            add ch,+1              ;additionne ch (nombre de caractères entré + 1)
    
            mov [id10],ch          ;sauve la position du pointeur d'écriture
    
            mov ah,01h
            mov ch,6
            mov cl,7               ;modifie le curseur = (_)
            int 10h
    
            jmp entreF             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;-------------------------- effacement d'un caractère --------------------------
    effC:   cmp ch,0               ;compare le nombre de caractères entré avec 0
            jnz ret1               ;aucun caractère entré au clavier
            jmp entreF
    
    ret1:   cmp [id57],1           ;compare indicateur de retour
            jnz suite7
            cmp ch,1               ;si retour compare le nombre de caractère avec 1
            jnz suite7
            jmp entreF
    
    suite7: cmp bl,18              ;compare la colonne avec 18
            jnz suite8             ;si vrai limite d'effacement des caractères
            jmp entreF             ;entrée d'un caractère
    
    
    suite8: dec bx                 ;décrémente l'adresse id1+déplacement
    
            mov [id5],bx           ;sauve l'adresse id1+déplacement
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
    
            dec dl                 ;décrémente les colonnes d'affichage
            mov ah,02h
            mov bh,0               ;positionne le curseur en colonne-1
            int 10h
    
            mov ah,09h
            mov dx,offset id7      ;affiche un espace pour effacement colonne-1
            int 21h
    
            mov ah,03h
            mov bh,0               ;calcule la position du curseur(dx a été utilisé
            int 10h                ;lors de l'affichage pour effacement)
    
            dec dl
            mov ah,02h             ;repositionne le curseur à colonne-1
            mov bh,0
            int 10h
    
            mov ch,[id10]
            dec ch                 ;repositionne le pointeur d'écriture
            mov [id10],ch
    
            mov bx,[id5]           ;récupère l'adresse id1+dépacement
    
            mov ah,01h
            mov ch,1
            mov cl,7               ;modifie le curseur = (Û)
            int 10h
    
            jmp entreF             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;---------------------- création du fichier sur le disque ----------------------
    creeF:  mov al,00h             ;met 0 dans al
            mov [bx],al            ;écrit 0 à l'adresse id1+déplacement
                                   ;(pour l'écriture sur disque)
    creeFD: mov dx,offset id1      ;met (unité+chemin+nom du fichier) dans dx
            mov cx,0
            mov ah,3ch             ;crée le fichier sur disque
            int 21h
    ;-------------------------------------------------------------------------------
    ;---------------------- ouverture du fichier sur le disque ---------------------
            mov dx,offset id1      ;met (unité\chemin\nom du fichier) dans dx
            mov ah,3dh
            mov al,42h             ;ouvre le fichier sur le disque
            int 21h
    
            mov id3,ax             ;sauve le handle du fichier dans id3
    ;-------------------------------------------------------------------------------
    ;---------------------- efface l'écran prépare l'écriture ----------------------
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;décalage de 25 lignes (efface l'écran)
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
    
            mov dh,0               ;ligne 1
            mov dl,0               ;colonne 0
            mov ah,02h
            mov bh,0               ;place le curseur ligne 1 colonne 1
            int 10h
    
            mov ah,09h
            mov dx,offset id9      ;affiche le texte id9 (Touches utilisées)
            int 21h
    
            mov ch,0
            mov cl,0               ;initialise les regitres de travail
            mov bl,0
    
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
    
            mov dh,1
    ;-------------------------------------------------------------------------------
    ;-------------------------- écriture dans le fichier --------------------------
    ecrit1C:mov dl,0               ;écriture du premier caractère
            mov [id51],dl          ;met à 0 le nombre de caractère
    
            mov [id55],0           ;indicateur de remonter
    
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
    ;-------------------------------------------------------------------------------
    ;------------------------ pointe la ligne à écrire -----------------------------
    ecritFL:cmp dh,1               ;test le nø de la ligne
            jnz suite50            ;saut au test suivant
            mov ax,0               ;initialise ax
            mov al,[id10]          ;met la colonne dans ax déplacement du pointeur
            mov bx,offset ligne1   ;met l'adresse de la ligne d'écriture dans bx
            add bx,ax              ;ajoute le déplacement au pointeur
            jmp ecritC             ;pointeur nø de ligne
    
    suite50:cmp dh,2
            jnz suite51
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne2   ;pointeur nø de ligne (adressage basé ds:bx)
            add bx,ax
            jmp ecritC
    
    suite51:cmp dh,3
            jnz suite52
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne3
            add bx,ax
            jmp ecritC
    
    suite52:cmp dh,4
            jnz suite53
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne4
            add bx,ax
            jmp ecritC
    
    suite53:cmp dh,5
            jnz suite54
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne5
            add bx,ax
            jmp ecritC
    
    suite54:cmp dh,6
            jnz suite55
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne6
            add bx,ax
            jmp ecritC
    
    suite55:cmp dh,7
            jnz suite56
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne7
            add bx,ax
            jmp ecritC
    
    suite56:cmp dh,8
            jnz suite57
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne8
            add bx,ax
            jmp ecritC
    
    suite57:cmp dh,9
            jnz suite58
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne9
            add bx,ax
            jmp ecritC
    
    suite58:cmp dh,10
            jnz suite59
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne10
            add bx,ax
            jmp ecritC
    
    suite59:cmp dh,11
            jnz suite60
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne11
            add bx,ax
            jmp ecritC
    
    suite60:cmp dh,12
            jnz suite61
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne12
            add bx,ax
            jmp ecritC
    
    suite61:cmp dh,13
            jnz suite62
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne13
            add bx,ax
            jmp ecritC
    
    suite62:cmp dh,14
            jnz suite63
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne14
            add bx,ax
            jmp ecritC
    
    suite63:cmp dh,15
            jnz suite64
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne15
            add bx,ax
            jmp ecritC
    
    suite64:cmp dh,16
            jnz suite65
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne16
            add bx,ax
            jmp ecritC
    
    suite65:cmp dh,17
            jnz suite66
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne17
            add bx,ax
            jmp ecritC
    
    suite66:cmp dh,18
            jnz suite67
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne18
            add bx,ax
            jmp ecritC
    
    suite67:cmp dh,19
            jnz suite68
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne19
            add bx,ax
            jmp ecritC
    
    suite68:cmp dh,20
            jnz suite69
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne20
            add bx,ax
            jmp ecritC
    
    suite69:cmp dh,21
            jnz suite70
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne21
            add bx,ax
            jmp ecritC
    
    suite70:cmp dh,22
            jnz suite71
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne22
            add bx,ax
            jmp ecritC
    
    suite71:cmp dh,23
            jnz suite72
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne23
            add bx,ax
            jmp ecritC
    
    suite72:cmp dh,24
            jnz suite73
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne24  ;pointe la ligne nø 24 dernière ligne
            add bx,ax
            jmp ecritC
    
    suite73:cmp dh,25
            jnz ecritC
            mov ax,0
            mov al,[id10]
            mov bx,offset ligne25
            add bx,ax
            jmp ecritC
    ;-------------------------------------------------------------------------------
    ;---------------- teste l'écriture des caractères fin de ligne -----------------
    ecritC: cmp [id52],1
            jnz ecritNB            ;retour par flêche ne compte pas les caractères
            jmp ecrit
    ;-------------------------------------------------------------------------------
    ;--- initialise les compteurs de ligne avec le nombre de caractères à écrire ---
    ecritNB:cmp dh,1               ;teste la ligne d'écriture
            jnz suit50             ;teste suivant
            mov al,dl              ;met la colonne dans al
            add al,2               ;ajoute les caractères fin de ligne (CR et LF)
            mov [nbr1],al          ;sauve le nombre de caractères écrit dans ligne1
            jmp ecrit
    
    suit50: cmp dh,2
            jnz suit51
            cmp [id52],1
            jnz suit75
            jmp ecrit
    suit75: mov al,dl
            add al,2
            mov [nbr2],al
            jmp ecrit
    
    suit51: cmp dh,3
            jnz suit52
            cmp [id52],1
            jnz suit76
            jmp ecrit
    suit76: mov al,dl
            add al,2
            mov [nbr3],al
            jmp ecrit
    
    suit52: cmp dh,4
            jnz suit53
            cmp [id52],1
            jnz suit77
            jmp ecrit
    suit77: mov al,dl
            add al,2
            mov [nbr4],al
            jmp ecrit
    
    suit53: cmp dh,5
            jnz suit54
            cmp [id52],1
            jnz suit78
            jmp ecrit
    suit78: mov al,dl
            add al,2
            mov [nbr5],al
            jmp ecrit
    
    suit54: cmp dh,6
            jnz suit55
            cmp [id52],1
            jnz suit79
            jmp ecrit
    suit79: mov al,dl
            add al,2
            mov [nbr6],al
            jmp ecrit
    
    suit55: cmp dh,7
            jnz suit56
            cmp [id52],1
            jnz suit80
            jmp ecrit
    suit80: mov al,dl
            add al,2
            mov [nbr7],al
            jmp ecrit
    
    suit56: cmp dh,8
            jnz suit57
            cmp [id52],1
            jnz suit81
            jmp ecrit
    suit81: mov al,dl
            add al,2
            mov [nbr8],al
            jmp ecrit
    
    suit57: cmp dh,9
            jnz suit58
            cmp [id52],1
            jnz suit82
            jmp ecrit
    suit82: mov al,dl
            add al,2
            mov [nbr9],al
            jmp ecrit
    
    suit58: cmp dh,10
            jnz suit59
            cmp [id52],1
            jnz suit83
            jmp ecrit
    suit83: mov al,dl
            add al,2
            mov [nbr10],al
            jmp ecrit
    
    suit59: cmp dh,11
            jnz suit60
            cmp [id52],1
            jnz suit84
            jmp ecrit
    suit84: mov al,dl
            add al,2
            mov [nbr11],al
            jmp ecrit
    
    suit60: cmp dh,12
            jnz suit61
            cmp [id52],1
            jnz suit85
            jmp ecrit
    suit85: mov al,dl
            add al,2
            mov [nbr12],al
            jmp ecrit
    
    suit61: cmp dh,13
            jnz suit62
            cmp [id52],1
            jnz suit86
            jmp ecrit
    suit86: mov al,dl
            add al,2
            mov [nbr13],al
            jmp ecrit
    
    suit62: cmp dh,14
            jnz suit63
            cmp [id52],1
            jnz suit87
            jmp ecrit
    suit87: mov al,dl
            add al,2
            mov [nbr14],al
            jmp ecrit
    
    suit63: cmp dh,15
            jnz suit64
            cmp [id52],1
            jnz suit88
            jmp ecrit
    suit88: mov al,dl
            add al,2
            mov [nbr15],al
            jmp ecrit
    
    suit64: cmp dh,16
            jnz suit65
            cmp [id52],1
            jnz suit89
            jmp ecrit
    suit89: mov al,dl
            add al,2
            mov [nbr16],al
            jmp ecrit
    
    suit65: cmp dh,17
            jnz suit66
            cmp [id52],1
            jnz suit90
            jmp ecrit
    suit90: mov al,dl
            add al,2
            mov [nbr17],al
            jmp ecrit
    
    suit66: cmp dh,18
            jnz suit67
            cmp [id52],1
            jnz suit91
            jmp ecrit
    suit91: mov al,dl
            add al,2
            mov [nbr18],al
            jmp ecrit
    
    suit67: cmp dh,19
            jnz suit68
            cmp [id52],1
            jnz suit92
            jmp ecrit
    suit92: mov al,dl
            add al,2
            mov [nbr19],al
            jmp ecrit
    
    suit68: cmp dh,20
            jnz suit69
            cmp [id52],1
            jnz suit93
            jmp ecrit
    suit93: mov al,dl
            add al,2
            mov [nbr20],al
            jmp ecrit
    
    suit69: cmp dh,21
            jnz suit70
            cmp [id52],1
            jnz suit94
            jmp ecrit
    suit94: mov al,dl
            add al,2
            mov [nbr21],al
            jmp ecrit
    
    suit70: cmp dh,22
            jnz suit71
            cmp [id52],1
            jnz suit95
            jmp ecrit
    suit95: mov al,dl
            add al,2
            mov [nbr22],al
            jmp ecrit
    
    suit71: cmp dh,23
            jnz suit72
            cmp [id52],1
            jnz suit96
            jmp ecrit
    suit96: mov al,dl
            add al,2
            mov [nbr23],al
            jmp ecrit
    
    suit72: cmp dh,24
            jnz suit73
            cmp [id52],1
            jnz suit97
            jmp ecrit
    suit97: mov al,dl
            add al,2
            mov [nbr24],al
            jmp ecrit
    
    suit73: cmp dh,25
            jnz ecrit
            cmp [id52],1
            jnz suit98
            jmp ecrit
    suit98: mov al,dl
            add al,2
            mov [nbr25],al
            jmp ecrit
    ;-------------------------------------------------------------------------------
    ;---------------------- récupère les données d'affichage -----------------------
    ecrit:  cmp [id56],1
            jnz ecriC
            jmp autreC
    
    ecriC:  mov dl,[id10]          ;récupère la colonne
            mov dh,[id11]          ;récupère la ligne
    
            mov [id5],bx           ;sauve l'adresse ligne dans id5 pour pouvoir
                                   ;effectuer ligne+déplacement (79 caractères max)
            mov ah,02h
            mov bh,0               ;positionne le curseur
            int 10h
    
            mov ah,01h
            mov ch,6
            mov cl,7               ;modification du curseur = (_)
            int 10h
    
    autreC: add dl,+1              ;additionne + 1 à la colonne
    
            mov [id56],0
    
            mov [id10],dl          ;sauve la colonne dans id10
    
            mov bx,[id5]           ;récupère l'adresse ligne+déplacement
    
            cmp [id52],1
            jnz suite45
            jmp texte
    ;-------------------------------------------------------------------------------
    ;------------ met en mémoire les caractères de séparation de ligne -------------
    suite45:mov word ptr [bx],0a0dh;écrit les caractères ascii (CR) et (LF) pour
                                   ;écriture sur disque (écriture sur disque en
                                   ;série mais affichage à l'écran ligne par ligne)
    ;-------------------------------------------------------------------------------
    ;----------------- met en mémoire la colonne de la ligne d'écriture ------------
            cmp dh,1
            jnz sui1
            mov [col1],dl           ;met la colonne dans id14
            jmp texte
    
    sui1:   cmp dh,2
            jnz sui2
            mov [col2],dl
            jmp texte
    
    sui2:   cmp dh,3
            jnz sui3
            mov [col3],dl
            jmp texte
    
    sui3:   cmp dh,4
            jnz sui4
            mov [col4],dl
            jmp texte
    
    sui4:   cmp dh,5
            jnz sui5
            mov [col5],dl
            jmp texte
    
    sui5:   cmp dh,6
            jnz sui6
            mov [col6],dl
            jmp texte
    
    sui6:   cmp dh,7
            jnz sui7
            mov [col7],dl
            jmp texte
    
    sui7:   cmp dh,8
            jnz sui8
            mov [col8],dl
            jmp texte
    
    sui8:   cmp dh,9
            jnz sui9
            mov [col9],dl
            jmp texte
    
    sui9:   cmp dh,10
            jnz sui10
            mov [col10],dl
            jmp texte
    
    sui10:  cmp dh,11
            jnz sui11
            mov [col11],dl
            jmp texte
    
    sui11:  cmp dh,12
            jnz sui12
            mov [col12],dl
            jmp texte
    
    sui12:  cmp dh,13
            jnz sui13
            mov [col13],dl
            jmp texte
    
    sui13:  cmp dh,14
            jnz sui14
            mov [col14],dl
            jmp texte
    
    sui14:  cmp dh,15
            jnz sui15
            mov [col15],dl
            jmp texte
    
    sui15:  cmp dh,16
            jnz sui16
            mov [col16],dl
            jmp texte
    
    sui16:  cmp dh,17
            jnz sui17
            mov [col17],dl
            jmp texte
    
    sui17:  cmp dh,18
            jnz sui18
            mov [col18],dl
            jmp texte
    
    sui18:  cmp dh,19
            jnz sui19
            mov [col19],dl
            jmp texte
    
    sui19:  cmp dh,20
            jnz sui20
            mov [col20],dl
            jmp texte
    
    sui20:  cmp dh,21
            jnz sui21
            mov [col21],dl
            jmp texte
    
    sui21:  cmp dh,22
            jnz sui22
            mov [col22],dl
            jmp texte
    
    sui22:  cmp dh,23
            jnz sui23
            mov [col23],dl
            jmp texte
    
    sui23:  cmp dh,24
            jnz sui24
            mov [col24],dl
            jmp texte
    
    sui24:  cmp dh,25
            jnz texte
            mov [col25],dl
            jmp texte
    ;-------------------------------------------------------------------------------
    ;---------------------- entrée des caractères à écrire -------------------------
     texte: mov ah,0
            int 16h                ;entrée d'un caractère au clavier
    
            cmp ah,4dh             ;compare le scan code (flêche direction droite)
            jnz suite20
            jmp flecheD
    
    suite20:cmp ah,4bh             ;compare le scan code (flêche direction gauche)
            jnz suite21
            jmp flecheG
    
    suite21:cmp ah,48h             ;compare le scan code (flêche direction haute)
            jnz suite22
            jmp flecheH
    
    suite22:cmp ah,50h             ;compare le scan code (flêche direction basse)
            jnz suite23
            jmp flecheB
    
    suite23:cmp ah,44h             ;compare le scan code avec la touche [F10]
            jnz suite9             ;si vrai création d'un nouveau fichier
            mov [id54],1           ;indicateur touche [F10]
            mov [id57],1           ;indicateur de retour
            jmp sauveL
    
    suite9: cmp ah,1ch             ;compare le scan code avec la touche [enter]
            jnz suite10            ;si vrai met en mémoire et retour ligne suivante
            jmp memoire
    
    suite10:cmp ah,0eh             ;compare le scan code avec [back space]
            jnz suite11            ;si vrai effacement d'un caractère
            jmp effaC
    
    suite11:cmp ah,3ch             ;compare le scan code avec la touche [F2]
            jnz suite12            ;si vrai efface la ligne
            jmp effLI
    
    suite12:cmp ah,3fh             ;compare le scan code avec la touche [F5]
            jnz suite13            ;si vrai ferme le fichier fin du programme
            jmp sauveL
    
    suite13:cmp dl,80              ;compare le nombre de caractère avec 80
            jnz suite14            ;si vrai fin de ligne attente de la touche [Ù]
            jmp texte
    
    suite14:mov [bx],al            ;met l'ascii du caractère dans ligne+déplacement
    
            mov [id5],bx           ;sauve ligne+déplacement dans id5
    
            add bx,+1              ;ajoute + 1 au déplacement de ligne(?)
    ;-------------------------------------------------------------------------------
    ;------ teste les déplacements afin d'écrire les caractères fin de ligne -------
            cmp dh,1               ;teste la ligne
            jnz su1
            cmp dl,[col1]          ;compare la colonne avant déplacement par flêche
            jnz s1                 ;et la colonne après déplacement ([col1]=avant)
            jnb s30                ;si dl>[col1] dépacement de colonne écrit (CR.LF)
            jmp saut10             ;la colonne est égale teste la ligne
    s1:     jmp saut0              ;la colonne n'est ni égale ni plus grande
    s30:    jmp saut3
    su1:    cmp dh,2
            jnz su2
            cmp dl,[col2]
            jnz s2
            jnb s31
            jmp saut10
    s2:     jmp saut0
    s31:    jmp saut3
    su2:    cmp dh,3
            jnz su3
            cmp dl,[col3]
            jnz s3
            jnb s32
            jmp saut10
    s3:     jmp saut0
    s32:    jmp saut3
    su3:    cmp dh,4
            jnz su4
            cmp dl,[col4]
            jnz s4
            jnb s33
            jmp saut10
    s4:     jmp saut0
    s33:    jmp saut3
    su4:    cmp dh,5
            jnz su5
            cmp dl,[col5]
            jnz s5
            jnb s34
            jmp saut10
    s5:     jmp saut0
    s34:    jmp saut3
    su5:    cmp dh,6
            jnz su6
            cmp dl,[col6]
            jnz s6
            jnb s35
            jmp saut10
    s6:     jmp saut0
    s35:    jmp saut3
    su6:    cmp dh,7
            jnz su7
            cmp dl,[col7]
            jnz s7
            jnb s36
            jmp saut10
    s7:     jmp saut0
    s36:    jmp saut3
    su7:    cmp dh,8
            jnz su8
            cmp dl,[col8]
            jnz s8
            jnb s37
            jmp saut10
    s8:     jmp saut0
    s37:    jmp saut3
    su8:    cmp dh,9
            jnz su9
            cmp dl,[col9]
            jnz s9
            jnb s38
            jmp saut10
    s9:     jmp saut0
    s38:    jmp saut3
    su9:    cmp dh,10
            jnz su10
            cmp dl,[col10]
            jnz s10
            jnb s39
            jmp saut10
    s10:    jmp saut0
    s39:    jmp saut3
    su10:   cmp dh,11
            jnz su11
            cmp dl,[col11]
            jnz s11
            jnb s40
            jmp saut10
    s11:    jmp saut0
    s40:    jmp saut3
    su11:   cmp dh,12
            jnz su12
            cmp dl,[col12]
            jnz s12
            jnb s41
            jmp saut10
    s12:    jmp saut0
    s41:    jmp saut3
    su12:   cmp dh,13
            jnz su13
            cmp dl,[col13]
            jnz s13
            jnb s42
            jmp saut10
    s13:    jmp saut0
    s42:    jmp saut3
    su13:   cmp dh,14
            jnz su14
            cmp dl,[col14]
            jnz s14
            jnb s43
            jmp saut10
    s14:    jmp saut0
    s43:    jmp saut3
    su14:   cmp dh,15
            jnz su15
            cmp dl,[col15]
            jnz s15
            jnb s44
            jmp saut10
    s15:    jmp saut0
    s44:    jmp saut3
    su15:   cmp dh,16
            jnz su16
            cmp dl,[col16]
            jnz s16
            jnb s45
            jmp saut10
    s16:    jmp saut0
    s45:    jmp saut3
    su16:   cmp dh,17
            jnz su17
            cmp dl,[col17]
            jnz s17
            jnb s46
            jmp saut10
    s17:    jmp saut0
    s46:    jmp saut3
    su17:   cmp dh,18
            jnz su18
            cmp dl,[col18]
            jnz s18
            jnb s47
            jmp saut10
    s18:    jmp saut0
    s47:    jmp saut3
    su18:   cmp dh,19
            jnz su19
            cmp dl,[col19]
            jnz s19
            jnb s48
            jmp saut10
    s19:    jmp saut0
    s48:    jmp saut3
    su19:   cmp dh,20
            jnz su20
            cmp dl,[col20]
            jnz s20
            jnb s49
            jmp saut10
    s20:    jmp saut0
    s49:    jmp saut3
    su20:   cmp dh,21
            jnz su21
            cmp dl,[col21]
            jnz s21
            jnb s50
            jmp saut10
    s21:    jmp saut0
    s50:    jmp saut3
    su21:   cmp dh,22
            jnz su22
            cmp dl,[col22]
            jnz s22
            jnb s51
            jmp saut10
    s22:    jmp saut0
    s51:    jmp saut3
    su22:   cmp dh,23
            jnz su23
            cmp dl,[col23]
            jnz s23
            jnb s52
            jmp saut10
    s23:    jmp saut0
    s52:    jmp saut3
    su23:   cmp dh,24
            jnz su24
            cmp dl,[col24]
            jnz s24
            jnb s53
            jmp saut10
    s24:    jmp saut0
    s53:    jmp saut3
    su24:   cmp dh,25
            jnz saut0
            cmp dl,[col25]
            jnz s25
            jnb s54
            jmp saut10
    s25:    jmp saut0
    s54:    jmp saut3
    ;-------------------------------------------------------------------------------
    ;---------- choix d'écriture (oui ou non) des caractères fin de ligne ----------
    saut0:  cmp [id14],0
            jnz saut2
            jmp saut10
    
    saut10: cmp dh,[id13]          ;compare l'ancienne et la nouvelle ligne
            jnz saut1
            jmp saut3
    
    saut1:  cmp [id13],0           ;compare si retour ligne arrière
            jnz saut2
            jmp saut3
    
    saut3:  mov [id52],0
    
    saut2:  mov dl,al
            mov ah,02h             ;affiche le caractère entré au clavier
            int 21h
    
            mov ah,01h
            mov ch,6               ;modification du curseur (_)
            mov cl,7
            int 10h
    
            mov al,[id51]          ;met l'ancienne colonne de la ligne d'écriture
            add al,1               ;qui n'a pas encore été mise en mémoire
            mov dl,[id10]          ;récupère la colonne
            cmp dl,al              ;compare avant déplacement
            jnz suite40
    
            cmp [id55],1           ;vérifie s'il y a eu remontée de ligne
            jnz suite42            ;([id55]=indicateur de remontée de ligne)
            jmp suite41            ; si remontée de ligne n'écrit pas (CR,LF)
    
    suite42:mov [id52],0           ;écrit les caractères fin de ligne
    suite41:mov [id51],al          ;actualise l'ancienne colonne
    
            jmp ecritC
    
    suite40:jmp ecritC             ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;--------------------------- utilisation des flêches ---------------------------
    flecheD:mov dl,[id10]          ;récupère la colonne
            cmp dl,80              ;teste le coin droit de l'écran
            jnz suite30
            mov [id52],1           ;ne pas écrire les caractères fin de ligne
            jmp texte              ;retour entrée de caractère
    suite30:mov [id10],dl          ;sauve la colonne
            add bx,1               ;ajoute 1 au pointeur d'écriture
            jmp ecritC             ;le retour ajoute 1 à la colonne et teste CR,LF
    
    flecheG:mov dl,[id10]
            cmp dl,1               ;teste le coin gauche de l'écran
            jnz suite31
            mov [id52],1           ;ne pas écrire les caractères fin de ligne
            jmp texte              ;retour entrée de caractère
    suite31:sub dl,2               ;retire 2 à la colonne (avant int 16h colonne+1)
            mov [id10],dl          ;sauve la nouvelle colonne
            sub bx,1               ;retire 1 au pointeur d'écriture
            mov [id5],bx           ;sauve le pointeur d'écriture
            mov [id52],1           ;ne pas écrire les caractères de fin de ligne
            jmp ecritC             ;retour teste les compteurs et l'écriture CR,LF
    flecheB:mov dh,[id11]          ;récupère la ligne
            mov [id13],dh          ;sauve l'ancienne ligne (indicateur de retour)
            cmp dh,24              ;compare le nombre de lignes (24=bas de page)
            jnz suite32
            jmp texte              ;retour entrée de caractère
    suite32:mov dl,[id10]
            sub dl,1               ;retire 1 à la colonne (avant int 16h colonne+1)
            add dh,1               ;ajoute 1 à la ligne (descend d'une ligne)
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
            mov [id52],1           ;ne pas écrire les caractères de fin de ligne
            jmp ecrit1C ;;
    
    flecheH:mov dh,[id11]          ;récupère la ligne
            mov [id13],dh          ;sauve l'ancienne ligne (indicateur de retour)
            mov [id55],1           ;indicateur de remontée
            cmp dh,1               ;compare le nombre de lignes (1=haut de page)
            jnz suite33
            jmp texte              ;retour entrée de caractère
    suite33:mov dl,[id10]          ;récupère la colonne
            sub dl,1               ;enlève 1 à la colonne (avant int 16h colonne+1)
            sub dh,1               ;enlève 1 à la ligne
            mov [id10],dl          ;sauve la colonne
            mov [id11],dh          ;sauve la ligne
            mov [id52],1           ;positionne l'indicateur ne pas écrire CR et LF
            jmp  ecrit1C ;ecritFL  ;retour pointeur nø ligne
    ;-------------------------------------------------------------------------------
    ;---------------------------- efface un caractère ------------------------------
    effaC:  mov ah,01h
            mov ch,1
            mov cl,7               ;modification du curseur (Û)
            int 10h
    
            cmp dl,01              ;compare la colonne avec 1 aucun caractère entré
            jnz suite15            ;ou tous les caractères sont effacés
            jmp texte
    
    suite15:dec bx                 ;décrémente id8+déplacement
    
            mov [id5],bx           ;sauve ligne+déplacement dans id5
    
            mov ax,id72
            mov word ptr [bx],ax
            add bx,2
            mov ax,id71
            mov word ptr [bx],ax
    
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
    
            dec dl                 ;décrèmente la colonne
    
            mov [id51],dl          ;décrèmente le nombre de caractères
    
            mov ah,02h
            mov bh,0               ;positionne le curseur sur le caractère à effacer
            int 10h
    
            mov ah,09h
            mov dx,offset id7      ;efface le caractère
            int 21h
    
            mov ah,03h
            mov bh,0               ;calcule la position du curseur
            int 10h
    
            dec dl
            mov ah,02h             ;positionne le curseur sur le caractère effacé
            mov bh,0
            int 10h
    
            mov bx,[id5]           ;récupère ligne+déplacement
    
            mov [id56],1
            mov [id52],0
    
            jmp ecritNB            ;entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;----------------------- met la ligne en mémoire -------------------------------
    memoire:mov dh,[id11]          ;récupère la ligne
    
            add dh,1               ;ajoute 1
    
            mov [id11],dh          ;ligne suivante
    
            mov [id52],1           ;positionne l'indicateur n'écrit pas CR et LF
    
            cmp dh,25
            jnz suite16            ;teste si fin de page
            mov[id53],1
            jmp sauveL
    
    suite16:jmp ecrit1C            ;retour entrée d'un nouveau caractère
    ;-------------------------------------------------------------------------------
    ;----------------------------- sauve les lignes --------------------------------
    sauveL: mov cx,0
            mov cl,[nbr1]          ;nombre de caractères à écrire
            mov ah,40h
            mov bx,id3             ;handle du fichier
            mov dx,offset ligne1   ;déplacement de la ligne à écrire
            int 21h                ;écriture sur le disque de la ligne1
    
            mov cx,0
            mov cl,[nbr2]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne2
            int 21h
    
            mov cx,0
            mov cl,[nbr3]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne3
            int 21h
    
            mov cx,0
            mov cl,[nbr4]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne4
            int 21h
    
            mov cx,0
            mov cl,[nbr5]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne5
            int 21h
    
            mov cx,0
            mov cl,[nbr6]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne6
            int 21h
    
            mov cx,0
            mov cl,[nbr7]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne7
            int 21h
    
            mov cx,0
            mov cl,[nbr8]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne8
            int 21h
    
            mov cx,0
            mov cl,[nbr9]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne9
            int 21h
    
            mov cx,0
            mov cl,[nbr10]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne10
            int 21h
    
            mov cx,0
            mov cl,[nbr11]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne11
            int 21h
    
            mov cx,0
            mov cl,[nbr12]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne12
            int 21h
    
            mov cx,0
            mov cl,[nbr13]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne13
            int 21h
    
            mov cx,0
            mov cl,[nbr14]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne14
            int 21h
    
            mov cx,0
            mov cl,[nbr15]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne15
            int 21h
    
            mov cx,0
            mov cl,[nbr16]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne16
            int 21h
    
            mov cx,0
            mov cl,[nbr17]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne17
            int 21h
    
            mov cx,0
            mov cl,[nbr18]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne18
            int 21h
    
            mov cx,0
            mov cl,[nbr19]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne19
            int 21h
    
            mov cx,0
            mov cl,[nbr20]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne20
            int 21h
    
            mov cx,0
            mov cl,[nbr21]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne21
            int 21h
    
            mov cx,0
            mov cl,[nbr22]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne22
            int 21h
    
            mov cx,0
            mov cl,[nbr23]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne23
            int 21h
    
            mov cx,0
            mov cl,[nbr24]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne24
            int 21h
    
            mov cx,0
            mov cl,[nbr25]
            mov ah,40h
            mov bx,id3
            mov dx,offset ligne25
            int 21h
    
            cmp [id54],1           ;teste l'action sur la touche [F10]
            jnz r1
            jmp pageS
    
    
    r1:     cmp [id53],1           ;indicateur de sauvegarde
            jnz fermeF
            jmp pageS
    ;-------------------------------------------------------------------------------
    ;---------------------- fermeture du fichier sur le disque ---------------------
    fermeF: mov ah,3eh             ;ferme le fichier
            mov bx,id3
            int 21h
    
            mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;efface l'écran
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
    
            jmp affichR            ;saut termine le programme
    ;-------------------------------------------------------------------------------
    ;------ efface l'écran et positionne le curseur pour une nouvelle page ---------
    pageS:  mov [nbr1],0           ;met les compteurs à 0
            mov [nbr2],0
            mov [nbr3],0
            mov [nbr4],0
            mov [nbr5],0
            mov [nbr6],0
            mov [nbr7],0
            mov [nbr8],0
            mov [nbr9],0
            mov [nbr10],0
            mov [nbr11],0
            mov [nbr12],0
            mov [nbr13],0
            mov [nbr14],0
            mov [nbr15],0
            mov [nbr16],0
            mov [nbr17],0
            mov [nbr18],0
            mov [nbr19],0
            mov [nbr20],0
            mov [nbr21],0
            mov [nbr22],0
            mov [nbr23],0
            mov [nbr24],0
            mov [nbr25],0
    
            cmp [id54],1           ;teste l'action sur la touche [F10]
            jnz r2
            mov [id54],0           ;met l'indicateur à 0
            jmp debut
    
    r2:     mov ah,6
            mov al,25
            mov bh,7
            mov ch,0               ;efface l'écran si plus de 25 lignes
            mov cl,0
            mov dh,25
            mov dl,79
            int 10h
    
            mov dh,0
            mov dl,7               ;place le curseur ligne 1 colonne 7
            mov ah,02h             ;si plus de 25 lignes
            mov bh,0
            int 10h
    
            mov ah,09h
            mov dx,offset id91     ;affiche le texte id91 (SUITE)
            int 21h
    
            mov dh,1               ;ligne 2
            mov dl,1               ;colonne 1
    
            mov [id53],0           ;remet l'indicateur de sauvegarde … 0
    
            jmp ecrit1C            ;entrée d'une nouvelle ligne
    ;-------------------------------------------------------------------------------
    ;---------------------------- efface une ligne ---------------------------------
    effLI:  mov dl,0               ;d‚bute par le premier caractère
            mov [id10],dl          ;sauve la ligne
            mov [id11],dh          ;sauve la colonne
    
    effL:   mov [id12],dl          ;sauve la colonne pour effacement
    
            mov ah,02h
            mov bh,0               ;positionne le curseur
            int 10h
    
            mov ah,09h
            mov dx,offset id7      ;efface le caractère
            int 21h
    
            mov dh,[id11]          ;récupère la ligne
            mov dl,[id12]          ;récupère la colonne pour effacement
            add dl,+1
    
            cmp dl,80              ;compare avec le nombre de caractères max
            jnz suite18            ;si vrai retour entrée d'un nouveau caractère
            mov [id52],0
            jmp ecrit1C
    
    suite18:jmp  effL              ;efface le caractère suivant
    ;-------------------------------------------------------------------------------
    ;--------------------------- rétablit l'affichage ------------------------------
    affichR:mov dh,1               ;ligne nø 1
            mov dl,1               ;colonne nø 1
            mov ah,02h
            mov bh,0               ;remet le curseur ligne 1 colonne 1
            int 10h
    
            mov ah,01h
            mov ch,6               ;rétablit le curseur d'origine (_)
            mov cl,7
            int 10h
    ;-------------------------------------------------------------------------------
    ;---------------------------- rétablit ctrl break ------------------------------
            mov dx,[id21]          ;récupère l'adresse du ctrl break
            mov ds,[id20]
    
            mov ah,25h             ;rétablit l'int 1bh (ctrl break)
            mov al,1bh
            int 21h
    
            pop es
            pop ax
            pop cx                 ;récupère les registres
            pop bx
            pop ds
            pop dx
            popf
    ;-------------------------------------------------------------------------------
    ;============================ FIN DU PROGRAMME =================================
            mov ah,4ch             ;termine le programme
            int 21h
    ;-------------------------------------------------------------------------------
    ;--------------------------- FIN POUR ASSEMBLAGE -------------------------------
    projet  ends                   ;directive d'assemblage fin du programme
            end start
    ;-------------------------------------------------------------------------------
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  7. #7
    Inactif  

    Homme Profil pro
    Directeur R&D
    Inscrit en
    novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur R&D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : novembre 2009
    Messages : 22
    Points : 0
    Points
    0
    Billets dans le blog
    1
    Par défaut
    Bonjour Mat.M...

    NON... en fait, je veux pouvoir TOUT contrôler... mais, du même endroit... une fois la machine démarrée et prête à l'emploi...

    Exemple : c'est une fois démarré(après achat), que la '''prise en compte''' de microsoft, je suppose ?!?... a fait '''une MAJ''' dont je pense qui a modifier le pc, qui s'est... bloqué !...
    en enlevant le DD... pour un DD sous W7... RE-blocage... et pire que cela... au retour dans son pc... pas de démarrage... ERR 3f0 je crois, donc plus de boot...
    après nouveau boot sur clé linux, disque sans os, et smart absent !...

    bref, en gros, j'apprends linux, je compte utiliser/modifier Kubuntu, MAIS, avant, je veux TOUT ce qui me permettra de contrôler et gérer MON pc sans que personne de l'extérieur ne puisse le faire !...

    en commençant par le bios... avant le reste... voilà pourquoi j'aimerai avoir les adresses, infos, sites, voir acheter les livres pour apprendres tout ça...

    en gros...

  8. #8
    Inactif  

    Homme Profil pro
    Directeur R&D
    Inscrit en
    novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Directeur R&D
    Secteur : Arts - Culture

    Informations forums :
    Inscription : novembre 2009
    Messages : 22
    Points : 0
    Points
    0
    Billets dans le blog
    1
    Par défaut
    OUI...
    Sinon JML19, effectivement tu as peut-être raison... je vais me décider à ouvrir mes cartons d'époque, dans mes combles, pour vérifier si je n'ai pas déjà ces livres, ou quelque chose d'approchant...

    Déjà en cherchant des joint spy pour ma moto, j'étais tombé par hasard sur mon pack OS2 2.0, avec l'intention d'essayer de l'installé sur mon serveur... une fois fini... soit avec virtualbox, ou VMWare...
    Enfin... je voulais... c'était un '''vieux-pieux''' !!!... (oui je sais c'est volontaire !...)

    Mais là, vu qu'il faut TOUT réapprendre pour linux, autant commencer en partant de la base, et c'est vrai que si j'en ai... ils vont me faciliter la vie...

    Je ne sais même pas si je n'ai pas encore ceux du Zx80 que je m'étais monté à l'époque(et que je n'ai plus !) ?... mais je dois avoir ceux de l'assembleur du 6502, du 8088... et p'tète même du 68000... faut que je recherche...

    Sinon pour Mat.M...

    Le principe est simple, créer une '''machine''' linux, équipée d'une '''chaine''' complète(genre Plateforme de Développement), de l'assembleur + C + Python + Apache + tout ce qui va avec HTML, CSS, PHP, MySQL, Filezilla... dans un premier temps... (pour développer en interne, s'autohéberger ?... voir faire plusieurs sites ?... à voir...)

    Mettre en place les outils, les leçons et tutos, plus les sources (git) pour se TRADUIRE, dans un 1er temps, tous ce qui va être utilisé... et dans un 2ème temps, pour intégrer, comme si c'était '''natif''', toutes les applications, extensions, fonctions DANS la distribution !...

    Parce que => '''spectacle''' pour faire une capture d'écran dans Kubuntu ?????.... RIEN à voir !... et il y en a des centaines comme ça !... et je ne te parle pas des icônes stupides, et autres '''xlWiodg7''', pour mettre une virgule à l'écran ???...

    Bref, ça c'est pour la pratique, autant que pour mon chauvinisme !... que les gens fassent leurs applis ?... OK... mais DANS le système, ça doit être inclus, précis, convivial, et clair autant qu'intuitif !!!!... C'est MON point de vue... au 21ème siècle !...

    Exemple => créer une simple base de données avec les références numérotées des messages... tu changes de pays... tu changes de base !... point !... Hé-Bé-NONG !...(accent du sud !)... t'as le premier écrans en '''français''' et les sous écrans... en '''british''' !!!... alors que la distrib est FRANçAISE => MAGEIA ?!?!... bref...

    Ensuite, c'est la propriété du PROPRIéTAIRE !!!...

    Donc TOUT DOIT ÊTRE FERMé à la 1ère utilisation, et FONCTIONNEL !!!... PAS d'ouvertures, PAS d'autorisations, Même Ubuntu a viré amazone !... Pour que, ensuite, après explications, ou conseils, le PROPRIéTAIRE décide ou non de se faire les MAJ !!!... les Ajouts, les Connexions... ect...ect...

    Il doit pouvoir savoir qui utilise tel port I/o ?... pouvoir les fermer TOUS, ou sur '''cartographie/scénarios/conditions/Horo-programations, que LUI même aura défini, et pas un '''espion-camouflé-de-REDMOND'''...

    Idem pour NFC, Wifi, Bluetooth, et autres DLNA...

    Le tout, PERSO-Upgradable, PERSO-Modifiable, soit en utilisation externe type interpréteur-python, soit en module exécutale externe, soit en remplacement d'un module '''fictif'''créé à cet effet pendant la compilation de la distribution, soit en recompilant la distribution...

    Voila en gros... mais ça a déjà commencé !... petit à petit j'avance...

    Par contre, une petite question qui peux paraître '''idiote''', pour le '''fameux GPL 75+2-3 ???... et éviter les dépôts contre-auteurs ?... ou, ceux qui privatise du PUBLIQUE !... ces GPL... comment ça marche ?...

    Bon je me doute bien, que cela ne va pas se faire ici... mais j'aimerai bien avoir le ou les liens pour commencer à m'informer ?... ce serai sympa, MERCI...

    Voili-voilou... en gros... Je vous remercie de me suivre et discuter avec moi... Je vous tiens au courrant...

    ...@+++...

  9. #9
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    décembre 2010
    Messages
    14 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2010
    Messages : 14 398
    Points : 22 277
    Points
    22 277
    Billets dans le blog
    10
    Par défaut
    Si tu veux utiliser des caractères accentués en majuscule c'est simple, il faut utiliser la touche Alt et le pavé numérique.

    É = Alt + 144

    Ê = Alt + 210

    Ë = Alt + 211

    È = Alt + 212

    Le plus simple étant d'utiliser une table des codes ASCII.

    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 852
    Points : 205 047
    Points
    205 047
    Billets dans le blog
    83
    Par défaut
    Bonjour,

    Avez-vous vu ce projet là : https://libreboot.org/ ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    octobre 2020
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : octobre 2020
    Messages : 20
    Points : 7
    Points
    7
    Par défaut
    Tu as raison Mister.BIXS de vouloir garder le contrôle de ta machine. Le BIOS est utile pour démarrer la machine mais il est aussi modifiable afin de s'adapter aux nouveaux matériels qui sortent chaque année, ce qui bon pour limiter obsolescence. Mais du coup le BIOS devient le talon d'achile de la machine car un rançongiciel ou virus peut falsifier sa composante en mémoire modifiable EPROM et prendre alors le contrôle de la machine.

    Selon moi JML19 il faudrait un réaliser un BIOS en augmentant sa composante dans la mémoire morte PROM et en diminuant sa composante dans la mémoire modifiable EPROM. Le plus important est que le démarrage et la prise de contrôle de la machine soit codé dans la mémoire morte PROM et non dans la mémoire modifiable EPROM.

  12. #12
    Expert éminent sénior
    Avatar de JML19
    Homme Profil pro
    Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Inscrit en
    décembre 2010
    Messages
    14 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Retraité : Electrotechnicien Electronicien Informaticien de la SNCF
    Secteur : Transports

    Informations forums :
    Inscription : décembre 2010
    Messages : 14 398
    Points : 22 277
    Points
    22 277
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par toyo2020 Voir le message
    Tu as raison Mister.BIXS de vouloir garder le contrôle de ta machine. Le BIOS est utile pour démarrer la machine mais il est aussi modifiable afin de s'adapter aux nouveaux matériels qui sortent chaque année, ce qui bon pour limiter obsolescence. Mais du coup le BIOS devient le talon d'achile de la machine car un rançongiciel ou virus peut falsifier sa composante en mémoire modifiable EPROM et prendre alors le contrôle de la machine.

    Selon moi JML19 il faudrait un réaliser un BIOS en augmentant sa composante dans la mémoire morte PROM et en diminuant sa composante dans la mémoire modifiable EPROM. Le plus important est que le démarrage et la prise de contrôle de la machine soit codé dans la mémoire morte PROM et non dans la mémoire modifiable EPROM.

    Bonjour toyo2020

    Je pense que ce BIOS existe c'est l'UEFI.

    Je pense que cette interface est en PROM et n'est pas modifiable.
    Vous pouvez utiliser les FAQ (ICI) ou les Tutoriels (ICI) et aussi accéder au blog (ICI)

Discussions similaires

  1. Quel langage pour calendrier html modifiable sans rechargement de la page
    Par piranha2209 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 22/06/2011, 12h06
  2. Quel langage pour le développement embarqué ?
    Par freakydoz dans le forum Débats sur le développement - Le Best Of
    Réponses: 37
    Dernier message: 23/04/2007, 19h31
  3. Quel langage pour développer un logiciel de télétransmission
    Par gidebo dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 28/08/2003, 14h19
  4. quel langage pour créer des "applications" sur 1 s
    Par jaribu dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 30/07/2003, 14h06
  5. Quel langage pour un application graphique sous windows
    Par ipeteivince dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 06/06/2003, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo