Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 148

Как перевести буквенно-цифровой режим в 40x25

29.09.2012, 23:25. Показов 1572. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Используя функции биос-а буквенно-цифровой режим из 80x25 в 40x25 можно перевести следующим образом:

Assembler
1
2
3
mov ah,0
mov al,1
int 10h
как это сделать не используя функции биос-а и дос-а, только через регистры и порты.

И ещё как через порты и регистры погасить курсор, через функции биос-а это делается так:

Assembler
1
2
3
mov ah,1
mov ch,20h
int 10h
Только не спрашивайте зачем мне это надо.
Если кто знает как это сделать помогите пожалуйста.
За помощь заранее благодарен!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2012, 23:25
Ответы с готовыми решениями:

Преобразовать дату в буквенно-цифровой код
Подскажите, если можно на примере, как преобразовать дату в буквенно-цифровой код? Например 20.01.2013 = 1K (1 = январь, К = 20-е число),...

Цифровой энергосберегающий режим
Здравствуйте, подскажите в чём может быть дело. Проблема следующая: при попытке вывести пк из сна монитор переходит в энергосберегающий...

Чёрный экран (цифровой энергосберегающий режим)
Здравствуйте. Имеется какая-то нерешаемая проблема, помогите пожалуйста. Монитор LG Flatron L204WT. BP-550W Intel core-i5...

4
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
30.09.2012, 18:44
1. посмотреть в какие значения устанавливает регистры биос. установить в те же
2. установить координаты курсора за пределы экрана. Я делал вот так:
Code
1
2
_outpw(0x3D4, 0x070E);
_outpw(0x3D4, 0xD00F);
0
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 148
30.09.2012, 18:53  [ТС]
Цитата Сообщение от Vort_ Посмотреть сообщение
1. посмотреть в какие значения устанавливает регистры биос. установить в те же
Я написал небольшую прогу и запускал её под дос в отладчике.
Очень долго я лазил в этом 10 прерывании но так и не смог уяснить то что меня интересует.
0
 Аватар для Vort_
200 / 200 / 78
Регистрация: 10.07.2012
Сообщений: 409
30.09.2012, 18:59
Цитата Сообщение от v4567 Посмотреть сообщение
Я написал небольшую прогу и запускал её под дос в отладчике.
Очень долго я лазил в этом 10 прерывании но так и не смог уяснить то что меня интересует.
повезло мой отладчик по биосу мог ходить только через Step Into (при Step Over ругался на read-only память)
---
лазить по прерыванию может понадобиться если неизвестно что от него ожидать
в случае же с такими простыми режимами (совместимыми с VGA) есть конечный набор регистров, больше которых и знать не надо (а именно: sequencer, misc reg, crtc, actl, grdc. есть ещё палитра - но я так понимаю её трогать не надо)
если кому интересна моя автоматическая лазалка по int 10h - вот она (FASM) [хардкор + возможны глюки - снимаю запреты прерываний]:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
org 0x100
 
; Move stack to new location
mov  sp, NewStackEnd - 2
 
; Set dump memory block
mov  ax, word [0x0002]
mov  bx, cs
add  bx, lastbyte shr 4
sub  ax, lastbyte shr 4
mov  [LastDumpSegment], bx
mov  [DumpSegment], bx
mov  [DumpPtrSeg], bx
mov  [DumpPtrOfs], 0
add  [LastDumpSegment], ax
dec  [LastDumpSegment]
 
; Set trap handler
push ds
push 0x0000
pop  ds
mov  ax, [1 * 4 + 0]
mov  [es:OldHandler + 0], ax
mov  ax, [1 * 4 + 2]
mov  [es:OldHandler + 2], ax
mov  [1 * 4 + 0], word TrapHandler
mov  [1 * 4 + 2], cs
pop  ds
 
; Enable trap flag
pushf
pop  ax
or   ax, 0x0100
push ax
popf
 
; Switch VESA mode
;mov  ah, 0x4F
;mov  al, 0x02
;mov  bx, 0x003;0x115
;int  0x10
 
mov  ah, 0x00
mov  al, 0x03 or 0x80
int  0x10
 
;mov  ah, 0x4F
;mov  al, 0x08
;mov  bl, 0x00
;mov  bh, 0x08
;int  0x10
 
; Disable trap flag
pushf
pop  ax
and  ax, 0xFEFF
push ax
popf
 
; Restore trap handler
push ds
push 0x0000
pop  ds
mov  ax, [es:OldHandler + 0]
mov  [1 * 4 + 0], ax
mov  ax, [es:OldHandler + 2]
mov  [1 * 4 + 2], ax
pop  ds
 
; Draw something
call DrawStripes
 
; Wait for keypress
mov  ah, 0x0
int  0x16
 
; Restore videomode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03
int  0x10
 
; Save dump
mov  ah, 0x3C
mov  dx, FilePath
mov  cx, 0
int  21h
 
mov  bx, ax
xor  dx, dx
xor  ecx, ecx
mov  si, [DumpSegment]
mov  edi, [DumpSize]
lb3:
cmp  edi, 0x10
jb   lb1
  mov  cx, 0x10
  sub  edi, 0x10
  jmp  lb2
lb1:
  mov  cx, di
  xor  edi, edi
lb2:
  push si
  pop  ds
  mov  ah, 0x40
  int  0x21
  jc   exit
  inc  si
  or   edi, edi
  jnz  lb3
 
; Exit
exit:
int  0x20
 
; ----------------------------------
FilePath db 'iodump.bin', 0
OldHandler rw 2
DumpSegment rw 1
LastDumpSegment rw 1
DumpPtrSeg rw 1
DumpPtrOfs rw 1
DumpSize dd 0
DumpOverflow db 0
IoType db 0
IoIP rw 1
 
SavedDS  rw 1
SavedEAX rd 1
SavedBX  rw 1
SavedCX  rw 1
SavedDX  rw 1
SavedSI  rw 1
SavedBP  rw 1
 
GuestIP  rw 1
GuestCS  rw 1
GuestFl  rw 1
 
; ----------------------------------
TrapHandler:
  mov  [cs:SavedDS], ds
  mov  [cs:SavedEAX], eax
  mov  [cs:SavedBX], bx
  mov  [cs:SavedCX], cx
  mov  [cs:SavedDX], dx
  mov  [cs:SavedSI], si
  mov  [cs:SavedBP], bp
 
  pop  [cs:GuestIP]
  pop  [cs:GuestCS]
  pop  [cs:GuestFl]
 
  cmp  [cs:DumpOverflow], 1
  je   exithandler
 
  cmp  [cs:IoType], 0
  je   NoPrevIo
    push [cs:DumpPtrSeg]
    pop  ds
    mov  si, [cs:DumpPtrOfs]
    mov  al, [cs:IoType]
    mov  [ds:si], al
    mov  dx, [cs:IoIP]
    mov  [ds:si+1], dx
    mov  dx, [cs:SavedDX]
    mov  [ds:si+3], dx
    mov  ebx, 5
    mov  ecx, [cs:SavedEAX]
    cmp  al, 0x01
    jne  @f
      add  bx, 1
      mov  [ds:si+5], cl
    @@:
    cmp  al, 0x02
    jne  @f
      add  bx, 2
      mov  [ds:si+5], cx
    @@:
    cmp  al, 0x03
    jne  @f
      add  bx, 4
      mov  [ds:si+5], ecx
    @@:
    cmp  al, 0x04
    jne  @f
      add  bx, 1
      mov  [ds:si+5], cl
    @@:
    cmp  al, 0x05
    jne  @f
      add  bx, 2
      mov  [ds:si+5], cx
    @@:
    cmp  al, 0x06
    jne  @f
      add  bx, 4
      mov  [ds:si+5], ecx
    @@:
 
    add  si, bx
    add  [cs:DumpSize], ebx
    mov  [cs:DumpPtrOfs], si
    and  [cs:DumpPtrOfs], 0x000F
    shr  si, 4
    add  [cs:DumpPtrSeg], si
 
