ASM DOS sous xp (probleme memoire ecran)
bld01
-
othanga -
othanga -
Bonjour,
Voilà, j'ai toujours aimé programmer à mes heures perdues et depuis tout un temps, j'ai décidé de me lancer dans l'assembleur, j'ai d'abord fait quelques trucs avec l'emulateur c64 histoire de me familiariser en douceur avec l'asm et maintenant je m'attaque à l'asm sous dos. Le but : arriver à programmer quelques petites demo (scrolling, effet colorés) qui tournent dans une fenetre dos....
Mais bien evidemment, l'asm du c64 et celui d'un x86 est bien différent, plus riche et plus complexe....
ma première idée est d'afficher un caractere sur l'écran en utilisant la memoire video (et non l'int21h). J'ai lu que la memoire video du dos se trouve a b800:0000, un bye pour le code ascii du caractere et le byte suivant pour la couleur. donc la source peut se résumer à ça :
mov ax, b800h
mov es, ax
mov ax, 0000h
mov di,ax
mov al, '*'
mov es:[di],al
mov ax, 0001h
mov di,ax
mov al, 07
mov es:[di],al
ce qui devrait afficher une étoile et haut a gauche de l'ecran mais évidemment ça ne marche pas. rien ne se passe.
à savoir que je suis dans une fenetre dos sous xp et que j'utilise tasm et tlink.
je pense que ce code fonctionne mais j'ai l'impression que les adresses des memoires ecran des fenetre dos sous windows varient (surtout lorsqu'il y en a plusieurs) et donc je ne place pas les byte à la bonne place.
Enfin voilà, j'espère avoir été clair, merci d'avance ;)
bld01
Voilà, j'ai toujours aimé programmer à mes heures perdues et depuis tout un temps, j'ai décidé de me lancer dans l'assembleur, j'ai d'abord fait quelques trucs avec l'emulateur c64 histoire de me familiariser en douceur avec l'asm et maintenant je m'attaque à l'asm sous dos. Le but : arriver à programmer quelques petites demo (scrolling, effet colorés) qui tournent dans une fenetre dos....
Mais bien evidemment, l'asm du c64 et celui d'un x86 est bien différent, plus riche et plus complexe....
ma première idée est d'afficher un caractere sur l'écran en utilisant la memoire video (et non l'int21h). J'ai lu que la memoire video du dos se trouve a b800:0000, un bye pour le code ascii du caractere et le byte suivant pour la couleur. donc la source peut se résumer à ça :
mov ax, b800h
mov es, ax
mov ax, 0000h
mov di,ax
mov al, '*'
mov es:[di],al
mov ax, 0001h
mov di,ax
mov al, 07
mov es:[di],al
ce qui devrait afficher une étoile et haut a gauche de l'ecran mais évidemment ça ne marche pas. rien ne se passe.
à savoir que je suis dans une fenetre dos sous xp et que j'utilise tasm et tlink.
je pense que ce code fonctionne mais j'ai l'impression que les adresses des memoires ecran des fenetre dos sous windows varient (surtout lorsqu'il y en a plusieurs) et donc je ne place pas les byte à la bonne place.
Enfin voilà, j'espère avoir été clair, merci d'avance ;)
bld01
A voir également:
- ASM DOS sous xp (probleme memoire ecran)
- Double ecran - Guide
- Cle windows xp - Guide
- Capture d'écran whatsapp - Accueil - Messagerie instantanée
- Mémoire vive - Guide
- Retourner ecran pc - Guide
1 réponse
en théorie, windows est sensé émuler un PC sous MS-DOS (celui d'avant windows).
donc placer ta mémoire vidéo en B800:0000 (le bloc d'adresses utilisé pour le texte par les premières cartes couleurs)
est juste (il n'y a que le poke que j'aurais fait en une fois avec mov ax,2a07 puis es:mov [di],ax)
sauf que je viens de taper ton pgm (mais avec debug, j'ai pas d'assembleur) plus un mov ah,4c puis int21 et...
1. windows accepte qqes fois de lancer le pgm mais au bout de quelques tentatives, annonce une erreur NTVDM
2. debug accepte d'exécuter le pgm sans souci !
et j'ai beau faire, il n'y a que depuis DEBUG où l'étoile apparaît
=> j'ai peur que tu sois condamné à tester tes différentes expérimentations en b800 depuis debug
compensation: ça te rappellera le bon vieux temps :D
donc placer ta mémoire vidéo en B800:0000 (le bloc d'adresses utilisé pour le texte par les premières cartes couleurs)
est juste (il n'y a que le poke que j'aurais fait en une fois avec mov ax,2a07 puis es:mov [di],ax)
sauf que je viens de taper ton pgm (mais avec debug, j'ai pas d'assembleur) plus un mov ah,4c puis int21 et...
1. windows accepte qqes fois de lancer le pgm mais au bout de quelques tentatives, annonce une erreur NTVDM
2. debug accepte d'exécuter le pgm sans souci !
et j'ai beau faire, il n'y a que depuis DEBUG où l'étoile apparaît
=> j'ai peur que tu sois condamné à tester tes différentes expérimentations en b800 depuis debug
compensation: ça te rappellera le bon vieux temps :D
othanga
tsss... 072A !