Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14

Как перевести древний код на asm86, в fasm

11.10.2022, 18:11. Показов 7475. Ответов 42
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
;This is a disk boot routine for the 1771/1791 type disk
;controllers.  It would normally reside on track 0,
;sector 1, to be loaded by the "B" command of the
;monitor at address 200H.  By changing the equates
;below, it may be configured to load any size of
;program at any address.  The program is assumed to
;occupy consecutive sectors starting at track 0, sector
;2, and will begin exection at its load address (which
;must be a 16-byte boundary) with the Instruction
;Pointer set to zero.
 
; Variations are available for the Cromemco 4FDC with
; large disks, the 4FDC with small disks, the Tarbell
; single-density controller, and the Tarbell double-
; density controller. Select one.
 
CROMEMCOSMALL:  EQU 0
CROMEMCOLARGE:  EQU 0
TARBELLSINGLE:  EQU 0
TARBELLDOUBLE:  EQU 1
 
LOAD:   EQU 400H    ;Address to load program
SEG:    EQU 40H ;LOAD/10H
SECTOR: EQU 8   ;No. of 128-byte sectors to load
BOOTER: EQU 200H    ;"B" command puts booter here
 
;**************************************************************
 
CROMEMCO:   EQU CROMEMCOLARGE+CROMEMCOSMALL
TARBELL:    EQU TARBELLSINGLE+TARBELLDOUBLE
 
WD1771: EQU CROMEMCO+TARBELLSINGLE
WD1791: EQU TARBELLDOUBLE
 
SMALL:  EQU CROMEMCOSMALL
LARGE:  EQU CROMEMCOLARGE+TARBELL
 
    IF  SMALL
MAXSECT:EQU 18
    ENDIF
 
    IF  LARGE
MAXSECT:EQU 26
    ENDIF
 
    IF  TARBELL
DONEBIT:EQU 80H
DISK:   EQU 78H
    ENDIF
 
    IF  CROMEMCO
DONEBIT:EQU 1
DISK:   EQU 30H
    ENDIF
 
    IF  WD1771
READCOM:EQU 88H
    ENDIF
 
    IF  WD1791
READCOM:EQU 80H
    ENDIF
 
    IF  CROMEMCOLARGE
WAITBYTE:EQU    0B1H
    ENDIF
 
    IF  CROMEMCOSMALL
WAITBYTE:EQU    0A1H
    ENDIF
 
    ORG BOOTER
    PUT 100H
 
    XOR AX,AX
    MOV DS,AX
    MOV ES,AX
    MOV SS,AX
    MOV SP,BOOTER   ;For debugging purposes
    UP
    MOV DI,LOAD
    MOV DX,SECTOR
    MOV BL,2
SECT:
    MOV AL,0D0H     ;Force Interrupt command
    OUT DISK        ;To force Type I status
    AAM
    CMP BL,MAXSECT+1
    JNZ NOSTEP
    MOV AL,58H      ;Step in with update
    CALL    DCOM
    MOV BL,1
NOSTEP:
    MOV AL,BL
    OUTB    DISK+2
 
    IF  CROMEMCO
    MOV AL,WAITBYTE
    OUT DISK+4      ;Turn on hardware wait
    ENDIF
 
    INB DISK        ;Get head load status
    NOT AL
    AND AL,20H
    JZ  OUTCOM
    MOV AL,4
OUTCOM:
    OR  AL,READCOM
    OUTB    DISK
    MOV CX,128
    PUSH    DI
READ:
    INB DISK+4
    TEST    AL,DONEBIT
 
    IF  TARBELL
    JZ  DONE
    ENDIF
 
    IF  CROMEMCO
    JNZ DONE
    ENDIF
 
    INB DISK+3
    STOB
    LOOP    READ
DONE:
    POP DI
    CALL    GETSTAT
    AND AL,9CH
    JNZ SECT
    ADD DI,128
    INC BL
    DEC DX
    JNZ SECT
    JMP 0,SEG
 
DCOM:
    OUT DISK
    AAM
GETSTAT:
    INB DISK+4
    TEST    AL,DONEBIT
 
    IF  TARBELL
    JNZ GETSTAT
    ENDIF
 
    IF  CROMEMCO
    JZ  GETSTAT
    ENDIF
 
    IN  DISK
    RET

1
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2022, 18:11
Ответы с готовыми решениями:

Перевести код из FASM в TASM
Нужно переобразовать код из fasm в tasm org *100h jmp *start * fName * db *'*.*',0 * * * * * * *; маска для поиска файлов ...