NoPrevIo:
  mov  ds, [cs:GuestCS]
  mov  bx, [cs:GuestIP]
  mov  ax, [ds:bx]
 
  mov  [cs:IoIP], bx
  mov  [cs:IoType], 0
  cmp  al, 0xEE   ; out dx, al
  jne  @f
    mov  [cs:IoType], 1
  @@:
  cmp  al, 0xEF   ; out dx, ax
  jne  @f
    mov  [cs:IoType], 2
  @@:
  cmp  ax, 0xEF66 ; out dx, eax
  jne  @f
    mov  [cs:IoType], 3
  @@:
  cmp  al, 0xEC   ; in al, dx
  jne  @f
    mov  [cs:IoType], 4
  @@:
  cmp  al, 0xED   ; in ax, dx
  jne  @f
    mov  [cs:IoType], 5
  @@:
  cmp  ax, 0xED66 ; in eax, dx
  jne  @f
    mov  [cs:IoType], 6
  @@:
  cmp  al, 0xFA ; cli
  jne @f
    add  [cs:GuestIP], 1
  @@:
  cmp  al, 0xCD ; int X
  jne  @f
    xor  ch, ch
    mov  cl, ah
    mov  si, cx
    shl  si, 2
 
    add  [cs:GuestIP], 2
    push [cs:GuestFl]
    push [cs:GuestCS]
    push [cs:GuestIP]
 
    push 0
    pop  ds
    mov  ax, [ds:si]   ; ip
    mov  bx, [ds:si+2] ; cs
 
    mov  [cs:GuestIP], ax
    mov  [cs:GuestCS], bx
 
@@:
  mov  ax, [cs:LastDumpSegment]
  cmp  ax, [cs:DumpPtrSeg]
  jne  @f
    mov [cs:DumpOverflow], 1
  @@:
 
exithandler:
  mov  eax, [cs:SavedEAX]
  mov  bx, [cs:SavedBX]
  mov  cx, [cs:SavedCX]
  mov  dx, [cs:SavedDX]
  mov  si, [cs:SavedSI]
  mov  bp, [cs:SavedBP]
  mov  ds, [cs:SavedDS]
  push [cs:GuestFl]
  push [cs:GuestCS]
  push [cs:GuestIP]
  iret
 
; ----------------------------------
DrawStripes:
  pusha
  push es
  push 0xA000
  pop  es
  mov  bx, 5
  xor  si, si
  xor  di, di
  nextline:
    mov  cx, 640
    nextpixel:
      dec  cx
      xor  dx, dx
      mov  ax, cx
      shl  ax, 1
      div  bx
      xor  ah, ah
 
      cmp  si, 6
      jae  l1
    mov  ah, al
    xor  al, al
    stosb
    stosb
    mov  al, ah
    stosb
    xor  al, al
    stosb
    jmp  lf
      l1:
      cmp  si, 12
      jae  l2
    mov  ah, al
    xor  al, al
    stosb
    mov  al, ah
    stosb
    xor  al, al
    stosb
    stosb
    jmp  lf
      l2:
      cmp  si, 18
      jae  l3
    stosb
    xor  al, al
    stosb
    stosb
    stosb
    jmp  lf
      l3:
    stosb
    stosb
    stosb
    stosb
    jmp  lf
      lf:
 
      or  cx, cx
      jnz nextpixel
    inc si
    cmp si, 24
    jnz nextline
  pop es
  popa
  ret
 
align 16
NewStackStart rb 1024
NewStackEnd:
lastbyte:
декодер дампа I/O:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.IO;
 
