les fonctions système sont appelé avec les interruptions 60h à 6Fh en assembleur ou avec leurs fonctionsC équivalent en Csi il y as plusieurs fonction disponible, le numéros de la fonction sera dans le registre alint60h termine la tache en coursint61h fonctions généralesint62h force la commutation de tâcheint63h fonctions d'interfaceint64h fonctions fichierint65h fonction de communication inter-tâcheint66h fonctions port série et parallèlesint68h fonctions périphériques usbcodes d'erreurscodes de services
int 60h
termine la tache en cours (pas d'argument)équivalent C: stop()
int 61h fonctions générales
int61h,0 envoyer une commande au systèmeint61h,1 mettre en veille la tacheint61h,2 obtenir IDint61h,3 obtenir commandeint61h,4 obtenir option dans commande (par n°)int61h,5 obtenir option dans commande (par lettre)int61h,6 écrire une ligne dans le journalint61h,7 modifier descriptif de la tacheint61h,8 modifier taille d'un segment de la tacheint61h,9 lire la date et l'heure actuelleint61h,10 déclarer son type de serviceint61h,11 rechercher un serviceint61h,12 lire compteur tempsint61h,13 obtenir message systèmeint61h,14 lire le journalint61h,15 copier des données dans la zone de copier/collerint61h,16 lire les données dans la zone de copier/collerint61h,17 effacer la zone de copier/collerint61h,18 lire le dossier de travail en coursint61h,19 rechercher les taches que l'on as créeint61h,100 convertir chaine décimale asciiz en entier 32bitsint61h,101 convertir chaine hexadécimale en entier 32bitsint61h,102 convertir entier 32bits en chaine décimale asciizint61h,103 convertir entier 32bits en chaine hexadécimale asciizint61h,104 convertir entier 16bits en chaine hexadécimale asciizint61h,105 convertir entier 8bits en chaine hexadécimale asciizint61h,108 convertir chaine asciiz en adresse Ethernet int61h,109 convertir chaine asciiz en adresse ipv4int61h,110 convertir chaine asciiz en adresse ipv6int61h,111 convertir adresse Ethernet en chaine asciizint61h,112 convertir adresse ipv4 en chaine asciizint61h,113 convertir adresse ipv6 en chaine asciizint61h,114 convertir chaine utf8Z en GUID/UUID(en cours de dévellopement)int61h,115 convertir GUID/UUID en chaine utf8Z(en cours de dévellopement)int61h,116 convertir données base64 en données binairesint61h,117 convertir données binaires en base64 int61h,118 convertir données binaires en base64urlint61h,119 convertire un compteur temp unix (unix timestamp) en date et heure int61h,120 convertire une date et une heure en un compteur temp unix (unix timestamp)int61h,150 calcul un crc16int61h,151 calcul un crc32int61h,152 décompresse une zone compressé par deflateint61h,153 décompresse un fichier compressé par deflate
envoyer une commande au système
entrées:
al = 0ds:edx = pointeur vers la commande a envoyer sous la forme d'une chaine utf8Zsorties:
eax = erreurs code d'erreuréquivalent C: cmd()
mettre la tache en pause
entrées:
al = 1ecx = durée de la pause divisé par 2.5mssorties:
eax = erreurs code d'erreuréquivalent C: delay()
obtenir l'ID de la tâche
entrées:
al = 2sorties:
eax = erreurs code d'erreurbx = ID de la tacheéquivalent C: id_tache()
lire la commande qui as appelé la tache
entrées:
al = 3ds:edx = zone de 512 octet ou sera écrit la commandesorties:
eax = erreurs code d'erreuréquivalent C: arg_tot()
lire un argument de la tache (par numéro)
entrées:
al = 4ah = numéros de l'argumentds:edx = pointeur vers la zone mémoire ou copier l'argumentcl = taille maximum (0=256)sorties:
eax = erreurs code d'erreuréquivalent C: arg_num()
lire un argument de la tache (par lettre)
entrées:
al = 5ah = lettre de l'argumentds:edx = pointeur vers la zone mémoire ou copier l'argument sous la forme d'une chaine utf8Zcl = taille maximum (0=256)sorties:
eax = erreurs code d'erreuréquivalent C: arg_lettre()
ajouter du texte dans le journal systeme
entrées:
al = 6ds:edx = pointeur vers le texte a écrire dans le journal sous la forme d'une chaine utf8Zsorties:
eax = erreurs code d'erreuréquivalent C: printJ()
modifier le descripteur de la tâche
entrées:
al = 7ds:edx = pointeur vers le texte a écrire dans le descripteur de tache sous la forme d'une chaine utf8Zsorties:
eax = erreurs code d'erreuréquivalent C: printD()
modifier la taille d'un des segment de la tâche
entrées:
al = 8dx = sélecteur du segment a modifierecx = taille du segment souhaitésorties:
eax = codes d'erreurséquivalent C: changeT()
lire la date et l'heure
entrées:
al = 9sorties:
bh = heurebl = minutesi = seconde (en millième)dl = jourdh = moiscx = annéeéquivalent C: lireDH()
change le code de service de la tâche
entrées:
al = 10ah = code servicessorties:
eax = codes d'erreurséquivalent C: changeS()
recherche des services
entrées:
al = 11ah = services code service recherchéds:edx = pointeur vers la zone ou copier la table des servicescl = nombre de service maximum dans la tablesorties:
eax = codes d'erreurséquivalent C: rechercheS()
lire le compteur temps
entrées:
al = 12sorties:
eax = 32bit de poids faible du compteur tempsedx = 32bit de poids fort du compteur temps
lire message système et message d'erreur
entrées:
al = 13ah = type de message (0 = système, 1 = erreur)ds:edx = pointeur vers la zone ou copier le message sous la forme d'une chaine utf8Zcl = numéros du messagech = taille maximum du messagesorties:
eax = codes d'erreurs
lire le journal système
entrées:
al = 14es:edx = pointeur vers la zone ou copier le journal sous la forme d'une chaine utf8Zecx = taille maximum du messagesorties:
eax = codes d'erreurs
copier des données dans le presse papier
entrées:
al = 15es:edx = pointeur vers les données a copierecx = taille des données a copiersorties:
eax = codes d'erreurs
lire des données dans le presse papier
entrées:
al = 16es:edx = pointeur vers l'endroit ou il faut écrire le presse papierecx = taille des données a maximum que l'on peut écriresorties:
eax = codes d'erreurs
effacer le contenue du presse papier
entrées:
al = 17sorties:
eax = codes d'erreurs
lire l'adresse du dossier de travail
entrées:
al = 18es:edx = pointeur vers la zone de 512 octet ou copier l'adresse du dossier de travail sous la forme d'une chaine utf8Zsorties:
eax = codes d'erreurs
recherche les taches que l'on as créer
entrées:
al = 11ds:edx = pointeur vers la zone ou copier la table des id de tachecl = nombre de tache maximum dans la tablesorties:
eax = codes d'erreurs
convertir une chaine de caractère représentant un nombre décimal
entrées:
al = 100ds:edx = pointeur vers la chaine a convertirsorties:
eax = codes d'erreursecx = valeur de ce nombre
convertir une chaine de caractère représentant un nombre hexadécimal
entrées:
al = 101ds:edx = pointeur vers la chaine a convertirsorties:
eax = codes d'erreursecx = valeur de ce nombre
convertir un nombre 32bits en une chaine de caractère de sa représentation décimal
entrées:
al = 102ecx = nombreds:edx = pointeur vers une zone mémoire de 16 octet ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir un nombre 32bits en une chaine de caractère de sa représentation hexadécimal
entrées:
al = 103ecx = nombreds:edx = pointeur vers une zone mémoire de 16 octet ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir un nombre 16bits en une chaine de caractère de sa représentation hexadécimal
entrées:
al = 104ecx = nombreds:edx = pointeur vers une zone mémoire de 16 octet ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir un nombre 8bits en une chaine de caractère de sa représentation hexadécimal
entrées:
al = 105ecx = nombreds:edx = pointeur vers une zone mémoire de 16 octet ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir une chaine de caractère représentant une adresse ethernet en adresse ethernet codé comme dans une trame
entrées:
al = 108ds:ecx = pointeur vers l'adresse a convertirds:edx = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir une chaine de caractère représentant une adresse ipv4 en adresse ipv4 codé comme dans une trame
entrées:
al = 109ds:ecx = pointeur vers l'adresse a convertirds:edx = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir une chaine de caractère représentant une adresse ipv6 en adresse ipv6 codé comme dans une trame
entrées:
al = 110ds:ecx = pointeur vers l'adresse a convertirds:edx = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir adresse ethernet codé comme dans une trame en une chaine de caractère représentant une adresse ethernet
entrées:
al = 111ds:ecx = pointeur vers la a zone ou sera copié le résultatds:edx = pointeur vers la chaine de caractère a convertirsorties:
eax = codes d'erreurs
convertir adresse ipv4 codé comme dans une trame en une chaine de caractère représentant une adresse ipv4
entrées:
al = 112ds:ecx = pointeur vers la a zone ou ser copié le résultatds:edx = pointeur vers la chaine de caractère a convertirsorties:
eax = codes d'erreurs
convertir adresse ipv6 codé comme dans une trame en une chaine de caractère représentant une adresse ipv6
entrées:
al = 113ds:ecx = pointeur vers la a zone ou ser copié le résultatds:edx = pointeur vers la chaine de caractère a convertirsorties:
eax = codes d'erreurs
convertir une chaine Base64(tout type) en binaire
entrées:
al = 116ds:esi = chaine en base64 a convertirecx = taille de la chaineds:edi = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir donnée binaire en une chaine Base64 générale
entrées:
al = 117ds:esi = données binaire a convertirecx = taille des donnéeds:edi = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertir donnée binaire en une chaine Base64 pour Url
entrées:
al = 118ds:esi = données binaire a convertirecx = taille des donnéeds:edi = pointeur vers une zone mémoire ou sera copié le résultatsorties:
eax = codes d'erreurs
convertire un compteur temp unix (unix timestamp) en date et heure
entrées:
al = 119ecx = lsb du comteur tempedx = msb du compteur tempsorties:
eax = codes d'erreursbh = heurebl = minutesi = seconde (en millième)dl = jourdh = moiscx = année
convertire une date et une heure en un compteur temp unix (unix timestamp)
entrées:
al = 119bh = heurebl = minutesi = seconde (en millième)dl = jourdh = moiscx = annéesorties:
eax = codes d'erreursecx = lsb du comteur tempedx = msb du compteur temp
calcul un CRC16
entrées:
al = 150ds:esi = début de la chaineecx = Nb d'octet de la chainebx = valeur initiale du CRCdx = "polynome"sorties:
ax = valeur du CRC
calcul un CRC32
entrées:
al = 151ds:esi = début de la chaineecx = Nb d'octet de la chaineebx = valeur initiale du CRCedx = "polynome"sorties:
eax = valeur du CRC
décompression deflate
entrées:
al = 152ds:esi = pointeur vers les données a décompresseres:edi = pointeur ver la zone ou seront décompressé les donnéessorties:
eax = codes d'erreursesi = nombre d'octet de la partie compresséedi = nombre d'octet de la partie decompressé
décompression de fichier deflate
entrées:
al = 153edx = adresse dans le fichier ou se trouve les données compresséesi = n° du descripteur du fichier compresséedi = n° du descripteur du fichier ou seront décopressé les donnéessorties:
eax = codes d'erreursesi = nombre d'octet de la partie compresséedi = nombre d'octet de la partie decompressé
int 62h
force la commutation de tâche (pas d'argument)équivalent C: raf()
int 63h
int63h,0 création consoleint63h,1 suppression consoleint63h,2 obtenir information écranint63h,3 change la console affichéint63h,5 obtient le caractère+touche de la fifo de réception clavierint63h,6 acquisition d'une chaine de caractère validé par entréeint63h,7 demande la mise a jour complète de l'écranint63h,8 demande la mise a jour partielle de l'écranint63h,10 écrire une chaine utf8Z a une position définiint63h,11 écrire une chaine a la position du curseurint63h,12 définir la position du curseurint63h,13 système de choix par menuint63h,14 barre de progression mode texteint63h,21 dessine un pixel a la position x y avec une couleur prédéterminéint63h,22 dessiner un carré de couleur avec une couleur prédéterminéint63h,23 dessiner un segment avec une couleur prédéterminéint63h,24 dessiner un disque avec une couleur prédéterminéint63h,25 écrire une chaine a la position x yint63h,26 écrire une chaine a la position x y suivant une largeur maximaleint63h,27 écrire une image a la position x yint63h,50 crée une image videint63h,51 lit les caractéristiques d'un fichier imageint63h,52 lit l'image d'un fichier imageint63h,53 déplace une image avec réadaptation de la tailleint63h,54 déplace un fragment d'imageint63h,55 insère une image dans une autre
création console
entrées:
al = 0ah = optionsdx = selecteur du segment a uttiliser pour la consolesorties:
eax = codes d'erreurs
fermeture console
entrées:
al = 1sorties:
aucunes sorties
lit les caractéristiques de l'écran
entrées:
al = 2ds:edx = pointeur ou copier la table des informations (voir ci dessous)sorties:
eax = codes d'erreurs
changement console affiché
entrées:
al = 3dx = id de la tâche que l'on souhaite affichersorties:
eax = codes d'erreurs
lecture saisie clavier
entrées:
al = 5sorties:
al = code de touche ou du bouton souris (valeurs F0h à FFh)ah = état des touche spéciales│7│6│5│4│3│2│1│0│ │ │ │ │ │ │ │ └───── Maj gauche │ │ │ │ │ │ └────── Maj droit │ │ │ │ │ └─────── Ctrl gauche │ │ │ │ └──────── Ctrl droit │ │ │ └───────── Alt │ │ └────────── Alt Gr └─┴─────────── innutiliséebx = 0 ou position X si sourisecx = caractère associé a la touche ou position Y si souris
acquisition d'une chaine
entrées:
al = 6ah = couleurds:edx=adresse ou sera ecrit la chaine (avec chaine de pré remplissage obligatoire)ecx = nombre d'octet maxsorties:
al = code touche qui a validé la saisie
demande la mise a jour complète de l'écran
entrées:
al = 7sorties:
eax = codes d'erreurs
demande la mise a jour partielle de l'écran
entrées:
al = 8ebx = coordonnée X coin supérieur gaucheecx = coordonnée Y coin supérieur gaucheesi = coordonné X coin inférieur droitedi = coordonné X coin inférieur droitsorties:
eax = codes d'erreurs
écrire une chaine utf8Z a une position défini
entrées:
al = 10ah = couleurds:edx = pointeur vers chaine de caractère utf8Zebx = position en Xecx = position en Ysorties:
eax = codes d'erreurs
écrire une chaine a la position du curseur
entrées:
al = 11ah = couleurds:edx = pointeur vers chaine de caractère utf8zsorties:
eax = codes d'erreurs
définir la position du curseur
entrées:
al = 12ebx = position en Xecx = position en Ysorties:
eax = codes d'erreurs
système de choix par menu
entrées:
al = 13bl = ligne preselectionnébh = couleur de base (3bits)cl = première ligne du menuch = nombre de ligne sorties:
eax = codes d'erreursbl = ligne selectionnébh = touche qui as validé
barre de progression mode texte
entrées:
al = 14esi = progressionedi = totalebx = position X de la barreecx = position Y de la barreedx = taille de la barre en nombre de caractèresorties:
eax = codes d'erreurs
dessine un pixel a la position x y avec une couleur prédéterminé
entrées:
al = 21ah = bit par pixel de la couleurbx = position Xcx = position Yedx = couleur sorties:
eax = codes d'erreurs
dessiner un carré de couleur avec une couleur prédéterminé
entrées:
al = 22ah = bit par pixel de la couleurbx = coordonnée X coin supérieur gauchecx = coordonnée Y coin supérieur gauchesi = coordonné X coin inférieur droitdi = coordonné Y coin inférieur droitedx = couleur sorties:
eax = codes d'erreurs
dessiner un segment avec une couleur prédéterminé
entrées:
al = 23ah = bit par pixel de la couleurbx = coordonnée X débutcx = coordonnée Y débutsi = coordonné X findi = coordonné Y finedx = couleursorties:
eax = codes d'erreurs
dessiner un disque avec une couleur prédéterminé
entrées:
al = 24ah = bit par pixel de la couleurbx = position Xcx = position Yedx = couleuresi=rayon du disquesorties:
eax = codes d'erreurs
écrire une chaine a la position x y
entrées:
al = 25ah = couleurbx = position Xcx = position Yds:edx = pointeur vers la chaine utf8Zsorties:
eax = codes d'erreurs
écrire une chaine a la position x y suivant une largeur maximale
entrées:
al = 26ah = couleurbx = position Xcx = position Yds:edx = pointeur vers la chaine utf8Zesi = nombre de caractère max en largeursorties:
eax = codes d'erreurs
écrire une image a la position x y
entrées:
al = 27bx = position Xcx = position Yds:edx = pointeur vers une image au format BMSsorties:
eax = codes d'erreurs
crée une image vide
entrées:
al = 50ah = nombre de bit par couleurebx = largeur de l'imageecx = hauteur de l'imageedx = couleur de l'imageds:edi=position de l'imagesorties:
eax = codes d'erreurs
lit les caractéristiques d'un fichier image
entrées:
al = 51ebx = Id du fichier imagesorties:
eax = codes d'erreursebx = largeur de l'imageecx = hauteur de l'imageedx = [24MSB = taille image au format BMS 8LSB = bit par pixel]
lit l'image d'un fichier image
entrées:
al = 52ebx = Id du fichier imagees:edi = adresse ou copier l'imagesorties:
eax = codes d'erreurs
déplace une image avec réadaptation de la taille
entrées:
ds:esi = image d'origineds:edi = image de sortiesorties:
eax = codes d'erreurs
extrait un fragment d'image
entrées:
al = 54ds:esi = image d'originees:edi = image de sortieebx = position x du fragmentecx = position y du fragmentsorties:
eax = codes d'erreurs
insère une image dans une autre
entrées:
al = 55ds:esi = image d'origineds:edi = image de sortieebx = position x du fragmentecx = position y du fragmentsorties:
eax = codes d'erreurs
int 64h
fonctions fichierint64h,0 ouvrir fichierint64h,1 fermer le fichierint64h,2 créer fichierint64h,3 supprimer fichierint64h,4 lit le fichierint64h,5 ecrire dans le fichierint64h,6 lit les attributs d'un fichierint64h,7 ecrire les attributs d'un fichierint64h,8 lire dans un secteurint64h,9 ecrire dans un secteurint64h,10 lire les information d'un disqueint64h,11 définit le msb du numéros de secteur lors des fonction 8 et 9int64h,12 met a jour la table des partition d'un disqueint64h,13 definis vitesse disqueint64h,14 définis le msb de l'adresse de lecture/ecriture fichier (fonction 4 et 5)int64h,15 réserve espace pour fichierint64h,16 lit contenue répertoireint64h,17 lit disques disponibleint64h,18 lit nombre de secteur et taille secteur
ouvrir fichier
entrées:
al = 0ds:edx = chaine de caractère du nom du fichier a ouvrirebx = numéros de dossier qui contientsorties:
eax = codes d'erreursbx=numéros du fichieréquivalent C: open_file()
fermer fichier
entrées:
al = 1ebx = numéros du fichier a fermer sorties:
eax = codes d'erreurséquivalent C: close_file()
créer fichier
entrées:
al = 2ds:edx = chaine de caractère du nom du fichier a créerebx = numéros de dossier qui contiendra le fichiersorties:
eax = codes d'erreursbx = numéros du fichieréquivalent C: create_file()
supprimer fichier
entrées:
al = 3ebx = numéros du fichier a fermersorties:
eax = codes d'erreurséquivalent C: delete_file()
lit le fichier
entrées:
al = 4es:edi = zone ou copier les donnéesebx = numéros du fichier ouvertedx = offset dans le fichierecx = quantité a liresorties:
eax = codes d'erreurséquivalent C: read_file()
ecrire dans le fichier
entrées:
al = 5es:esi = adresse des données a copierebx = numéros du fichier ouvertedx = offset dans le fichierecx = quantité a ecriresorties:
eax = codes d'erreurséquivalent C: write_file()
lit les attributs d'un fichier
entrées:
al = 6ah = type d'attribut a lire(0=nom 1=taille fichier 2=attributs)ebx = numéros du fichierds:edx=destination des données demandésorties:
eax = codes d'erreurs
ecrire les attributs d'un fichier
entrées:
al = 7ah = type d'attribut a modifier(0=nom 1=taille fichier 2=attributs)ebx = numéros du fichierds:edx = données demandésorties:
eax = codes d'erreurs
lire dans un secteur
entrées:
al = 8ch = n° de disquecl = nombre de secteur a lireebx = numéros de secteures:edi = zone de destinationsorties:
eax = codes d'erreurs
ecrire dans un secteur
entrées:
al = 9ch = n° de disquecl = nombre de secteur a lireebx = numéros de secteurds:esi = donnée a écriresorties:
eax = codes d'erreurs
lire les information d'un disque
entrées:
al = 10ch = n° de disquees:edi = zone de destinationsorties:
eax = codes d'erreurs
définit le msb du numéros de secteur lors des fonction 8 et 9
(en cours de dévellopement)
met a jour la table des partition d'un disque
entrées:
al = 12ch = n° de disquesorties:
eax = codes d'erreurs
definis vitesse disque
(en cours de dévellopement)
définis le msb de l'adresse de lecture/ecriture fichier (fonction 4 et 5)
(en cours de dévellopement)
réserve espace pour fichier
entrées:
al = 15ebx = numéros de descripteur fichierecx = taille du fichier a reserversorties:
eax = codes d'erreurs
lit contenue répertoire
entrées:
al = 16ds:edi = zt ou copier les donnéesecx = taille maxedx = premier fichier a liresorties:
eax = codes d'erreursebx = nombre de fichier chargé dans la zt
lit disques disponible
entrées:
al = 17ds:edx = pointeur ou copier le bitmap de 32 octetsorties:
eax = codes d'erreursoctet 0 à 15 partitionsoctet 16 a 19 usboctet 20 a 23 sataoctet 24 a 28 reservéoctet 29 = b0-b6 reservé b7= disquette octet 30 = cdrom (ide+sata)octet 31 = ata/atapi
lit nombre de secteur et taille secteur
entrées:
al = 18ch = numéros de disquesorties:
eax = codes d'erreursecx = taille des secteursedx = msb nb de secteurebx = lsb nb de secteur
int 65h
fonction de communication inter-tâcheint65h,0 ouverture canalint65h,1 fermeture canalint65h,2 tester changement descripteurint65h,3 tester donnée disponible sur canauxint65h,4 lire descripteurint65h,5 ecrire descripteurint65h,6 lire donnée sur canalint65h,7 envoyer donnée sur canalint65h,8 attendre changement descripteur sur canalint65h,9 attendre donnée disponible sur canalint65h,10 lire info sur canal
ouverture canal
entrées:
al = 0bx = ID de la tache avec qui communiquerecx = taille du descripteuredx = attribut canalesi = taille de la zone tampon d'envoie ou masque d'alignement mode 2edi = taille de la zone tampon de receptionsorties:
eax = codes d'erreursebx = adresse de la zone dans la mémoire hauteedx = adresse physique du descripteur
fermeture canal
entrées:
al = 1ebx = adresse du canal dans la mémoire hautesorties:
eax = codes d'erreurs
tester changement descripteur
entrées:
al = 2sorties:
eax = codes d'erreursebx = adresse du canal dans la mémoire haute
tester donnée disponible sur canaux
entrées:
al = 3sorties:
eax = codes d'erreursebx = adresse du canal dans la mémoire haute
lire descripteur
entrées:
al = 4ebx = adresse du canal dans la mémoire hauteecx = quantité a lireesi = adresse dans la zonees:edi = desitinationsorties:
eax = codes d'erreurs
ecrire descripteur
entrées:
al = 5ebx = adresse du canal dans la mémoire hauteecx = quantité a lireedi = adresse dans la zoneds:esi = origine des donnéessorties:
eax = codes d'erreurs
lire donnée sur canal
entrées:
al = 6ebx = adresse du canal dans la mémoire hauteecx = taille des donnée maximum a lirees:edi = zone ou seront écrite les donnéessorties:
eax = codes d'erreursecx = taille des données lue
envoyer donnée sur canal
entrées:
al = 7ebx = adresse du canal dans la mémoire hauteecx = taille des donnée a envoyerds:esi = données a envoyersorties:
eax = codes d'erreursecx = taille des données écrite
attendre changement descripteur sur canal
entrées:
al = 8ebx = adresse du canal dans la mémoire hauteecx = temps a attendresorties:
eax = codes d'erreurs
attendre donnée disponible sur canal
entrées:
al = 9ebx = adresse du canal dans la mémoire hauteecx = temps a attendresorties:
eax = codes d'erreurs
lire info sur canal
entrées:
al = 10ebx = adresse du canal dans la mémoire hautesorties:
eax = codes d'erreursbx = ID de la tache au bout du canalecx = taille du descripteuredx = attribut canalesi = taille de la zone tampon d'envoieedi = taille de la zone tampon de receptionebp = données en attente de lecture
int 66h
fonctions port série et parallèlesint66h,0 envoyer octetint66h,1 envoyer chaineint66h,2 reçevoir octetint66h,3 reçevoir chaineint66h,4 lecture des bit de controle des portsint66h,5 ecriture des bit de controle des portsint66h,6 configurer portint66h,7 reserver accès portint66h,8 liberer accès portint66h,9 changer la taille de la zt de reception
envoyer octet
entrées:
al = 0ah = numéros de portcl = octet a envoyersorties:
eax = codes d'erreursnuméros de port0 à 7 Port COM 1 à COM 88 à 15 Port LPT 1 à LPT 8
envoyer chaine
entrées:
al = 1ah = numéros de portes:esi = donnée a envoyerecx = nombre d'octet a envoyersorties:
eax = codes d'erreurs
reçevoir octet
entrées:
al = 2ah = numéros de portsorties:
eax = codes d'erreurscl = octet reçu
reçevoir chaine
entrées:
al = 3ah = numéros de portes:edi = zone ou ecrire les donnéesecx = nombre d'octet a reçevoir maximumsorties:
eax = codes d'erreurs
lecture des bit de controle des ports
entrées:
al = 4ah = numéros de portsorties:
eax = codes d'erreursecx = bit d'état du port
Bits d'état des ports série et parallèle
Bits de controle pour port COM│6 et +│5│4│3│2│1│0│ │ │ │ │ │ │ │ └──── DTR │ │ │ │ │ │ └───── RTS │ │ │ │ │ └────── CTS │ │ │ │ └─────── DSR │ │ │ └──────── RI │ │ └───────── DCD/RLSD └────┴────────── innutiliséBits de controle pour port LPT│6 et +│5│4│3│2│1│0│ │ │ │ │ │ │ │ └──── saut de page │ │ │ │ │ │ └───── reset │ │ │ │ │ └────── selection phériphérique │ │ │ │ └─────── signal erreur │ │ │ └──────── signal périphérique on line │ │ └───────── signal plus de papier └────┴────────── innutilisé
ecriture des bit de controle des ports
entrées:
al = 5ah = numéros de portecx = bit d'état du portsorties:
eax = codes d'erreurs
configurer port com
entrées:
al = 6ah = numéros de portecx = vitesse du port (max 115200bit/s)dl = attributsorties:
eax = codes d'erreursdétail des attributs│7│6│5│4│3│2│1│0│ │ │ │ │ │ │ │ └──── 0 = 7 bits par caractère 1 = 8bit par caractère │ │ │ │ │ │ └───── innutilisé │ │ │ │ │ └────── 0 = 1 bit de stop, 1 = 2 bit de stop │ │ │ │ └─────── 0 = pas de bit de parité, 1 = présence d'un bit de parité │ │ │ └──────── 0 = parité impaire(odd), 1 = parité paire(even) └─┴─┴───────── innutilisé
reserver accès port
entrées:
al = 7ah = numéros de portsorties:
eax = codes d'erreurs
liberer accès port
entrées:
al = 8ah = numéros de portsorties:
eax = codes d'erreurs
changer la taille de la zt de reception d'un port com
entrées:
al = 9ah = numéros de portecx = taille de la zone tampon de réceptionsorties:
eax = codes d'erreurs
int 68h
int68h,0 réservation périphériqueint68h,1 liberation acces périphériqueint68h,2 lecture descripteurint68h,3 selection configuration actuelleint68h,10 envoie commande bruteint68h,11 echange données bulkint68h,12 ouverture connexion isocrone vers terminaison(en cours de dévellopement)int68h,13 ouverture connexion interruption vers terminaison(en cours de dévellopement)int68h,14 fermeture connexion iso ou int(en cours de dévellopement)int68h,15 echange données canal isocrone ou int (en cours de dévellopement)
réservation périphérique
entrées:
al = 0bl = adresse du périphérique à reserversorties:
eax = codes d'erreurs
liberation acces périphérique
entrées:
al = 1bl = adresse du périphérique à liberersorties:
eax = codes d'erreurs
lecture descripteur
entrées:
al = 2bl = adresse du périphériquebh = terminaison `???????????????????????????`dl = index du descripteurdh = type de descripteursorties:
eax = codes d'erreurs
selection configuration actuelle
entrées:
al = 3`??????????????????????????????????????????`sorties:
eax = codes d'erreurs
envoie commande
entrées:
al = 10bl = adresse du périphériquebh = terminaison `????????????????????????`dl = index du descripteurdh = type de descripteursorties:
eax = codes d'erreurs
echange donnée bulk
entrées:
al = 11bl = adresse du périphériquebh = terminaison + sensdl = index du descripteurdh = type de descripteursorties:
eax = codes d'erreurs
ouverture canal isocrone
entrées:
al = 12bl = adresse du périphériquebh = terminaisonecx = taille d'une tramesorties:
eax = codes d'erreursebx = adresse du canal si aucunes erreurs
ouverture canal interruption
entrées:
al = 13bl = adresse du périphérique à libererbh = terminaisondl = periodicitéecx = taille d'une tramesorties:
eax = codes d'erreursebx = adresse du canal si aucunes erreurs
fermeture canal isocrone ou interruption
entrées:
al = 14ebx = adresse du canal a fermersorties:
eax = codes d'erreurs
echange de donné sur canal isocrone ou interruption
entrées:
al = 15ebx = adresse du canal ecx =taille des données a transfererds:edx =adresse de la zt des donnéessorties:
eax = codes d'erreurs
codes d'erreurs
0 fonction exécute sans erreur 1 paramètre incorrecte 2 erreur de lecture 3 lecteur/disque/fichier non trouvé 4 erreur du système de fichier 5 erreur d'écriture 6 pas de réponse disque 7 disque occupé 8 fichier déjà ouvert 9 interdiction de lecture10 interdiction d'ouverture11 plus assez de mémoire12 le fichier ouvert est un dossier13 erreur d'origine inconnue (normalement jamais utilisé, sauf erreur)14 nombre de couleur non reconnue15 écran absent16 zone tampon vide17 zone tampon pleine18 contrôleur ne répond pas19 contrôleur absent20 dossier non vide (dans le cas d'une suppression)21 dossier non vide (dans le cas d'une suppression)22 caractère interdit dans le nom de fichier23 création de fichier impossible
codes de services
0 aucun service1 écran2 camera3 imprimante4 scanner5 son6 réseau Ethernet7 reseau wifi8 service dns910 aucun service11 à 63 réservé pour les standard64 à 255 utilisable
fonction en C
stop()cmd()delay()id_tache()arg_tot()arg_num()arg_lettre()printJ()printD()changeT()lireDH()changeS()rechercheS()compteur()message_systeme()message_erreur()lire_journal()ecrire_pp()lire_pp()effacer_pp()lire_dossier_travail()sous_taches()deci()hexa()long2deci()long2hexa()etherS2B()ipv4S2B()ipv6S2B()etherB2S()ipv4B2S()ipv6B2S()base64binaire()raf()open_file()close_file()create_file()delete_file()read_file()write_file()taille_file()error_file()
void stop()
termine la tache en cours
void cmd(char* ¨commande¨)
Envoie une commande au systeme¨commande¨ = commande a envoyer au systeme
void delay(unsigned long ¨temps¨)
attend¨temps¨ = temps à attendre en milliseconde
unsigned int id_tache()
Renvoie l'id de la tache
long arg_tot(char *¨string¨)
lit la commande de la tache¨string¨ = zone de 512 octet ou sera recopiéla commande
long arg_num(char ¨numero¨,char *string)
lit un argument par son numéros¨numero¨ = numéro de l'argument a lire¨string¨ = zone de 256 octet ou sera recopié l'argument
long arg_lettre(char ¨lettre¨,char *¨string¨)
lit un argument par sa lettre¨lettre¨ = numéro de l'argument a lire¨string¨ = zone de 256 octet ou sera recopié l'argument
void printJ(char *¨string¨)
ecrit dans le journal systeme¨string¨ = chaine a ecrire dans le journal
void printD(char *¨string¨)
change le descriptif de tache¨string¨ = chaine a ecrire dans le descripteur de tache
long changeT(long ¨taille¨)
change la taille mémoire occupé par la tache¨taille¨ = taille souhaité
struct dateheure lireDH()
lire la date et l'heurerenvoie une structure d type dateheure
void changeS(unsigned char ¨service¨)
change le service de la tache¨service¨ = services code service fournis par l'application
unsigned long rechercheS(unsigned char ¨service¨,unsigned int *table,unsigned char taille)
recherche une tache par son service¨service¨ = services code service recherché¨table¨ = table d'int ou seront écrit la liste des id des tache ¨taille¨ = nombre d'entrée maximum de la table
long compteur()
lit le compteur temps¨¨ =
void message_systeme(int ¨num¨,char* ¨chaine¨)
charge un message systeme¨num¨ = numéros du message a charger¨chaine¨ = zone de 256 octet ou seront copié le message systeme
void message_erreur(int ¨num¨,char* ¨chaine¨)
charge un message d'erreur¨num¨ = codes d'erreurs¨chaine¨ = zone de 256 octet ou seront copié le message d'erreur
void lire_journal(char* ¨chaine¨,long ¨taille¨)
lit le journal systeme¨chaine¨ = endroit ou copier le journal systeme¨taille¨ = nombre d'octet maximum du journal a lire
void ecrire_pp(char* ¨chaine¨,long ¨taille¨)
ecrire dans le presse papier¨¨ =
void lire_pp(char* chaine,long taille)
lit dans le presse papier¨¨ =
void effacer_pp()
efface le presse papier
void lire_dossier_travail(char* ¨chaine¨)
lit le dossier de travail¨chaine¨ = espace de 512 octet ou sera copié le dosier de travail
void sous_taches(int* ¨table¨,char ¨nb¨)
liste les taches que l'on as créer¨table¨ = table ou seront recopié la liste de taches¨nb¨ = nombre maximum d'element de cette liste
long deci(char *¨chaine¨)
convertit chaine décimal en nombre¨chaine¨ = chaine a convertir
long hexa(char *¨chaine¨)
convertit chaine héxadécimal en nombre¨chaine¨ = chaine a convertir
void long2deci(long ¨nombre¨,char *¨chaine¨)
convertit un nombre en chaine décimal¨nombre¨ = nombre a convertir¨chaine¨ = chaine de 16 octets ou ecrire la conversion
void long2hexa(long ¨nombre¨,char *¨chaine¨)
convertit un nombre en chaine héxadécimal¨nombre¨ = nombre a convertir¨chaine¨ = chaine de 16 octets ou ecrire la conversion
void etherS2B(char *¨entrée¨,char *¨sortie¨)
convertit une adresse ethernet sous forme de chaine en forma binaire¨entrée¨ = adresse en format chaine¨sortie¨ = adresse en format binaire
void ipv4S2B(char *¨entree¨,char *¨sortie¨)
convertit une adresse ip V4 sous forme de chaine en forma binaire¨entrée¨ = adresse en format chaine¨sortie¨ = adresse en format binaire
ipv6S2B(char *¨entree¨,char *¨sortie¨)
convertit une adresse ip V6 sous forme de chaine en forma binaire¨entrée¨ = adresse en format chaine¨sortie¨ = adresse en format binaire
void etherB2S(char *¨entree¨,char *¨sortie¨)
convertit une adresse ethernet sous forme binaire en chaine¨entrée¨ = adresse en format binaire¨sortie¨ = adresse en format chaine
void ipv4B2S(char *¨entree¨,char *¨sortie¨)
convertit une adresse ip v4 sous forme binaire en chaine¨entrée¨ = adresse en format binaire¨sortie¨ = adresse en format chaine
void ipv6B2S(char *¨entree¨,char *¨sortie¨)
convertit une adresse ip v6 sous forme binaire en chaine¨entrée¨ = adresse en format binaire¨sortie¨ = adresse en format chaine
base64binaire(char *¨entree¨,char *¨sortie¨, long ¨taille¨)
convertir une chaine codé en base64 en donnée binaire¨¨ =
void raf()
passe a la tache suivante
long open_file(char* ¨nom¨)
ouvre un fichier, renvoie l'id du fichier ouvert ou -1 si cela as échoué¨nom¨ = nom du fichier
long close_file(long ¨id¨)
ferme un fichier, renvoie le erreurs codes d'erreur de l'opération¨id¨ = id du fichier a fermer
long create_file(long ¨nom¨)
crée un fichier, renvoie l'id du fichier ouvert ou -1 si cela as échoué¨nom¨ = nom du fichier
long delete_file(long ¨id¨)
supprime un fichier, renvoie le erreurs codes d'erreur de l'opération¨id¨ = id du fichier a supprimer
long read_file(long ¨id¨,long ¨offset¨,long ¨count¨,char* ¨data¨)
lit dans un fichier, renvoie le erreurs codes d'erreur de l'opération¨id¨ = id du fichier a supprimer¨offset¨ = adresse dans le fichier¨count¨ = nombre d'octet¨data¨ = ou seront écrit les donnée lut
long write_file(long ¨id¨,long ¨offset¨,long ¨count¨,char* ¨data¨)
ecrit dans un fichier, renvoie le erreurs codes d'erreur de l'opération¨id¨ = id du fichier a supprimer¨offset¨ = adresse dans le fichier¨count¨ = nombre d'octet¨data¨ = donnée a ecrire
long taille_file(long ¨id¨)
lit la taille d'un fichier, renvoie la taille du fichier ouvert ou -1 si cela as échoué¨id¨ = id du fichier a supprimer
long error_file()
donne le code de la dernière erreurs erreur lorsque les fonctions renvoie -1
utf8z désigne uen chaine de caractère codé en utf8 et terminé par le caractère NULL (octet valant zéro
BMS: BitMap Simple
BMS est l'objet image standard uttilisé par les fonctions graphique de Seac taille contenueobjimage_bpp 1 octet nombre de bit par pixelobjimage_att 1 octet attributs de l'imageobjimage_x 2 octets largeur de l'imabe en pixelobjimage_y 2 octets hauteur de l'imabe en pixelobjimage_opl 4 octets nombre d'octet par ligneobjimage_ctp 4 octets couleur de transparenceobjimage_dat variable donnée de chaque pixel de gauche à droite et de haut en basobjimage_dat variable donnée de chaque pixel de gauche à droite et de haut en bas