PC-98 MASM32でグラフィック描画してみた


環境

  • Windows 10 Home (64bit)
  • MASM32
  • Neko Project Ⅱ x64
  • DiskExplorer

ソース

gvram.asm
comment *
ml /c /AT /Fl gvram.asm
link16 /t gvram;
*
    .model  tiny

    .code
    org 100h
start:
    mov al, 01h
    out 6ah, al     ; 16色モード
    mov al, 4bh
    out 0a2h, al    ; G-GDC CSRFORMコマンド
    mov al, 0h
    out 0a0h, al    ; 縦方向の拡大率
    mov al, 08h
    out 068h, al    ; 400ラインモード
    mov al, 0dh
    out 0a2h, al    ; G-GDC STARTコマンド

    mov al, 0       ; 16色モードのパレット設定
    mov dl, 0
    mov cx, 16
L1:
    out 0a8h, al    ; パレット番号
    out 0aah, al    ; G 輝度
    out 0ach, al    ; R 輝度
    xchg    ax, dx
    out 0aeh, al    ; B 輝度
    xchg    ax, dx
    inc al
    add dl, 2
    cmp dl, 0fh
    jbe @f
    mov dl, 0fh
@@:
    loop    L1

    mov ax, 0a800h
    lea bx, tile_b
    call    draw
    mov ax, 0b000h
    lea bx, tile_r
    call    draw
    mov ax, 0b800h
    lea bx, tile_g
    call    draw
    mov ax, 0e000h
    lea bx, tile_i
    call    draw
    mov ax, 4c00h
    int 21h

;   ax  gvram segment
;   bx  tile addr
draw:
    mov es, ax
    mov di, 0
    mov dx, 5*200
@@:
    mov si, bx
    mov cx, 8
    cld
    rep movsw
    dec dx
    jnz @b
    ret

tile_b  dw  0ff00h, 0ff00h, 0ff00h, 0ff00h, 0ff00h, 0ff00h, 0ff00h, 0ff00h
tile_r  dw  00000h, 0ffffh, 00000h, 0ffffh, 00000h, 0ffffh, 00000h, 0ffffh
tile_g  dw  00000h, 00000h, 0ffffh, 0ffffh, 00000h, 00000h, 0ffffh, 0ffffh
tile_i  dw  00000h, 00000h, 00000h, 00000h, 0ffffh, 0ffffh, 0ffffh, 0ffffh

    end start

おまけ