namespace VesaTrapDecode
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryReader br = new BinaryReader(File.Open(
                "e:\\_Research\\Vesa\\IoDump_20_115.bin", FileMode.Open));
            for (; ; )
            {
                int recordType = br.ReadByte();
                br.ReadUInt16();
                //Console.Write("{0:X4}: ", br.ReadUInt16());
                Console.Write("{0:X4}", br.ReadUInt16());
                if (recordType == 0x01)
                    Console.WriteLine(" <- {0:X2}", br.ReadByte());
                else if (recordType == 0x02)
                    Console.WriteLine(" <- {0:X4}", br.ReadUInt16());
                else if (recordType == 0x03)
                    Console.WriteLine(" <- {0:X8}", br.ReadUInt32());
                else if (recordType == 0x04)
                    Console.WriteLine(" -> {0:X2}", br.ReadByte());
                else if (recordType == 0x05)
                    Console.WriteLine(" -> {0:X4}", br.ReadUInt16());
                else if (recordType == 0x06)
                    Console.WriteLine(" -> {0:X8}", br.ReadUInt32());
 
                if (br.BaseStream.Position == br.BaseStream.Length)
                    break;
            }
        }
    }
}
а вот то что может непосредственно понадобиться. дампер регистров:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
; ==============================
org  0x100
 
; set desired mode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03;0x115
int  0x10
 
; unlock CRTC regs - разлочка для GeForce`ов
;mov  ax, 0x573F
;mov  dx, 0x03D4
;out  dx, ax
 
; Dump registers: CRTC
mov  cx, 0x0100
mov  bx, 0x0000
mov  dx, 0x03D4
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [crregs + bx], ah
inc  bx
loop @b
 
; Dump registers: ACTL
mov  cx, 0x0005
mov  bx, 0x0010
mov  dx, 0x03C0
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [actlregs + bx - 0x10], ah
inc  bx
loop @b
 
; Dump registers: SEQ
mov  cx, 0x0005
mov  bx, 0x0000
mov  dx, 0x03C4
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [seqregs + bx], ah
inc  bx
loop @b
 
; Dump registers: GRAPH
mov  cx, 0x0009
mov  bx, 0x0000
mov  dx, 0x03CE
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [graphregs + bx], ah
inc  bx
loop @b
 
; Dump register: MISC
mov dx, 0x3CC
in  al, dx
mov [miscreg], al
 
; wait any key
mov  ah, 0x0
int  0x16
 
; restore mode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03
int  0x10
 
; save file
mov  ah, 0x3C
mov  dx, filepath
mov  cx, 0
int  21h
 
mov  bx, ax
mov  ah, 0x40
mov  dx, regsstart
mov  cx, regsend - regsstart
int  21h
 
; exit
int  0x20
 
; -----------------------------
filepath   db 'regs.bin', 0
 
regsstart:
crregs     rb 0x100
actlregs   rb 5
seqregs    rb 5
graphregs  rb 9
miscreg    rb 1
 
regsend:
; ==============================
1
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 148
30.09.2012, 19:05  [ТС]
Цитата Сообщение от Vort_ Посмотреть сообщение
повезло мой отладчик по биосу мог ходить только через Step Into (при Step Over ругался на read-only память)
не знаю может я что то не так делал, но запускал повторяю в досе и использовал отладчик afdpro

За код огромное спасибо! Сейчас смотрю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.09.2012, 19:05
Помогаю со студенческими работами здесь

Как программно перевести монитор в спящий режим?
Подскажите, как программно перевести монитор в спящий режим?

Как перевести форму в режим добавления записи?
есть кнопочка в панели навигации по таблице - 'добавить запись' надо чтобы форма открывалась уже в режиме добавления записи

как перевести монитор в режим 4:3 без кнопки
Всем привет, так уж сложилось, что на моем мониторе залипла кнопка &quot;4:3&quot; и отказывается работать, можно ли как то перевести монитор в такой...

Как перевести монитор в черно белый режим в Windows ?
вот думал заработает зашел в Свойства:Экран/Параметры/Дополнительно/управление цветом там есть цветовой профиль, может подскажете какой...

Как из командной строки перевести ОС в гибридный спящий режим и как назначить кнопку клавиатуры для этого?
Ребята, 1. Можно ли из командной строки перевести компьютер в ГИБРИДНЫЙ спящий режим? Если да то какая команда нужна для этого. 2....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru