簡體   English   中英

使用視頻內存的文本編輯器

[英]text editor in c using video memory

我正在使用C創建文本編輯器。你能解釋一下這些宏嗎?

#define Ad (unsigned char far *)0xb8000000
#define Pos(y,x) (2*((y)*80+x))
#define Write(y,x,ch) *(Ad+Pos(y,x))=ch
#define WriteA(y,x,fb) *(Ad+1+Pos(y,x))=fb

回到控制台程序的黑暗時代,人們習慣通過直接寫入屏幕緩沖區來輸出文本。

控制台屏幕緩沖區被組織為連續的字節對數組,描述顯示的字符及其屬性(顏色,背景顏色,最終閃爍)。

在您的情況下,屏幕緩沖區似乎是0xb800000( Ad )。 假設屏幕寬度為80, Pos將屏幕位置(y,x)轉換為屏幕緩沖區中的內存偏移量。

Write更改指定位置的顯示字符,而WriteA更改字符的顏色。

我的天哪,就像1990年一樣......

  • Ad是視頻卡(文本模式)映射到其字符生成器的內存部分的地址。 因此,如果您將* A'寫入* Ad,那么您將在屏幕的左上角顯示“A”。
  • Pos是一個宏,用於計算x,y位置屏幕左上角的偏移量。 (這是一個危險的破碎宏,因為'x'周圍沒有()。)
  • 寫入將char寫入(x,y)位置
  • WriteA將字符屬性(顏色等)寫入(x,y)位置。

我不想苛刻,但如果你在這個級別上掙扎,你將很難寫一個文本編輯器。

  • 廣告返回視頻內存開頭的地址
  • Pos將ax,y位置轉換為內存中的絕對位置(假設80個字符寬度)
  • 寫入將字符ch放在x,y位置
  • WriteA在x,y位置設置字體顏色

你不想使用它們。

這些宏用於舊硬件,可以直接訪問屏幕。

  • 第一個宏只是指定屏幕的基地址( far不被標准C識別)
  • 第二個宏將屏幕位置轉換為偏移量
  • 第3個人將一個角色寫入屏幕
  • 第四個將一種顏色寫入屏幕

同樣, 您不想使用這些宏

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM