トップページ⇒tech
18コメント8KB

C言語でグラフィック

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
graph.hだのビデオモードだの意味がわかりません・・・
0002>1NGNG
グラフィックプログラミングはWindowsやXでやれ!
0003名無しさん@お腹いっぱい。NGNG
俺に命令するなぁぁ
0004>>1NGNG
ところで、お幾つなのですか?

0005>1NGNG
「歯磨いてから、寝ろよ!」なんて命令してみる
0006名無しさん@お腹いっぱい。NGNG
「味噌汁で顔洗ってから出直してこい!」と命令&挑発してみる
0007名無しさん@お腹いっぱい。NGNG
図書館で「IBM−PCグラフィックシステムハンドブック」でも探せ。
0008名無しさん@お腹いっぱい。NGNG
IBMPCでNEC98のグラフLIO的なモノってあるの?
0009( ゚Д゚) ゴルァNGNG
GLIO懐かしいな…うーん手元の資料には書いてねえ。
確かあれはROM−BASICで使ってたのを使いまわすってやつだったよな?
昔コピっておいたCマガの記事見てみたが98のGLIOに相当するのはないみたいだ。

それでまあ、1 についてだが、例えばWindowアプリケーションを作るんなら
WinならAPIあるしな。そういうスレでも参考にしとけ。
AT互換機のビデオモードってやつなら「描画するためのモード」だ。
わかんねえのはわかったからくだんねえスレッド立てるな。
0010名無しさん@お腹いっぱい。NGNG
ダメダメダメー
VRAMを直接触りたいのだ
0011名無しさん@お腹いっぱい。NGNG
俺、その辺得意
0012( ゚Д゚) ゴルァNGNG
俺が昔学校でコピってきたCマガの特集は結構参考になってるな。
これは1994年1月か…古っ。
VRAMいじるんなら確かに昔の資料をあさったほうがいいだろう。やっぱり古本屋あたりか?
0013名無しさん@お腹いっぱい。NGNG
本やでは工学図書のものしか見ないな。
「CとDOS/V」とかなんとかいうタイトルだったと思う。
あと「D0S/Vゲームプログラミングうんたらかんたら」
なんて本もあったような・・・
もしやBC++Suite?
0014名無しさん@お腹いっぱい。NGNG

include \user\meidov\macro.inc

EXTRN Xul:WORD@`Yul:WORD@`Xlr:WORD@`Ylr:WORD

;===============================================================
DATA SEGMENT PUBLIC 'DATA' PARA USE16
DATA ENDS
;===============================================================
.186
JUMPS
LOCALS
CODE SEGMENT PUBLIC 'CODE' PARA USE16
ASSUME cs:CODE@`ds:DATA
;===============================================================
;---------------------------------------------------------------
;【ライン描画】
;in : ss:sp Color@`Y2@`X2@`Y1@`X1
;out:nothing
;brk:nothing
;---------------------------------------------------------------
_Line PROC
ARG X1:WORD@`X2:WORD@`X1:WORD@`Y2:WORD@`Color:WORD

call Clip2D
push bp
mov bp@`sp
push di
push si

mov dx@`03CEh
mov al@`5
out dx@`al
inc dx
in al@`dx
and al@`0F6h ;Rmode 0/WMode0
or al@`3 ;Wmode 3
out dx@`al

mov ah@`BYTE PTR [Color] ;Color
xor al@`al ;Set/Reset REG.
mov dx@`03CEh
out dx@`ax

mov ax@`0F01h ;Enable Set/Reset REG.
mov dx@`03CEh
out dx@`ax

mov ax@`0003h ;
mov dx@`03CEh
out dx@`ax

mov ax@`0FF08h ;BitMask REG.
mov dx@`03CEh
out dx@`ax

mov ax@`0A000h
mov es@`ax

mov dx@`[X1]
mov cx@`[X2]
mov ax@`[Y1]
mov bx@`[Y2]
mov bp@`80 ;Y方向増分

