如何在emu8086中创建和绘制精灵?

时间:2019-03-01 04:11:27

标签: assembly emu8086

我已经获得了一个任务,需要使用emu8086来创建游戏。

但是问题是我不知道如何绘制精灵。

有人可以通过向我解释精灵创建来帮助我吗?

1 个答案:

答案 0 :(得分:3)

  

你能告诉我如何使用emu8086吗?

首先,您设置图形视频模式。接下来的代码选择320x200 256色模式:

mov     ax, 0013h  ; AH=00h is BIOS.SetVideoMode, AL=13h is 320x200 mode
int     10h

现在,您可以绘制任何喜欢的像素。以下是在屏幕中央绘制单个像素的示例:

mov     dx, 100    ; Y = 200 / 2
mov     cx, 160    ; X = 320 / 2
mov     bh, 0      ; DisplayPage
mov     ax, 0C02h  ; AH=0Ch is BIOS.WritePixel, AL=2 is color green
int     10h

要绘制一条线,请在更改一个或两个坐标的同时重复绘制像素。下面是绘制垂直线(100,50)-(100,150)的示例。这行有101个像素(150-50 + 1):

    mov     bh, 0      ; DisplayPage doesn't change
    mov     cx, 100    ; X is fixed for a vertical line
    mov     dx, 50     ; Y to start
More:
    mov     ax, 0C04h  ; AH=0Ch is BIOS.WritePixel, AL=4 is color red
    int     10h
    inc     dx         ; Next Y
    cmp     dx, 150
    jbe     More

要绘制区域,请使用几个嵌套循环。下面是绘制(200,33)-(209,35)之间的矩形的示例。该区域有30个像素(209-200 + 1)*(35-33 + 1):

    mov     si, Bitmap
    mov     bh, 0      ; DisplayPage doesn't change
    mov     dx, 33     ; Y to start
OuterLoop:
    mov     cx, 200    ; X to start
InnerLoop:
    lodsb              ; Fetch color for this pixel
    mov     ah, 0Ch    ; AH=0Ch is BIOS.WritePixel
    int     10h
    inc     cx         ; Next X
    cmp     cx, 209
    jbe     InnerLoop
    inc     dx         ; Next Y
    cmp     dx, 35
    jbe     OuterLoop

    ...

Bitmap:                ; Just some blue and cyan pixels
    db      1, 3, 1, 3, 1, 3, 1, 3, 1, 3
    db      3, 1, 3, 1, 3, 1, 3, 1, 3, 1
    db      1, 3, 1, 3, 1, 3, 1, 3, 1, 3