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

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

24.01.2025, 05:55. Показов 1474. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru