0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PC98:テキストVRAMを直接書き換えて文字表示する

Last updated at Posted at 2022-05-03

やりたいこと

テキストVRAMに直接書き込むことで文字を表示したい。

方法

  • 表示位置
    X(横位置0~80) Y(縦位置0~40)
    0A000H をスタートアドレスとしてoffsetを 2X+160Y で計算し、 0A000H:offset に文字コードを書き込む。
  • 属性
    ATT(色、アンダーライン、取消ライン、バックカラーとか)
    0A200H をスタートアドレスとしてoffsetを 2X+160Y で計算し、 0A200H:offset に文字属性を書き込む。

コード

tvram.asm
; X, Y に1文字(CHR)を表示するプログラム
;
; PC-9821Cx model S2 MEM16MB ODP
; Turbo C++  Version 1.01 Copyright (c) 1990 Borland International
; Turbo Assembler  Version 2.0  Copyright (c) 1988, 1990 Borland International
;

code segment
	assume cs:code, ds:code
	
	org 100h
;
;X、YからテキストVRAMアドレス(di)を計算する。
;	di = X*2 + Y*2*80
;

start:
	mov bx, word ptr [X]
	mov di, bx
	shl di, 1            ; di = X * 2

	mov ax, word ptr [Y]
	mov bx, 160          ; 160 = 2 * 80
	mul bx               ; mul bx  is  ax <= ax * bx
	add di, ax           ; di = X*2(di) + Y*160(ax)

	mov bx, [CHR]        ; CHR を表示させる
	mov ax, 0a000h       ; TextVRAM スタートアドレス = 0a000h
	mov es, ax
	mov word ptr es:di, bx
	mov ax, 0a200h       ; TextVRAM 文字属性スタートアドレス= 0a200h
	mov es, ax
	mov bx, word ptr [ATT]     ; 文字属性
	mov word ptr es:di, bx

	mov	ax, 4c00h
	int	21h

CHR dw  120,'$'
X	dw	30,'$'           ; 横40文字目
Y	dw	15,'$'           ; 縦15行目 に表示
ATT dw  1011111b,'$'     ; 文字属性

code ends
end start
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?