Skip to content

Commit

Permalink
-
Browse files Browse the repository at this point in the history
  • Loading branch information
alemorf committed Oct 24, 2024
1 parent 3e7a193 commit 0421c62
Show file tree
Hide file tree
Showing 16 changed files with 1,930 additions and 10 deletions.
55 changes: 55 additions & 0 deletions Ocean_240/firmware_source/biosboot.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Функция CP/M BIOS: Холодная перезагрузка

BiosBoot2:
; Если по смещению 6 находится адрес входа в CCP, то не очишаем RAM-диск
lhld 6
lxi d, -0BA06h
dad d
mov a, h
ora l
jz BiosWBoot3

; Если по смещению 40h находится константа MAGIC_40, то не очишаем RAM-диск
lhld 40h
lxi d, -MAGIC_40
dad d
mov a, h
ora l
jz BiosWBoot3

; Очистка RAM-диска

.include "ramdiskinit.inc"

; Выбора диска A:
xra a
sta v_current_disk

; Инициализация области памяти 40h
call InitBiosWorkArea

BiosWBoot3:
; Стек по умолчанию
lxi sp, 100h

; Инициализация видео и вывод приветствия
lxi h, a_hello
call PrintString2

; Переход в командный процессор
jmp BiosWBoot2

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

InitBiosWorkArea:
; Инициализация области памяти 40h
lxi h, 40h
lxi d, rom_40
mvi c, 13
call MemcpyHlDeC

; Переменная содержащая кол-во дорожек на дисководе C:
lda cfg_disk_c_tracks
sta v_disk_1_tracks
ret
121 changes: 121 additions & 0 deletions Ocean_240/firmware_source/bioswboot.inс
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
; ПЗУ Океан 240.2 REV 8 / Реверсинжиниринг [email protected] / Лицензия GPL
; Функция CP/M BIOS: Теплая перезагрузка

BiosWBoot2:
; Если по смещению 40h не находится константа AAAAh, то инициализация области памяти 40h
lhld 40h
lxi d, -0AAAAh
dad d
mov a, h
ora l
cnz InitBiosWorkArea

; Стек по умолчанию
lxi sp, 100h

; Копирование командного процессора из ПЗУ в ОЗУ
lxi h, CPM_CCP
lxi d, ccp_rom
lxi b, CPM_CCP_SIZE
loc_D6C0: ldax d
mov m, a
inx d
inx h
dcx b
mov a, b
ora c
jnz loc_D6C0

; Очистка ОЗУ
lxi h, ccp_ram_BA09
lxi b, 213
loc_D6D0: mvi m, 0
inx h
dcx b
mov a, b
ora c
jnz loc_D6D0

; ?
mvi a, 0E5h
sta byte_BA46

; ?
mvi a, 80h
sta word_BA4B

; Копирование DPH и еще чего то в ОЗУ
lxi h, v_dph
lxi d, dph
lxi b, DPH_SIZE * DISK_COUNT + REAL_SECTOR_PER_TRACK
loc_D6EC: ldax d
mov m, a
inx h
inx d
dcx b
mov a, b
ora c
jnz loc_D6EC

; Стандартная подготовка к запуску CP/M
lxi b, v_cpm_sector_buffer
call BiosSetDma
mvi a, 0C3h
sta 0
lxi h, BiosWBoot
shld 1
sta byte_5
lxi h, CPM_CCP + 806h
shld 6

; Инициализация DPB A: в зависимости от cfg_disk_a_size
lxi h, v_dpb_a
mvi c, DPB_SIZE
lxi d, dpb_192
lda cfg_disk_a_size + 1 ; Очень странно
ora a
jz loc_D722
lxi d, dpb_ff
loc_D722:
call MemcpyHlDeC

; Инициализация DPB B: в зависимости от cfg_disk_b_size
lxi h, v_dpb_b
mvi c, DPB_SIZE
lxi d, dpb_360
lda cfg_disk_b_size + 1 ; Очень странно
cpi 1
jz loc_D738
lxi d, dpb_720
loc_D738:
call MemcpyHlDeC

; Инициализация DPB C: в зависимости от cfg_disk_c_size
lxi h, v_dpb_c
mvi c, DPB_SIZE
lda cfg_disk_c_size + 1 ; Очень странно
cpi 2
jz loc_D758
lxi d, dpb_360
lda v_c_360_720 ; Позволяет без перепрошивки ПЗУ менять тип дисковода C:
ora a
jnz loc_D765
lxi d, dpb_720
jmp loc_D765
loc_D758: lxi d, dpb_720
lda v_c_360_720 ; Позволяет без перепрошивки ПЗУ менять тип дисковода C:
ora a
jnz loc_D765
lxi d, dpb_360
loc_D765:
call MemcpyHlDeC

; Сброс слайсера (забыть данные)
xra a
sta v_slicer_has_data
sta v_slicer_uninited_count

; Запуск CCP
lda v_current_disk
mov c, a
jmp CPM_CCP
2 changes: 1 addition & 1 deletion Ocean_240/firmware_source/calctextaddress40.inc
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,6 @@ loc_E45A:
mov h, a

mvi a, 7
sta v_tmp_char_height
sta v_a

ret
2 changes: 1 addition & 1 deletion Ocean_240/firmware_source/ccpcommands.inc
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ loc_DB2E: ; Если команда не найдена, то выход с A =
rnc

; Сравнение командной строки с очередной строкой
lxi d, CCP_COMMAND_LINE_BUFFER
lxi d, v_ccp_command_line_buffer
mvi b, CCP_COMMAND_SIZE
loc_DB37: ldax d
cmp m
Expand Down
Loading

0 comments on commit 0421c62

Please sign in to comment.