В техническом описании обнаружилась одна из возможных причин:
Код:
┌───────────────────────────────────┐
256 байт│ Палитра‐0 многоцветного режима │ старшие байты
├───────────────────────────────────┤
256 байт│ Палитра‐0 многоцветного режима │ младшие байты
└───────────────────────────────────┘
Разумеется, в описании системных вызовов не сказано, что 16-битные значения палитры нужно разбивать на два блока. Качество документации удручает.
- - - Добавлено - - -
Ну да, так и оказалось.
Пожалуй, приведу код формирования палитры.
Код:
GeneratePalette:
MOV #Palette+256.,R1 ; palette's middle address
MOV #64.,R0 ; generate 64*4 shades of grey
1: MOV R0,R2
DEC R2 ; current colour value
CLR R3 ; index in the table of bits
CLR R4 ; 16-bit combined color value
MOV #6,R5 ; process 6 bits
2: ROR R2 ; get a bit
BCC 3
BIS BitsRed(R3),R4
BIS BitsGreen(R3),R4
BIS BitsBlue(R3),R4
3: TST (R3)+ ; next bit in the table
SOB R5,2
MOV #4,R5 ; save colour 4 times
4: SWAB R4
MOVB R4,-(R1) ; save high byte of color value
SWAB R4
MOVB R4,256.(R1) ; save low byte of color value
SOB R5,4
SOB R0,1
RET
BitsRed: .WORD 0,10,20,2000,4000,10000
BitsGreen: .WORD 40,100,200,20000,40000,100000
BitsBlue: .WORD 0,1,2,4,400,1000 ; strange RGB bit mapping
P.S. палитра должна получиться серой. Похоже, в эмуляторе какой-то глюк с интерпретацией 16-битного цвета.