Skip to content

Commit

Permalink
-
Browse files Browse the repository at this point in the history
  • Loading branch information
alemorf committed Oct 20, 2024
1 parent dbf6d4f commit 576b463
Show file tree
Hide file tree
Showing 10 changed files with 157 additions and 116 deletions.
11 changes: 9 additions & 2 deletions Ocean_240/firmware_source/floppyhome.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,15 @@
; Выход: a - код ошибки, cf - если была ошибка

FloppyHome:
; Отправка команды "Поиск нулевой дорожки" в КР1818ВГ93
; Отправка команды "Восстановление" в КР1818ВГ93
; - Головка не загружается
; - Номер дорожки не проверяется
; - Скорость перемещения 15мс (минимум)
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
mvi a, 0
#else
xra a
#endif
out PORT_VG93_DATA
mvi a, 3
out PORT_VG93_COMMAND
Expand All @@ -14,7 +21,7 @@ FloppyHome:
nop
nop

; Ожидание пока КР1818ВГ93 занят или не выбрана нулевая дорожка или не наступит таймаут
; Ожидание пока КР1818ВГ93 занят или не выбрана нулевая дорожка или не наступил таймаут
loc_FDA8: in PORT_VG93_COMMAND
ani 5
cpi 4
Expand Down
21 changes: 13 additions & 8 deletions Ocean_240/firmware_source/floppyread.inc
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Прочитать сектор с дискеты
; Вход: a - диск, c - Код команды для К1818ВГ93
; Вход: a - номер дисковода, c - код команды для К1818ВГ93
; Выход: a - код ошибки, cf - если была ошибка

FloppyRead:
push psw

; Выбор дисковода и головки
push psw
call FloppySetDriveHead
pop psw

; Если необходимо, то перезагрузить К1818ВГ93. Установить дорожку и сектор.
call FloppyReinitSetTrackSector
; Запуск двигателя. Выбор дорожки и сектора.
call FloppyStartMotorSetTrackSector
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
jc Return

#else
rc
#endif
; Отправка команды в К1818ВГ93, получение блока данных из К1818ВГ93
call FloppyReadInteral
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
jc Return

; Возврат кода ошибки 0
#else
rc
#endif
; Выход с кодом ошибки 0
xra a
ret
13 changes: 8 additions & 5 deletions Ocean_240/firmware_source/floppyreadinternal.inc
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,17 @@
; Выход: a - код ошибки, nz или cf - если была ошибка

FloppyReadInteral:
; Отправка команды в К1818ВГ93
; Передача кода команды в К1818ВГ93
mov a, c
out PORT_VG93_COMMAND

; Цикл получения данных от К1818ВГ93
jmp loc_FF3F
loc_FF3D: ; Сохранение данных в память
loc_FF3D: ; Сохранение байта в память
mov m, a
inx h

loc_FF3F: ; Остановка процессора до появления сигналов INTRQ или DRQ
; на выводах К1818ВГ93 или таймаута
loc_FF3F: ; Остановка процессора до появления сигналов INTRQ или DRQ от К1818ВГ93
in PORT_FLOPPY_WAIT
rrc

Expand All @@ -25,6 +24,10 @@ loc_FF3F: ; Остановка процессора до появления си
; Цикл длится, пока нет INTRQ от контроллера
jc loc_FF3D

; Возврат кода ошибки
; Получение кода ошибки от К1818ВГ93 и выход
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
call FloppyCheckError
ret
#else
jmp FloppyCheckError
#endif
84 changes: 0 additions & 84 deletions Ocean_240/firmware_source/floppyreinitsettracksector.inc

This file was deleted.

14 changes: 10 additions & 4 deletions Ocean_240/firmware_source/floppysetdrivehead.inc
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,13 @@ loc_FDE1:
pop psw
dcr a
jz loc_FDF6
lda v_disk_c_tracks
lda v_disk_1_tracks
jmp loc_FDF9
loc_FDF6: lda cfg_disk_b_tracks
loc_FDF6: lda cfg_disk_0_tracks
loc_FDF9:
push b

; Продолжаем, если номер дорожки больше или равен кол-ву
; дорожек на одной стороне дискеты
; Переход, если номер дорожки меньше кол-ва дорожек на одной стороне дискеты
mov b, a
mov a, d
cmp b
Expand Down Expand Up @@ -63,8 +62,12 @@ loc_FDF9:
out PORT_FLOPPY

