80x25 の画像を VRAM に配置して画面に表示することになっている i8086 アセンブラーでコードを少し書きました。
entry start
start:
mov di,#0xb800 ; Point ES:DI at VRAM
mov es,di
mov di,#0x0000
mov si,#image ; And DS:SI at Image
mov cx,#0x03e8 ; Image is 1000 bytes
mov bl,#0x20 ; Print spaces
; How BX is used:
; |XXXX XXXX XXXXXXXX|
; ^^^^^^^^^ BL contains ascii whitespace
; ^^^^ BH higher 4 bits contain background color
; ^^^^ BH lower 4 bits contain unused foreground color
img_loop:
seg ds ; Load color
mov bh,[si]
seg es ; Write a whitespace and color to VRAM
mov [di],bx
add di,#2 ; Advance one 'pixel'
sal bh,#4 ; Shift the unused lower 4-bits so that they become background color for the 2nd pixel
seg es
mov [di],bx
add di,#2
add si,#1
sub cx,#1 ; Repeat until 1 KiB is read
jnz img_loop
endless:
jmp endless
image:
GET splash.bin
問題は、イメージ ファイルからのバイナリ データを as86 アセンブラに含めることができないことです。マニュアルページを見ましたが、機能するものは見つかりませんでした。
上記のコードをビルドしようとしてもエラーは発生しませんが、リンカーによって生成される出力ファイルのサイズはわずか 44 バイトであるため、明らかに 1000 バイトのイメージを挿入する必要はありませんでした。
誰でもそれを手伝ってもらえますか?私は何を間違っていますか?