Category: Разработка

27
Май
2023

Переход готов!

Сделал процедуру перехода между уровнями. Немного ее надо еще допилить – музыка в мультике не синхронизирована и еще надо нечисть стереть при уходе в дверь. Пришлось поправить спрайты анимации ухода в дверь, чтобы они подходили и для черепа-телепорта и для двери в следующий уровень. Помимо этого сделал мигание собранных “голов”, вывод кода быстрого доступа к уровню, обмен данными между памятью и диском (загрузка заставки и обратная загрузка данных). Движемся вперед 🙂

21
Май
2023

Первая заставка

Прицепил модуль заставок (мультиков) к основной игре. Пока что он играет первую заставку. Заодно перерисовал буквы GOONIES, чтобы было больше похоже на оригинал, а также поигрался с переключением палитр на лету, чтобы текст копирайтов был белым.

01
Май
2023

Двери

Начал работу над дверями. Входные двери должны появляться при входе в лабиринт, потом исчезать. Оказалось, открытые двери не были нарисованы, пришлось рисовать. Теперь двери успешно появляются, но пока не исчезают. Адрес вывода Балбеса при входе тоже будет, как и должен, привязываться ко входным дверям. Поправил несколько глюков, населил первую сцену второго лабиринта (не)живностью.

30
Апр
2023

Доделан загрузчик

Сегодня доделал загрузчик – теперь игра сама читает с диска любой лабиринт без участия OS. Для пробы прогулялся по второму уровню (пока еще почти без нежити). Теперь надо сделать сам процесс перехода, со всеми этими дверями открытыми/закрытыми/исчезающими.

28
Апр
2023

Поиск файла в ANDOS, MKDOS, CSIDOS

Доделал “загрузчик-поисковик” для ANDOS, MKDOS, CSIDOS – трех живых дисковых систем БК. Часть файлов я гружу через ЕМТ 36, как и в Принце, т.к. при любом раскладе это работает, пока из памяти не выброшена сама система. Это заодно решает проблему возможной фрагментации файлов в ANDOS, т.к. при загрузке через ЕМТ 36 ANDOS сама ищет все блоки файла. Так что Принцу на фрагментацию плевать, хотя некоторые почему-то думают, что это не так.

Перед тем, как систему выбросить, нужно на диске найти первые блоки тех файлов, с которыми потребуется работать уже без средств операционки. В каждой системе есть свой способ поиска файлов на диске. Для ANDOS и MKDOS это просто вызовы процедур поиска с определенными параметрами, а вот в CSIDOS это ЕМТ 115, а это значит, что вектор обработчика ЕМТ уже другой, не “десяточный”. К тому же, CSIDOS сидит в 7 странице ОЗУ, а остальные в 4-й. Да и имя файла каждой подавай в своем формате для поиска. Пришлось немного поизголяться. Загрузка первых файлов через ЕМТ 36 заодно заставляет системы уже держать каталог нужного диска в памяти, что упрощает (наверное) дело.

P.S. да, я в курсе, что есть “универсальный загрузчик для всех ОС”, но так там исходники для новомодного pdpy с километровыми именами меток и прочими наворотами, так что для моей среды разработки (micro1103) переделывать его замаешься.

Вот исходник загрузчика, авось кому пригодится:

;определение среды запуска
;загрузка основных файлов

Setup:  mov  #6000,@#177716 ; 1-40k, 4-100k
        mov  #4000,r1
        mov  #fnmtab,r5
1l:     tst  (r5)
        beq  0e
        call @#lemt36 ;загрузка через емт36
        br   1l

0e:    ;определяем OS, пока не испорчена стр 7 (там csidos)
        clrb @#rundos ;0=Andos 1=MKDOS 377=CSIDOS
        mov  @#120000,r5
        cmp  r5,#517
        beq  0andos
        cmp  r5,#460
        bne  0csi
        incb @#rundos
        call @#mksrch ;поиск в mkdos
        br   0all
0csi:   comb @#rundos
        call @#cssrch ;поиск в csidos
        br   0all
0andos: call @#ansrch

0all:  ;r0=первый блок LEVELS.DAT
       ;вписываем начальные блоки всех лабиринтов
        mov  #filtab,r1
        mov  #5,r2
0fl:    mov  r0,(r1)+
        add  #12,r0
        sob  r2,0fl

;грузим на стр 7, теперь csidos можно портить
        mov  #fnmtb2,r5
        call @#lemt36
        ....
        ret

cssrch: ;ищем в CSIDOS
        mov  #54400,@#177716 ;7 в 40к, нужно для CSI
        call @#45010        ;init
        mov  #csidoz,r0
        emt  115
        bcc  0ok
        halt                ;не нашли
0ok:    mov  @#41524,r0      ;адр записи о файле
        mov  16(r0),r0       ;номер первого блока
        mov  #100113,@#30    ;восстанавливаем вектор ЕМТ БК0010
        ret

ansrch: ;поиск в каталоге ANDOS
        mov  #flevls,r1
        call @120216
        bcc 0ok
        halt
0ok:    ;вычисляем начальные блоки
        mov  32(r2),r0      ;нач кластер из каталога
        inc  r0
        asl  r0
        asl  r0             ;номер блока
        ret

mksrch: ;поиск в каталоге MKDOS
        mov  #mklvls,r3
        mov  #bemt36+6,r4
        mov  #17,r0
0m:     movb (r3)+,(r4)+ ;вписываем имя
        sob  r0,0m
        mov  #bemt36,@#306
        mov  @#120014,r3 ;адр буфера чтения каталога
        call @120026
        bcc  0ok
        halt
0ok:    mov  20(r3),r0
        ret

lemt36: mov  #40000,@#bemt36+2 ;адр загрузки
        cmp  (r5),#6000 ;lbhisub?
        bne  2l
        mov  #62000,@#bemt36+2 ;для lbhisub другой
2l:     mov  (r5)+,@#177716 ;стр памяти
        mov  #bemt36+6,r4 ;
        mov  #10,r0
0l:     mov  (r5)+,(r4)+ ;имя файла
        sob  r0,0l
        mov  #bemt36,r1
        emt  36
        ret

fnmtab: .#26000 ;2-40k, 4-100k
        .a:ANIMS.DAT
        .b:0 .#0.#0.#0

        .#36000 ;3-40k ELTS
        .a:WALLS.DAT
        .b:0 .#0.#0.#0

        .#16000 ;5-40k
        .a:MUSIC.DAT
        .b:0 .#0.#0.#0

        .#6000 ;1-40k
        .a:LBHISUB.DAT
        .b:0 .#0.#0
        .#0

fnmtb2: .#56000 ;7-40k
        .a:HISUB.DAT
        .b:0 .#0.#0.#0

flevls: .a:LEVELS DAT
        .b:0
mklvls: .a:LEVELS.DAT
        .b:40.b:40.b:40.b:40.b:0
        .e

rundos: .b:0
        .b:0 ;free

FILTAB: .#0 .#0 .#0 .#0 .#0 ;номера первых блоков файлов

bemt36: .#3 .#40000 .#0 .+60
csidoz: .b:2 .b:0 .#40000 .#220
        .a:LEVELS.DAT
        .+4 .#0 .#1000 .#0 .+22
END
27
Апр
2023

ANDOS, MKDOS,CSIDOS

Поразбирался сегодня с форматами каталогов и встроенными в эти системы командами поиска файлов. Написал пробный код поиска файла для каждой. Везде успешно нашелся начальный блок для файла LEVELS.DAT. Решил все-таки сделать поддержку всех трех систем.