; Небольшая задержка
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
call Delay16
ret
#else
jmp Delay16
#endif

loc_FE15:
pop b
Expand All @@ -81,13 +84,16 @@ loc_FE15:
out PORT_FLOPPY

; Небольшая задержка
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
call Delay16
ret
#endif

;----------------------------------------------------------------------------

Delay16:
mvi b, 16
; Прододжение в DelayB

;----------------------------------------------------------------------------

Expand Down
6 changes: 5 additions & 1 deletion Ocean_240/firmware_source/floppysettracksector.inc
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,15 @@ loc_FF06:

; Проверка результата выполнения команды
in PORT_VG93_COMMAND
ani 19h ; Ошибка поиска + Ошибка КС + Занят
ani 19h ; Ошибка поиска + Ошибка КС + Занят, флаг CY сбрасывается
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
cpi 0
jnz loc_FF1D
jmp loc_FF20
loc_FF1D:
#else
jz loc_FF20
#endif
; Код ошибки
stc
mvi a, 40h
Expand Down
71 changes: 71 additions & 0 deletions Ocean_240/firmware_source/floppystartmotor.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Запустить двигатель дисковода
; Вход: b - дисковод
; Выход: a - код ошибки, cf - если была ошибка

FloppyStartMotor:
; Если выбран другой дисковод, то нужна задержка на раскрутку
mov b, a
lda v_floppy_current
cmp b
jz loc_FE6B
call FloppyStartMotor2
ret
loc_FE6B:

; Если двигатель выключен, то запустить двигатель
in PORT_FLOPPY
rlc
jc FloppyStartMotor2

; Если дисковод не готов, то запустить двигатель
in PORT_VG93_COMMAND
ani 80h ; Not ready
rz

;----------------------------------------------------------------------------

FloppyStartMotor2:
push b

; Значение для задержки на раскрутку
lxi b, 0FFFFh

; Короткий негативный импульс на INIT запускает двигатель
call FloppyToggleInit

; Ожидаение готовности дисковода или остановки двигателя по таймауту
loc_FE7D: in PORT_VG93_COMMAND
ani 80h ; Not ready
jz loc_FE8F
in PORT_FLOPPY
rlc
jnc loc_FE7D

; Таймаут. Выход с кодом ошибки.
mvi a, 20h
jmp loc_FE95

; Задержка на раскрутку
loc_FE8F: dcx b
mov a, b
ora a
jnz loc_FE8F

loc_FE95:
pop b
ret

;----------------------------------------------------------------------------

FloppyToggleInit:
; Установка 0 на линии INIT
in PORT_FLOPPY
ani 4Eh
rar
out PORT_FLOPPY

; Установка 1 на линии INIT
ori PFE_NEG_INIT
out PORT_FLOPPY
ret
20 changes: 20 additions & 0 deletions Ocean_240/firmware_source/floppystartmotorsettracksector.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Запустить двигатель. Установить дорожку и сектор.
; Вход: a - дисковод
; Выход: a - код ошибки, cf - если была ошибка

FloppyStartMotorSetTrackSector:
; Запустить двигатель
call FloppyStartMotor
rc

; Установить дорожку и сектор
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
call FloppySetTrackSector
rc
ret
#else
jmp FloppySetTrackSector
#endif


18 changes: 12 additions & 6 deletions Ocean_240/firmware_source/floppywrite.inc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Записать сектор на дискету
; Вход: a - Диск, c - Код команды для К1818ВГ93
; Вход: a - номер дисковода, c - код команды для К1818ВГ93
; Выход: a - код ошибки, cf - если была ошибка

FloppyWrite:
Expand All @@ -9,14 +9,20 @@ FloppyWrite:
call FloppySetDriveHead
pop psw

; Если необходимо, то перезагрузить К1818ВГ93. Установить дорожку и сектор.
call FloppyReinitSetTrackSector
; Запуск двигателя. Выбор дорожки и сектора.
call FloppyStartMotorSetTrackSector
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
jc Return

#else
rc
#endif
; Отправка команды в К1818ВГ93, отправка блока данных в К1818ВГ93
call FloppyWriteInternal
#ifndef CONFIG_FLOPPY_SIZE_OPTIMIZATION
jc Return

; Возврат кода ошибки 0
#else
rc
#endif
; Выход с кодом ошибки 0
xra a
ret
Loading

0 comments on commit 576b463

Please sign in to comment.