Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2

DOSBox видео FAQ - быстрая настройка

24.01.2025, 05:55. Показов 1566. Ответов 0

Студворк — интернет-сервис помощи студентам
Настраиваем:
  • Сам эмулятор
  • Звук SoundBlaster 16
  • Джойстик (комбинируем из двух DOS-овских джойстиков один джойстик вида PlayStation 1)



Зеркало на RuTube


Файлы к видео: Files.zip
Доп файлы(Интерпретаторы\Компиляторы\Библиот еки\Basic-и\TurboPascal7.1): Компиляторы.zip

Код джойстика для QBasic\QB
QBasic/QuickBASIC
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
'
'  >Quiet Snow< 2025
'
'  Внешний вид джойстика  :  PlayStation 1 
'  Тип джойстика в DOSBox :  4Axis
'
'  Ремаппинг в DOSBox( ремаппинг делается через CTRL+F1 ):
'   Axis 1/2
'   1  : L1
'   2  : L2
'   Y- : вверх
'   Y+ : вниз
'   X- : налево
'   X+ : напарво
 
'   Axis 3/4
'   3  : R1
'   4  : R2
'   Y- : Треугольник   (китайск:Y)
'   Y+ : Крест         (китайск:A)
'   X- : Квадрат       (китайск:X)
'   X+ : Круг          (китайск:B)
'
DIM JUp AS INTEGER
DIM JDn AS INTEGER
DIM JLf AS INTEGER
DIM JRg AS INTEGER
 
DIM JTrian AS INTEGER
DIM JSquar AS INTEGER
DIM JRound AS INTEGER
DIM JCross AS INTEGER
 
DIM JL1 AS INTEGER
DIM JL2 AS INTEGER
DIM JR1 AS INTEGER
DIM JR2 AS INTEGER
 
 CLS
 
 WHILE INKEY$ = ""
 
   LOCATE 5, 1
 
   JL1 = STRIG(1)
   JL2 = STRIG(5)
   JR1 = STRIG(3)
   JR2 = STRIG(7)
 
   IF STICK(0) > 192 THEN
     JRg = -1
     JLf = 0
   ELSE
     JRg = 0
     IF STICK(0) < 64 THEN JLf = -1 ELSE JLf = 0
   END IF
 
   IF STICK(1) > 192 THEN
     JDn = -1
     JUp = 0
   ELSE
     JDn = 0
     IF STICK(1) < 64 THEN JUp = -1 ELSE JUp = 0
   END IF
 
   IF STICK(2) > 192 THEN
     JRound = -1
     JSquar = 0
   ELSE
     JRound = 0
     IF STICK(2) < 64 THEN JSquar = -1 ELSE JSquar = 0
   END IF
 
   IF STICK(3) > 192 THEN
     JCross = -1
     JTrian = 0
   ELSE
     JCross = 0
     IF STICK(3) < 64 THEN JTrian = -1 ELSE JTrian = 0
   END IF
 
   PRINT "  L1:"; JL1
   PRINT "  L2:"; JL2
   PRINT "  R1:"; JR1
   PRINT "  R2:"; JR2
 
   PRINT "  LEFT:"; JLf
   PRINT "  RIGHT:"; JRg
   PRINT "  UP:"; JUp
   PRINT "  DN:"; JDn
 
   PRINT "  Triangle :"; JTrian
   PRINT "  Cross    :"; JCross
   PRINT "  Square   :"; JSquar
   PRINT "  Round    :"; JRound
 
 WEND


Код джойстика для Turbo Pascal 7.1

