MCGA поддерживает глубину цвета 4 бит, что составляет 16 цветов. Но когда я пытаюсь напечатать все эти цвета, я получаю только первые 8 из них, а остальные 8 просто дублируют их, как на рис. Ниже. Может быть, я делаю что-то неправильно здесь, или все из-за DOSBox?16 цветов для фона в текстовом режиме MCGA BIOS (AL = 03h)
Код (MASM, под DOSBox 0.74):
TITLE PROGRAM193
;----------------------------------------------------------
.MODEL SMALL
.STACK 64
.DATA
;----------------------------------------------------------
.CODE
MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV AX, 0600h ;AH = 06h (scroll up window)
; black (0)
MOV BH, 0Fh ;0 (black) background, F (white) text
MOV CX, 0000h ;upper line, left column
MOV DX, 004Fh ;finishing line, right column
INT 10h
; blue (1)
MOV BH, 1Fh
MOV CX, 0100h
MOV DX, 014Fh
INT 10h
; green (2)
MOV BH, 2Fh
MOV CX, 0200h
MOV DX, 024Fh
INT 10h
; cyan (3)
MOV BH, 3Fh
MOV CX, 0300h
MOV DX, 034Fh
INT 10h
; red (4)
MOV BH, 4Fh
MOV CX, 0400h
MOV DX, 044Fh
INT 10h
; magenta (5)
MOV BH, 5Fh
MOV CX, 0500h
MOV DX, 054Fh
INT 10h
; brown (6)
MOV BH, 6Fh
MOV CX, 0600h
MOV DX, 064Fh
INT 10h
; light gray (7)
MOV BH, 7Fh
MOV CX, 0700h
MOV DX, 074Fh
INT 10h
; -------------------------------
; | The problem starts up here... |
; -------------------------------
; dark gray (8)
MOV BH, 8Fh
MOV CX, 0800h
MOV DX, 084Fh
INT 10h
; light blue (9)
MOV BH, 9Fh
MOV CX, 0900h
MOV DX, 094Fh
INT 10h
; light green (A)
MOV BH, 0AFh
MOV CX, 0A00h
MOV DX, 0A4Fh
INT 10h
; light cyan (B)
MOV BH, 0BFh
MOV CX, 0B00h
MOV DX, 0B4Fh
INT 10h
; light red (C)
MOV BH, 0CFh
MOV CX, 0C00h
MOV DX, 0C4Fh
INT 10h
; light magenta (D)
MOV BH, 0DFh
MOV CX, 0D00h
MOV DX, 0D4Fh
INT 10h
; yellow (E)
MOV BH, 0EFh
MOV CX, 0E00h
MOV DX, 0E4Fh
INT 10h
; white (F)
MOV BH, 0F1h
MOV CX, 0F00h
MOV DX, 0F4Fh
INT 10h
MOV AX, 4C00h
INT 21h
MAIN ENDP
END MAIN
Поскольку вы, кажется, заинтересованы в этом виде старого обидчивый программирования ASM, хорошее правило thumb - то, что Dosbox почти всегда прав. Есть, очевидно, случаи, когда он частично не подражает старой ОС 100%, но что-то на этом уровне работает очень хорошо. – Blindy
Я не ставил его, потому что он был старым, я обращался к вашему вопросу «или все из-за DOSBox». Если вы продолжите программирование под Dosbox, это очень поможет вам понять, что это довольно хорошо - любое странное поведение - это то, как работает DOS. Таким образом вы узнаете, что в Google найти решение! – Blindy
@ Блинди, понял! Это было написано где-то вроде «Машина всегда правильная», и это кажется правдой. Спасибо за это упоминание. – yulian