Перевести код из Fasm на Tasm
Есть код на Fasm'e, я его почти перенес на Tasm, но выдает еще несколько ошибок Код на Fasm'e: ;== FASM code ======================= ...

Чтение из памяти по адресу или как перевести C++ программу на FASM
Уже два дня бьюсь с 4 строками кода. У меня есть мой старый исходник на C++, вот часть кода: DWORD a_p1 = (DWORD)(0x00400000 +...

42
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14
12.10.2022, 12:01  [ТС]
Студворк — интернет-сервис помощи студентам
politoto, образ floppy диска системы 86-DOS, для ibm pc совместимых машин.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
12.10.2022, 12:31
У IBM PC DOS, SCP и MS-DOS разная нумерация версий.

Цитата Сообщение от MaGz GoLd Посмотреть сообщение
запустить ядро 86dos.sys.
Машинозависимую часть? (аналог BIOS CP/M)

https://github.com/microsoft/M... rce/IO.ASM

Или машинонезависимую часть, которую в CP/M Gary Kildall написал вообще на PL/M, чтобы портировать на несовместимые по архитектуре процессоры? (аналог BDOS CP/M)

https://github.com/microsoft/M... /MSDOS.ASM

Добавлено через 10 минут
https://youtu.be/YgDE-d4pfTc?t=1334
Code
1
2
MS-DOS version 1.25
Copyright 1981,82 Microsoft
Добавлено через 13 минут
Цитата Сообщение от MaGz GoLd Посмотреть сообщение
образ floppy диска системы 86-DOS, для ibm pc
Т.е. без всяких UEIFI и 386?

Есть образы, возможно, чуть более ранних версий.
https://www.pcjs.org/software/... /ibm/0.90/
0
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14
12.10.2022, 19:16  [ТС]
Кароче сделал свой образ загрузочной дискеты 86-DOS(1.4мб), для ibm pc совместимого ПК, но у меня проблема с запуском программ. Думаю проблемма в COMMAND.COM, я его немного модифицировал .
86-DOS FOR FDD 3.5.ver.1.14.English.zip
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
13.10.2022, 13:56
MaGz GoLd, 86dos.sys в этом образе откуда взяли?
Явно более поздний код в виде .EXE.
0
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14
14.10.2022, 12:21  [ТС]
politoto,Это ядро MS-DOS 8, вырезал из него все лишнее, и переименовал.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
14.10.2022, 15:43
EDLIN.COM, ASM.COM, HEX2BIN.COM и DEBUG.COM можно было протестировать и в FreeDOS, и в DOSBOX.

Загрузчик транзитных команд (.COM и .EXE) в ранних версиях (MS-PC-86)DOS был встроен в COMMAND.COM.
fork()-exec()-wait() ещё не было.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
16.10.2022, 09:23
Цитата Сообщение от MaGz GoLd Посмотреть сообщение
Старые наработки:
86.zip
А это разве не тот код, что загружает и запускает 86dos.sys ?
Assembler
176
177
178
179
180
181
182
183
184
185
186
187
188
189
; Load 86-DOS
 
    PUSH    DS
    MOV AX,DOSSEG   ; Set segment register for loading DOS.
    MOV DS,AX
    XOR BX,BX       ; Offset in DOSSEG is zero.
    MOV AL,BL       ; Drive 0.
    MOV CX,DOSLEN
    MOV DX,DOSSECT
    CALL    READ,40H
    POP DS
 
    MOV SI,INITTAB
    CALL    0,DOSSEG
а затем CP/Mовскими функциями DOS читает COMMAND.COM
Assembler
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
    MOV DX,100H
    MOV AH,26       ;Set DMA address
    INT 21H
    MOV CX,[6]      ;Get size of segment
    MOV BX,DS       ;Save segment for later
;DS must be set to CS so we can point to the FCB
    MOV AX,CS
    MOV DS,AX
    MOV DX,FCB      ;File Control Block for COMMAND.COM
    MOV AH,15
    INT 21H     ;Open COMMAND.COM
    OR  AL,AL
    JNZ COMERR      ;Error if file not found
    XOR AX,AX
    MOV [FCB+33],AX ;Set 4-byte Random Record field to
    MOV [FCB+35],AX ;   beginning of file
    INC AX
    MOV [FCB+14],AX ;Set record length field
    MOV AH,39       ;Block read (CX already set)
    INT 21H
    JCXZ    COMERR      ;Error if no records read
    TEST    AL,1
    JZ  COMERR      ;Error if not end-of-file
и передаёт ей управление?
Assembler
213
214
215
216
217
218
219
220
221
222
223
224
225
226
;Make all segment registers the same
    MOV DS,BX
    MOV ES,BX
    MOV SS,BX
    MOV SP,5CH      ;Set stack to standard value
    XOR AX,AX
    PUSH    AX      ;Put zero on top of stack for return
    MOV DX,80H
    MOV AH,26
    INT 21H     ;Set default transfer address (DS:0080)
    PUSH    BX      ;Put segment on stack
    MOV AX,100H
    PUSH    AX      ;Put address to execute within segment on stack
    RET L       ;Jump to COMMAND
См. DOSIO.ASM

Чтобы загрузить DOS, осталось лишь переписать READ так, чтобы он работал на той платформе, на которой Вы хотите запускать свой форк 86-DOS.
Чтобы дальше всё работало, конфигурацию дисков поменять на CUSTOM:
Assembler
39
40
41
42
43
; Select disk configuration:
LARGE:  EQU 0       ; Four large drives.
COMBIN: EQU 0       ; Two 8-inch and one 5.25-inch.
SMALL:  EQU 0       ; Three 5.25-inch drives.
CUSTOM: EQU 1       ; User defined.
описать структуру системной дискеты по образцу
Assembler
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
SSDRIVE:
    DW  128     ; Sector size in bytes.
    DB  2       ; Sector per allocation unit.
    DW  54      ; Reserved sectors.
    DB  2       ; Number of allocation tables.
    DW  64      ; Number of directory entrys.
    DW  720     ; Number of sectors on the disk.
 
    IF  SMALLDS-1
SDDRIVE:            ; This is the IBM Personal Computer
    DW  512     ; disk format.
    DB  1
    DW  1
    DB  2
    DW  64
    DW  320
Если хочется использовать функции IBM PC BIOS, то наш вариант I/O System for 86-DOS(BIOS 86-DOS) нужно перенастроить с сегмента, начинающегося 0x400 сразу после таблицы векторов прерываний куда-нибудь повыше, на 0x50, 0x60 или 0x70.
Assembler
185
    CALL    READ,60H
Assembler
1654
DOSSEG: EQU ($+15)/16+60H   ; Compute segment to use for 86-DOS.
Но тогда придётся пропатчить и соответствующие ссылки в 86-DOS.

Если самому программировать то, что на платформе эмулирует контроллеры FDC, DMA и т.п микросхемы, которые были в оригинальном IBM PC, не пользоваться IBM PC BIOS и обрабатывать прерывания внутри I/O System, то можно не перемещать наш 86-DOS BIOS на другие адреса.
0
101 / 95 / 10
Регистрация: 31.08.2022
Сообщений: 1,014
19.10.2022, 06:41
Цитата Сообщение от politoto Посмотреть сообщение
INT 21H
это уже чисто досовская фишка
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
19.10.2022, 11:14
Это элемент ABI, выбранного Тимом для вызова из программ пользователя высокоуровневых функций совместимого с CP/M API:

26 : SET SUBSEQUENT DMA ADDRESS
15 : OPENN FILE

https://www.nesssoftware.com/n... pdf#page=2

и для новых функций, не имевших прямых аналогов в CP/M
0
28.10.2022, 09:56

Не по теме:

Цитата Сообщение от MaGz GoLd Посмотреть сообщение
86-DOS, она же Q-DOS, операционная система, написаная Тимом Патерсоном
Плюс этой DOS в том, что ей не нужен IBM PC BIOS, что позволяет её запустить из UEFI без CSM. 8-)
Было бы желание и умение.