Код: Joy.Pas
Pascal
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
{
   Адоптация кода из SWAG
   Автор модуля : http://www.trsek.com  03.08.1997
   Адаптация    : >Quiet Snow< 2024г.
   Внешний вид джойстика  :  PlayStation 1 
   Тип джойстика в DOSBox :  4Axis
 
   Ремаппинг в DOSBox( ремаппинг делается через CTRL+F1 ):
     Axis 1/2
     1  : L1
     2  : L2
     Y- : вверх
     Y+ : вниз
     X- : налево
     X+ : напарво
 
     Axis 3/4
     3  : R1
     4  : R2
     Y- : Треугольник   (китайск:Y)
     Y+ : Крест         (китайск:A)
     X- : Квадрат       (китайск:X)
     X+ : Круг          (китайск:B)
}
USES DOS, CRT, JOYSTICK;
Var
 
 JoyLf,  JoyRg  : Boolean;
 JoyUp,  JoyDn  : Boolean;
 JoyLf2, JoyRg2 : Boolean;
 JoyUp2, JoyDn2 : Boolean;
 JoyL1, JoyL2, JoyR1, JoyR2: Boolean;
 
 Procedure GetJoyALL;
 Var
  XA, YA : WORD;
  XB, YB : WORD;
 Begin
   ReadJoyA(XA, YA);
   ReadJoyB(XB, YB);
 
  IF XA < 64 THEN BEGIN; JoyLf := True; END ELSE BEGIN JoyLf := False; END;
  IF XA > 191 THEN BEGIN; JoyRg := True; END ELSE BEGIN JoyRg := False; END;
  IF YA < 64 THEN BEGIN; JoyUp := True; END ELSE BEGIN JoyUp := False; END;
  IF YA > 191 THEN BEGIN; JoyDn := True; END ELSE BEGIN JoyDn := False; END;
 
  IF XB < 64 THEN BEGIN; JoyLf2 := True; END ELSE BEGIN JoyLf2 := False; END;
  IF XB > 191 THEN BEGIN; JoyRg2 := True; END ELSE BEGIN JoyRg2 := False; END;
  IF YB < 64 THEN BEGIN; JoyUp2 := True; END ELSE BEGIN JoyUp2 := False; END;
  IF YB > 191 THEN BEGIN; JoyDn2 := True; END ELSE BEGIN JoyDn2 := False; END;
  JoyL1 :=  ButtonA1;
  JoyL2 :=  ButtonA2;
  JoyR1 :=  ButtonB1;
  JoyR2 :=  ButtonB2;
 End;
 
BEGIN
 
 CLRSCR;
 
 REPEAT
 
   GetJoyALL;
 
   GOTOXY(5, 2);  WRITE ('     L1  :', JoyL1:5);
   GOTOXY(5, 3);  WRITE ('     L2  :', JoyL2:5);
   GOTOXY(5, 4);  WRITE ('     R1  :', JoyR1:5);
   GOTOXY(5, 5);  WRITE ('     R2  :', JoyR2:5);
 
   GOTOXY(5, 7);  WRITE ('      L  :', JoyLf:5);
   GOTOXY(5, 8);  WRITE ('      R  :', JoyRg:5);
   GOTOXY(5, 9);  WRITE ('      U  :', JoyUp:5);
   GOTOXY(5, 10); WRITE ('      D  :', JoyDn:5);
 
   GOTOXY(5, 12); WRITE ('Triangle :', JoyUp2:5);
   GOTOXY(5, 13); WRITE ('   Cross :', JoyDn2:5);
   GOTOXY(5, 14); WRITE ('  Square :', JoyLf2:5);
   GOTOXY(5, 15); WRITE ('    Ring :', JoyRg2:5);
 
 UNTIL KeyPressed;
END.
Юнит: Joystick.Pas
Pascal
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
{ JOYSTICK.PAS                                                      }
{ Unit v ktorom je vsetko co potrebujete pre pracu s joystickom.    }
{                                                                   }
{ Datum:03.08.1997                             http://www.trsek.com }
 
unit joystick;
 
interface
 
procedure ReadJoyA( var XAxis,YAxis : word );   { kde sa nachadza A }
procedure ReadJoyB( var XAxis,YAxis : word );   { kde sa nachadza B }
function ButtonA1 : boolean;                    { stlacene tlacitko 1 }
function ButtonA2 : boolean;                    { stlacene tlacitko 2 }
function ButtonB1 : boolean;                    { stlacene tlacitko 3 }
function ButtonB2 : boolean;            { stlacene tlacitko 4 }
function JoystickPressent : boolean;        { Existuje joystick }
 
implementation
 
uses Dos;
 
type ReadJoyProc = procedure ( a,b : byte; var c,d:word );
     ButtonFunc = function ( a:byte ):boolean;
 
var ReadJoy : ReadJoyProc;
    Button : ButtonFunc;
    Reg : Registers;
 
function NewBIOS : boolean;
var DecadeChar : char absolute $f000:$fffb;
    YearChar : char absolute $f000:$fffc;
begin
 { an optimistic view of software life }
 NewBIOS:=(DecadeChar in ['9','0']) or ((DecadeChar='8') and (YearChar in ['4'..'9']));
end;
 
{$F+}
 
procedure OldReadJoy( xbit,ybit:byte; var XAxis,YAxis:word );
begin
 inline(
  $ba/$01/$02/      { mov dx,201h       ;load dx with joystick port adress }
  $c4/$be/>XAxis/   { les di,XAxis[bp]  ;load es with segment and di w/offset }
  $8a/$66/<xbit/    { mov ah,xbit[bp]   ;set appropriate bit in ah }
  $e8/$0c/$00/      { call SUBR }
  $c4/$be/>YAxis/       { les di,YAxis[bp] }
  $8a/$66/<ybit/    { mov ah,ybit[bp]   ;set appropriate bit in ah }
  $e8/$02/$00/      { call SUBR }
  $eb/$1d/      { jump short END    ;we're don }
            { SUBR:         ;first wait, if necessary, until }
                        {           ;relevant bit is 0: }
  $b9/$ff/$ff/      { mov cx,0ffffh     ;fill cx to the brim }
  $ec/          { WAIT: in al,dx    ;get input from port 201h }
  $84/$e0/      { test al,ah        ;is the relevant bit 0 yet? }
  $e0/$fb/      { loopne WAIT       ;if not, go back to wait }
  $b9/$ff/$ff/      { mov cx,0ffffh     ;fill cx to the brim again }
  $fa/          { cli           ;disable interrupts }
  $ee/          { out dx,al     ;nudge port 201h }
  $ec/          { AGAIN: in al,dx   ;get input from port 201h }
  $84/$e0/      { test al,ah        ;is the relevant bit 0 yet? }
  $e0/$fb/      { loopne again      ;if not, go back to AGAIN }
  $fb/          { sti           ;reenable interrupts }
  $f7/$d9/      { neg cx        ;negative cx }
  $81/$c1/$ff/$ff/  { add cx,0ffffh     ;add offffh back value in cx }
  $26/          { es:           ;segment override }
  $89/$0d/      { mov [di],cx       ;store value of cx in location }
            {           ;of relevant variable }
  $c3);         { ret }
end;    { OldReadJoy }
 
procedure NewReadJoy ( which, meaningless:byte; var XAxis,YAxis:word );
begin
 Reg.ah:=$84;
 Reg.dx:=1;
 intr($15,Reg);
 if (which=1) then begin
   XAxis:=Reg.ax;
   YAxis:=Reg.bx;
  end
  else begin
   XAxis:=Reg.cx;
   YAxis:=Reg.dx;
  end;
end;
 
function OldButton (mask:byte) : boolean;
begin
 OldButton:=((port[$201] and mask)=0);
end;
 
function NewButton(mask:byte) : boolean;
begin
 Reg.ah:=$84;
 Reg.dx:=0;
 intr($15,reg);
 NewButton:=((Reg.al and mask)=0);
end;
 
{$F-}
 
procedure ReadJoyA( var XAxis,YAxis:word );
begin
 ReadJoy(1,2,XAxis,YAxis);
end;
 
procedure ReadJoyB( var XAxis,YAxis:word );
begin
 ReadJoy(4,8,XAxis,YAxis);
end;
 
function ButtonA1 : boolean;
begin
 ButtonA1:=button($10);
end;
 
function ButtonA2 : boolean;
begin
 ButtonA2:=button($20);
end;
 
function ButtonB1 : boolean;
begin
 ButtonB1:=button($40);
end;
 
function ButtonB2 : boolean;
begin
 ButtonB2:=button($80);
end;
 
function JoystickPressent : boolean;
begin
 intr($11,Reg);
 JoystickPressent:=((Reg.ax and $1000) <> 0);
end;
 
begin
 if NewBIOS then begin      { pouzi novu rutinu pre BIOS }
    ReadJoy:=NewReadJoy;
    Button:=NewButton;
   end
   else begin           { inac stara rutina }
    ReadJoy:=OldReadJoy;
    Button:=OldButton;
   end;
end.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2025, 05:55
Ответы с готовыми решениями:

Настройка DosBox
Пересмотрела множество страниц по настройке DosBox, но у меня все равно не получается. Я запуталась к тому же. Кто может мне помочь,...

Настройка IIS нужны FAQ или документации
немогу настроить IIS. как сделать чтобы у клиентов не спрашивал пароль. Клиенты выходят на мой сервер по моему IP, а как сделать чтобы...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара)
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...

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

Чем определяется одинаковость урлов /page?FAQ и /page.php?FAQ
Подскажите, пожалуйста, какая опция php или настройка сервера позволяет не указывать .php в урлах? Просто раньше у меня на сайте работал...

Зависает роутер тр Link при выборе "Быстрая настройка"
Все работало хорошо, пользуюсь планшетом и вдруг запрос пароля, ввожу пароль роутера и пишет что неверный пароль, к этому моменту на ПК...

Настройка видео кодеков в QT
Добрый день. Для проигрывания видео (чтения с камеры) использую QMediaPlayer. В теме https://www.cyberforum.ru/qt/thread2982937.html я...

Настройка внутрисетевой видео трансляции
Здравствуйте коллеги! У нас на предприятии появилась потребность выводить видео с устройств видео захвата на множество компьютеров....

Настройка на отдельность работы , видео и игры
Подключил ПК к ТВ , теперь в одной стороне идёт видео в другой рабочий стол , но вот когда запускаю видеоигру , видео останавливаеться и...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru