Quindi sto scrivendo un gioco in C++ per MS-DOS e sto includendo alcuni assembly inline per la velocità. Questo particolare blocco di codice disegnerebbe una stella nella memoria video (0A000h). Il problema con il mio codice è che disegna solo un pixel in qualunque colore dh sia impostato. Per quanto ne so mov dx, 00007h equivale a impostare dh a 0 e dl a 7. Cosa c'è che non va?Cosa c'è di sbagliato con il mio codice assembly
L'equivalente codice C/C++ (o almeno la mia intenzione) viene commentato accanto a ciascuna riga. Il mio compilatore è turbo C++ 3.0. Sto provando a usare solo le istruzioni 8086/8088.
Inoltre so quanti anni MS-DOS è così non mi dicono di scrivere codice per un più recente compilatore/sistema operativo. Scrivere codice per dos è una specie di mio hobby.
pixelOffset = x + (y << 6) + (y << 8);
_asm {
mov ax, WORD PTR pixelOffset
mov di, ax
mov ax, 0A000h ;pointer to the video memory
mov es, ax
mov dx, 00007h ;indexed color 00 and 07
mov cx, 0000Fh ;indexed color white 0F
add ax, 2 ;pixelOffset += 2;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 319 ;pixelOffset += 319;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 317 ;pixelOffset += 317;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], cx ;videomem[pixelOffset] = WHITE;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 317 ;pixelOffset += 317;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dl ;videomem[pixelOffset] = LIGHT_GRAY;
add ax, 1 ;pixelOffset += 1;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
add ax, 319 ;pixelOffset += 319;
mov es:[di], dh ;videomem[pixelOffset] = BLACK;
}
Stai scrivendo * a ** DOS ** gioco? È fantastico. –
+1 per la nostalgia del gioco MS-DOS! –
@John Dibling: ya e lo metto su sourceforge quando ho finito – PgrAm