Что-то не нашёл я ни одного намёка на поддержку ROM-диска в этой версии БИОСа CP/M. Так что - ищи другую версию :)
Вид для печати
Ааа.. Ты про это ПЗУ. Ладно, займусь, наверное. А что обычно в него прошивается?
На 112-той странице только схема, в текст я особо не вчитывался, а зря. Там сказано, что описание п/п загрузки есть в главе 9. Сейчас вот посмотрел, и действительно, есть описание на стр. 88 :)
А я методом тыка делал ПЗУ. Вобщем, для примера, засунул в ПЗУ две имеющиеся у меня игры. Качай новую версию :)
Если будешь делать своё, имей ввиду, файл должен быть ровно 64Кб. Неиспользованный остаток забивается байтом 0FFh.
вау, первые игры для ириши :)
b2m, ты просто волшебник! :)
Поясни, пожалуйста, смысл этой строки из конфига.
image[0].file="Irisha\disk.cpm"
Или это на будущее?
А в этих точно нет ошибок?
map[1][0000-FFFF]=mem1[0000]
map[3][0000-FFFF]=mem1[0000]
Может вместо FFFF должно быть 3FFF?
Образ по умолчанию. Я сделал себе для экспериментов пустой образ - файл длинной 720Кб забитый байтом 0E5h. Это просто его имя :)
В принципе, всё работает, но я другого и не ожидал. Эмуляция ВГ93 оттачивалась не на одном компьютере :)
Действительно, ошибка. Не заметил, потому что всё работает (т.к. последующие строчки задали области как надо). Можешь сам исправить :)
b2m, специально для тебя. :)
Загрузчик ОС для МСИ.
Бинарник и листинг загрузчика добавил в пост 280.Код:RAM:A000 ; ---------------------------------------------------------------------------
RAM:A000 31 00 A0 lxi sp, 0A000h
RAM:A003 0E 2E mvi c, 2Eh ; '.'
RAM:A005 CD 00 20 call conout
RAM:A008 21 00 A4 lxi h, 0A400h
RAM:A00B E5 push h
RAM:A00C 01 04 01 lxi b, 0104h
RAM:A00F
RAM:A00F loc_A00F: ; CODE XREF: RAM:A03Bj
RAM:A00F E1 pop h
RAM:A010 E5 push h
RAM:A011
RAM:A011 loc_A011: ; CODE XREF: RAM:A024j
RAM:A011 ; RAM:A04Dj ...
RAM:A011 3E 27 mvi a, 27h ; 00100111b - чтение сектора с дискеты
RAM:A013 D3 50 out 50h
RAM:A015 CD 70 A0 call sub_A070 ; ожидание ТРБ
RAM:A018 79 mov a, c ; № номер сектора (04)
RAM:A019 D3 51 out 51h
RAM:A01B CD 70 A0 call sub_A070 ; ожидание ТРБ
RAM:A01E 78 mov a, b
RAM:A01F D3 51 out 51h ; № дорожки (01)
RAM:A021 CD 5C A0 call sub_A05C ; ОШИБКА?
RAM:A024 DA 11 A0 jc loc_A011 ; перечитать сектор.
RAM:A027 16 80 mvi d, 80h
RAM:A029 3E 03 mvi a, 3 ; 00000011b - разгрузка буффера
RAM:A02B D3 50 out 50h
RAM:A02D
RAM:A02D loc_A02D: ; CODE XREF: RAM:A035j
RAM:A02D CD 70 A0 call sub_A070 ; ожидание ТРБ
RAM:A030 DB 51 in 51h
RAM:A032 77 mov m, a
RAM:A033 23 inx h
RAM:A034 15 dcr d
RAM:A035 C2 2D A0 jnz loc_A02D
RAM:A038 CD 5C A0 call sub_A05C ; ОШИБКА?
RAM:A03B DA 0F A0 jc loc_A00F ; перечитать с начала.
RAM:A03E 79 mov a, c ; вычисляем новый сектор
RAM:A03F C6 03 adi 3 ; 4,7,10,13,16,19,22,25,
RAM:A041 FE 1B cpi 1Bh ; 2,5,8,11,14,17,20,23,26,
RAM:A043 DA 48 A0 jc loc_A048 ; 3,6,9,12,15,18,21,24.
RAM:A046 D6 1A sui 1Ah ; 1,4,7,.....,24.
RAM:A048
RAM:A048 loc_A048: ; CODE XREF: RAM:A043j
RAM:A048 D1 pop d
RAM:A049 E5 push h
RAM:A04A 4F mov c, a
RAM:A04B FE 01 cpi 1
RAM:A04D C2 11 A0 jnz loc_A011 ; Новый сектор 1? нет, читаем ту же дорожку.
RAM:A050 05 dcr b ; да, вычисляем новую дорожку (00).
RAM:A051 CA 11 A0 jz loc_A011 ; Читаем следующую дорожку (00).
RAM:A054 0E 21 mvi c, 21h ; '!' ; Последняя прочитана,
RAM:A056 CD 00 20 call conout ; выводим "!",
RAM:A059 C3 00 BA jmp boot ; запускаем ОС.
RAM:A05C
RAM:A05C ; --------------- S U B R O U T I N E ---------------------------------------
RAM:A05C
RAM:A05C
RAM:A05C sub_A05C: ; CODE XREF: RAM:A021p
RAM:A05C ; RAM:A038p ...
RAM:A05C DB 50 in 50h
RAM:A05E 17 ral
RAM:A05F 17 ral
RAM:A060 17 ral
RAM:A061 17 ral
RAM:A062 D2 5C A0 jnc sub_A05C
RAM:A065 1F rar
RAM:A066 D0 rnc
RAM:A067 C5 push b
RAM:A068 0E 3F mvi c, 3Fh ; '?'
RAM:A06A CD 00 20 call conout
RAM:A06D C1 pop b
RAM:A06E 37 stc
RAM:A06F C9 ret
RAM:A06F ; End of function sub_A05C
RAM:A06F
RAM:A070
RAM:A070 ; --------------- S U B R O U T I N E ---------------------------------------
RAM:A070
RAM:A070
RAM:A070 sub_A070: ; CODE XREF: RAM:A015p
RAM:A070 ; RAM:A01Bp ...
RAM:A070 DB 50 in 50h
RAM:A072 17 ral
RAM:A073 DA 70 A0 jc sub_A070
RAM:A076 C9 ret
RAM:A076 ; End of function sub_A070
RAM:A076
RAM:A076 ; ---------------------------------------------------------------------------
Можно прикручивать МСИ. :) Вместо ОС, для проверки, в образ диска пока можно внедрить какую либо программу, ту же игрушку.
Позже будет и система.