mov si@`cx
sub si@`dx ;si = X2-X1
jns SHORT @@LINE0
neg si
mov dx@`cx ;始点Xの設定
xchg ax@`bx ;Y座標入れ替え
@@LINE0:
mov cx@`si ;Xの距離

mov si@`bx
sub si@`ax ;si = Y2-Y1
jns SHORT @@LINE1
neg bp
neg si
cmp cx@`si ;Xの距離と比較
jle SHORT @@YLine ;dx < dy
jmp SHORT @@Xline
@@LINE1:
cmp cx@`si ;Xの距離と比較
jle SHORT @@YLine ;dx < dy
;---------------------------------------------------------------
;Low Slope Line
; dx = Pos.X@` ax = Pos.Y
; cx = deltaX@` si = deltaY@` bp = VerticalInc.
;---------------------------------------------------------------
@@Xline:
push cx
call __AddrCalc ;al = Bit Mask
;cl = Shift Count
;di = GRAM ADDR.
pop cx
mov dx@`cx ;dX
mov bx@`cx
shr bx@`1 ;d
inc cx ;くり返し回数

@@XL_lp:
mov ah@`es:[di] ;Load G-REG.
xor ah@`ah
@@XL_lp2:
or ah@`al
sub bx@`si ;d -= dy
jl SHORT @@XL0
ror al@`1
jc SHORT @@XL1 ;
loop SHORT @@XL_lp2
mov es:[di]@`ah
jmp SHORT @@LINE_EXIT
@@XL0:
add bx@`dx ;d += dx
mov es:[di]@`ah
ror al@`1
adc di@`bp
loop SHORT @@XL_lp
jmp SHORT @@LINE_EXIT
@@XL1:
mov es:[di]@`ah
inc di
loop SHORT @@XL_lp
jmp SHORT @@LINE_EXIT
0015名無しさん@お腹いっぱい。NGNG
;---------------------------------------------------------------
;Hi Slope Line
; dx = Pos.X@` ax = Pos.Y
; cx = deltaX@` si = deltaY@` bp = VerticalInc.
;---------------------------------------------------------------
@@YLine:
push cx
call __AddrCalc ;al = Bit Mask
;cl = Shift Count
;di = GRAM ADDR.
pop cx

mov dx@`cx ;dX
mov bx@`si
shr bx@`1 ;d
mov cx@`si
inc cx ;くり返し回数
@@YL_lp:
mov ah@`es:[di] ;Load G-REG.
mov es:[di]@`al
sub bx@`dx ;d -= dx
jl SHORT @@YL0
add di@`bp ;Y += VY
loop SHORT @@YL_lp
jmp SHORT @@LINE_EXIT
@@YL0:
add bx@`si ;d += dy
ror al@`1 ;X += VX
adc di@`bp
loop SHORT @@YL_lp
@@LINE_EXIT:
pop si
pop di
pop bp
ret
;---------------------------------------------------------------
;【アドレス・マスク計算】
;in : ax = Y座標
; dx = X座標
;out: al = Bit Mask
; cl = Shift Count
; di = GRAM Offset Address
;brk:nothing
;---------------------------------------------------------------
__AddrCalc:
shl ax@`4 ;*16
mov di@`ax
shl ax@`2 ;*64
add di@`ax ;*64 + *16 = *80
mov cx@`dx
shr dx@`3
add di@`dx ;GRAM Offset

mov al@`80h
and cl@`7 ;Shift Count
shr al@`cl ;Bit Mask
ret

_Line ENDP

include 2dclip.asmPRGEND EQU $


CODE ENDS

END
0016名無しさん@お腹いっぱい。NGNG
ソフトバンクから出ている(出ていた)
「IBM PC ビデオシステムプログラミング」
ISBN4-89052-507-6
なんてのはどう?(つーか、これしか持ってない)
0017名無しさんi486NGNG
漏れの推奨は「DOS/Vプログラミング・リファレンス」ISBN4-89052-715-X
0018名無しさん@お腹いっぱい。NGNG
BC++SuiteはBGI付属じゃないのか
■ このスレッドは過去ログ倉庫に格納されています