0
28.10.2022, 10:21  [ТС]

Не по теме:

politoto, к сожалению с умением у меня проблеммы

0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.11.2022, 09:17
Booting from Hard Disk...
Boot failed: could not read the boot disk

Booting from Floppy...

86-DOS version 1.00
Copyright 1980,81 Seattle Computer Products, Inc.
Enter today's date (m-d-y):
0
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14
08.11.2022, 16:42  [ТС]
politoto, это вы как её запускали?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
14.11.2022, 15:52
MaGz GoLd,

qemu-system-i386 -S -s -fda 86dos.144 -curses

Перед этим подправил вызовы BIOS в секторах 86-DOS так, как было предложено выше:
https://www.cyberforum.ru/post16503891.html

Набросал односекторную "86-IO", в которой кроме минимальной инициализации - только три первые функции, достаточные для работы CON:.

На начальном этапе код BDOS и BIOS размещал там, где они должны быть, средствами qemu.
Потом сделал образ диска с помощью mformat. В IPL record, которую сделал mformat, поменял номер диска, количество секторов и адрес, куда эти секторы нужно читать.
0
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
03.05.2023, 22:20
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
- записывала загрузочный сектор и файлы dos.sys и bios.sys в какие-то конкретные сектора,
Может MSDOS.SYS и IO.SYS
И не в конкретные сектора, а IO.SYS должен быть первым файлом на диске (дискете) и не иметь фрагментации.
Это достаточное условие. Может быть не минимально достаточное, но такие тонкости что-то не интересовали.

Добавлено через 18 минут
Цитата Сообщение от SergP01 Посмотреть сообщение
я уже написал выше... найдите древний комп, который дисководы поддерживает, и развлекайтесь...
Да с флешечки можно грузиться, если разметить ее как дискету. Я утилитки для уложения MS-DOS 6.22 на флешечку в форматах дискет 1.44 2.88 15.9 мегабайт делал и они работают. Надо попробовать форматы дискет 180 и 360 килобайт, вдруг MS-DOS 1.xx заработает.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
04.05.2023, 10:08
Цитата Сообщение от Ethereal Посмотреть сообщение
И не в конкретные сектора, а IO.SYS должен быть первым файлом на диске (дискете) и не иметь фрагментации.
Это достаточное условие. Может быть не минимально достаточное
В ранних версиях был вариант размещения в зарезервированных секторах. Вне файлов. Но тогда загрузочный стартовый код должен откуда-то знать, где заканчивается BIOS, и где начинается BDOS
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8662 / 4498 / 1670
Регистрация: 01.02.2015
Сообщений: 13,913
Записей в блоге: 12
05.05.2023, 19:14
Цитата Сообщение от Ethereal Посмотреть сообщение
И не в конкретные сектора, а IO.SYS должен быть первым файлом на диске (дискете) и не иметь фрагментации.
Это достаточное условие. Может быть не минимально достаточное, но такие тонкости что-то не интересовали.
Проверить уже не смогу, но в памяти осталось, что копирование не делало дискету системной - требовалось или сразу форматировать с неким ключом или сразу после форматирования выполнить команду sys, которая "правильно" перенесёт два файла.

Но, несомненно, могу и ошибаться - множество лет не пользовался дискетами.
0
6 / 6 / 1
Регистрация: 26.06.2022
Сообщений: 147
Записей в блоге: 14
06.05.2023, 14:45  [ТС]
ФедосеевПавел,
Создать загрузочный диск:
format c: /s
1
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
09.05.2023, 08:53
Да тут об этом уже писали
Цитата Сообщение от SergP01 Посмотреть сообщение
format /s
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
03.07.2023, 12:40
Лучший ответ Сообщение было отмечено MaGz GoLd как решение

Решение

Цитата Сообщение от MaGz GoLd Посмотреть сообщение
образ загрузочной дискеты 86-DOS(1.4мб), для ibm pc совместимого ПК, но у меня проблема с запуском программ.
Из черновика, запущенного в VirtualBox и DosBox, многие полезные программы запускаются.
Миниатюры
Как перевести древний код на asm86, в fasm   Как перевести древний код на asm86, в fasm  
Вложения
Тип файла: 7z 86-DOSbox.img.7z (34.0 Кб, 9 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2023, 12:40
Помогаю со студенческими работами здесь

Как адаптировать приведенный код под FASM
Будьте добры, если не затруднит помочь...или указать куда копать. Вот буквально день назад, в книге наткнулся на пример перехода в...

Не могу понять как исправить (код на FASM-е), простенькая программа
Написал программу для примера сдвигов, сдвигает нормально, вот только выводит каскадом (с начала выводит все переменные sent а потом только...

Как воспроизводить dll-файлы и код их чтения на отладчике xdbg? (FASM)
Как воспроизводить dll-файлы и их чтение на отладчике xdbg? (FASM)

Tasm в Fasm (перевести)
name prog .model small .stack 100h .data stroka db "hevtsov.dima.genad'evich", '$' .code start: mov ax,@data ...

Алгоритм RC4 (перевести FASM -> TASM)
Дали задание реализовать алгоритм rc4 на ассемблере. Не очень хорошо понимаю его. На просторах интернета нашла реализованную функцию...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru