Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
15 окт 2024 Вт
Контроллер прерываний
Вчера я начал делать, а сегодня утром смог успешно закончить контроллер прерываний и даже его проверил. При нажатии на клавишу на клавиатуре теперь вызывается IRQ #1, который отсылает на прерывание 9, а при истечении таймера (в течении примерно 1/18 сек), вызывается прерывание IRQ #0. Теперь мне осталось доделать установку курсора в текстовом режиме, и программирование контроллера прерываний, а именно программирование скорости вызова IRQ #0, чтобы настроить его на значение 10 мс хотя бы, что будет вызывать прерывание раз в 250к тактов или 100 раз в секунду. Этого вообще хватит. И еще надо сделать IRQ #2 — VRetrace сигнал, чтобы знать момент, когда луч только что закончил рисование картинки. Это нужно для того, чтобы начать обновлять картинку на экране, чтобы в следующий раз, когда луч будет проходить по картинке, там уже все было бы готово и не было бы заметного разрыва, как это обычно бывает, если луч рисует, а на середине уже другой кадр. Помню такие времена, когда играл в Куаку, и там вот именно так разрыв кадра и был.
Еще сегодня сделал выбор палитры из заданной палитры DAC, что позволяет (и я это проверил) программировать цветовую палитру через регистры VGA 968 и 969. О, когда я в детстве о них узнал, я был просто поражен и восхищен и тут же начал использовать их для создания графики. Да... хорошо было тогда!
Работы еще очень много над процессором.
Пока проверял контроллер прерываний, наткнулся, что у меня POP r16 не работает, починил. Надо же так пропустить. Еще вот очень важная штука, это сохранение и выгрузка всех регистров, это очень удобно. Надо бы сделать эту вещь тоже в процессоре, помимо средних переходов, которые кодируются 0Fh инструкциями.
Думаю, что пора бы мне заканчивать как с процессором и начать уже делать что-то на ассемблере.
Еще сегодня сделал выбор палитры из заданной палитры DAC, что позволяет (и я это проверил) программировать цветовую палитру через регистры VGA 968 и 969. О, когда я в детстве о них узнал, я был просто поражен и восхищен и тут же начал использовать их для создания графики. Да... хорошо было тогда!
Работы еще очень много над процессором.
- Установка курсора — почти сделано
- Добавить VRetrace — сделано
- Программирование таймера
- Инструкции jmp near
- PUSHA / POPA
Пока проверял контроллер прерываний, наткнулся, что у меня POP r16 не работает, починил. Надо же так пропустить. Еще вот очень важная штука, это сохранение и выгрузка всех регистров, это очень удобно. Надо бы сделать эту вещь тоже в процессоре, помимо средних переходов, которые кодируются 0Fh инструкциями.
Думаю, что пора бы мне заканчивать как с процессором и начать уже делать что-то на ассемблере.
14 окт 2024 Пн
Встраивание видеоадаптера
Что я сделал вчера
Как и обычно, вчера я занимался тем, что создавал видеоадаптер текстового режима и пытался его встроить в систему. Получилось, но с большим трудом, потому что я отлаживал его не на вериляторе, как обычно, а прямо на реальной микросхеме, делая видеозахват изображения с VGA. Пока что то, что получается, весьма неплохо. Делал встраивание блоков памяти, связывал их между собой. Как я и говорил ранее, дел у меня еще очень много, и следующее что надо сделать, это контроллер прерываний, клавиатуру, кстати говоря, надо, причем не тот контроллер клавы, как в оригинальном 8088, а свой, отдающий по прерыванию ASCII символы для того, чтобы экономить место в биосе для этой цели.
Даже не представляю, сколько времени мне придется это делать, но лучше делать постепенно, но все-таки делать, чем аврально все делать, а потом бросать на половине пути. Даже то, что я взял собственный проект на доработку, уже хороший маркер того, что перестал заниматься одним и тем же.
Деление
Одним из важных пунктов в разработке системы трехмерного видеоускорителя является то, что ему требуется делитель, и как можно более быстрый. Для этого можно использовать смешанный делитель: потактовый и последовательный. Модуль деления довольно сложный для понимания и это даже не поместится в одну короткую статью, чтобы объяснить как он работает, надо много строчить символов, чтобы объяснить. Да и кому объяснять? Меня все равно никто не читает и никто не поймет.
Еще бы мне доработать сайт, чтобы создавать иллюстрации удобно было, а не то что сейчас, не могу нормально сделать ничего. Даже картинку добавить представляет большую сложность.
Логотуп андройда

А еще я вчера сделал интересную вещь на плисе, нарисовал андройда с помощью всяких штук-дрюк, просто чисто. Ну ты понял. На чистой логике.
Контроллер прерываний
В какой-то мере мне удалось сделать контроллер прерываний, который получает новые события, ставит в очередь и рассылает процессору по мере того как он обрабатывает прерывания. Дело в том что прерывания могут появляться одновременно, а процессор просто не успевать их обрабатывать вовремя, так что сделано было так: когда появляется прерывание, то оно просто ставится в очередь. Отсылается последовательно, процессор когда обрабатывает очередное прерывание, должен самостоятельно выставить EOI через
Также я сделал для ПЛИС реальной видеоразрешение 320 на 200, цветное, с палитрой, которую можно программировать через порты. Это мне пригодится для создания игр и приложений. А еще, я хотел бы сделать видеоразрешение 640 на 400, 16 цветов, в будущем. Может и не пригодится, но все равно было бы неплохо. Короче, вот все всё поняли:

Как и обычно, вчера я занимался тем, что создавал видеоадаптер текстового режима и пытался его встроить в систему. Получилось, но с большим трудом, потому что я отлаживал его не на вериляторе, как обычно, а прямо на реальной микросхеме, делая видеозахват изображения с VGA. Пока что то, что получается, весьма неплохо. Делал встраивание блоков памяти, связывал их между собой. Как я и говорил ранее, дел у меня еще очень много, и следующее что надо сделать, это контроллер прерываний, клавиатуру, кстати говоря, надо, причем не тот контроллер клавы, как в оригинальном 8088, а свой, отдающий по прерыванию ASCII символы для того, чтобы экономить место в биосе для этой цели.
Даже не представляю, сколько времени мне придется это делать, но лучше делать постепенно, но все-таки делать, чем аврально все делать, а потом бросать на половине пути. Даже то, что я взял собственный проект на доработку, уже хороший маркер того, что перестал заниматься одним и тем же.
Деление
Одним из важных пунктов в разработке системы трехмерного видеоускорителя является то, что ему требуется делитель, и как можно более быстрый. Для этого можно использовать смешанный делитель: потактовый и последовательный. Модуль деления довольно сложный для понимания и это даже не поместится в одну короткую статью, чтобы объяснить как он работает, надо много строчить символов, чтобы объяснить. Да и кому объяснять? Меня все равно никто не читает и никто не поймет.
Еще бы мне доработать сайт, чтобы создавать иллюстрации удобно было, а не то что сейчас, не могу нормально сделать ничего. Даже картинку добавить представляет большую сложность.
Логотуп андройда

А еще я вчера сделал интересную вещь на плисе, нарисовал андройда с помощью всяких штук-дрюк, просто чисто. Ну ты понял. На чистой логике.
Контроллер прерываний
В какой-то мере мне удалось сделать контроллер прерываний, который получает новые события, ставит в очередь и рассылает процессору по мере того как он обрабатывает прерывания. Дело в том что прерывания могут появляться одновременно, а процессор просто не успевать их обрабатывать вовремя, так что сделано было так: когда появляется прерывание, то оно просто ставится в очередь. Отсылается последовательно, процессор когда обрабатывает очередное прерывание, должен самостоятельно выставить EOI через
OUT ($20),$20
, и тогда сработает следующее, как только флаг IF=1. Хотя слать туда можно что угодно, честно говоря.Также я сделал для ПЛИС реальной видеоразрешение 320 на 200, цветное, с палитрой, которую можно программировать через порты. Это мне пригодится для создания игр и приложений. А еще, я хотел бы сделать видеоразрешение 640 на 400, 16 цветов, в будущем. Может и не пригодится, но все равно было бы неплохо. Короче, вот все всё поняли:

13 окт 2024 Вс
Доделано деление и умножение
Итак, сегодня у меня получилось с утра доделать деление со знаком и умножение 16-битных чисел с Immediate. Это хорошо, потому что теперь мне можно будет приступать к разработке программ, чем делать процессор. Но не все еще так просто, как говорится. Мне необходимо создать контроллер прерываний, что нужно будет для взаимодействия с внешним миром, таким как клавиатура и прерывание таймера, две критически необходимые вещи для создания приложений.
Помимо процессора, навернул на EP4CE10 процессор, для того, чтобы проверить, сколько логических элементов занимает процессор. Оказалось, что 5103 LE, что составляет 50% от общего занятого объема в чипе. Считаю, что прекрасный результат для такой задачи и у меня есть куда стремиться. Есть некоторая проблема с этим чипом, что мне необходимо как-то сделать VGA выход качественный, да и к тому же, стоит ли этим заниматься? Думаю, что пока не стоит. Можно создать этот процессор для чипа C5 для моей отладочной платы, да и я это сделаю. Неважно, где именно сделать программу, главное чтобы сделать.
Мне бы сделать SDCard контроллер лучше.
Помимо процессора, навернул на EP4CE10 процессор, для того, чтобы проверить, сколько логических элементов занимает процессор. Оказалось, что 5103 LE, что составляет 50% от общего занятого объема в чипе. Считаю, что прекрасный результат для такой задачи и у меня есть куда стремиться. Есть некоторая проблема с этим чипом, что мне необходимо как-то сделать VGA выход качественный, да и к тому же, стоит ли этим заниматься? Думаю, что пока не стоит. Можно создать этот процессор для чипа C5 для моей отладочной платы, да и я это сделаю. Неважно, где именно сделать программу, главное чтобы сделать.
Мне бы сделать SDCard контроллер лучше.
12 окт 2024 Сб
Продолжение работы над 8088
Доработки
Очень медленно работа идет над этим процессором, потому что у меня нет времени на то, чтобы заниматься этим постоянно. Сегодня мне бы хотелось сделать инструкции умножения и деления, потому что это тоже важно, между прочим. И просто посмотреть, сколько занимает логических элементов текущий код, просто потому что интересно, влезет ли в 10к от Марсохода в будущем, это тоже важно.
У меня есть вторая плата, которую покупал совсем недавно, это OMDAZZ, и ее тоже было бы интересно проверить, потому что по техническим характеристикам она полностью совпадает с Марсоходом2. То есть по идее, если я смогу сделать для нее, то и для 3-го циклона тоже получится.
Игра Жизнь
Еще недавно я научился "шить" микросхему 150К ПЛИС, загрузил туда свою прошивку для симуляции поля игры "Жизнь" 128 на 120. Это значит, что каждая ячейка "живет" независимо от других и за один такт перебрасывается поле в новое состояние. Это значит, что если запустить на 25 мгц, то, учитывая 128 на 120 = 15360 ячеек, которые занимают 148К ЛЕ, то это равносильно будет обработке 384 млрд ячеек в секунду! Поразительная скорость массового параллелизма. Но это лишь простые ячейки, более сложного ничего не делал пока что, только игру "Жизнь".
У меня еще есть мечта сделать растеризацию фрактала Мандельброта, только вот, смогу ли я это сделать, тот еще вопрос... на самом деле, ничего меня не может остановить, чтобы это сделать, кроме собственной лени.
Итог дня
Сегодня я полдня делал шаблон для omdazz, назначал пины, проверял различные комбинации, тестировал VGA и вот что я скажу — какая-то есть проблема с видеовыходом, поскольку во-первых, там всего лишь 3 бита, во-вторых, изображение получается тусклым. Один из проверочных моих мониторов вообще не может настроиться на видевыход как надо, к тому же, картинка съезжает, возможно даже из-за этих тусклых цветов. Как я посмотрел на схеме, там подключено к 1 кОм резистору, вместо например, 100 Ом, и видимо поэтому изображение такое тусклое и показывается.
Вторая неприятная вещь в том состоит, что оказывается, пины, которые якобы GPIO, на самом деле присоединены к различным устройствам, и значит что придется использовать их совместно. И вообще так получается, что эти пины особо и не получится использовать, честно говоря. Да, можно отказаться от SDRAM например, в пользу пинов, но вместе их использовать никак не выйдет.
Еще на плате есть выводы на LCD экранчик, который присоединяется отдельно. У меня такое чувство, что его подцепить туда будет нельзя, поскольку похоже, не совпадают выводы. Но я должен буду это еще проверить. В любом случае, именно эти пины то и можно юзать как GPIO.
Смог сегодня сделать инструкции умножения и частично деления, только беззнаковое пока что. Знаковое сложнее, это я уже потом делать буду. Дополнительно к функции умножения через обычные групповые инструкции еще бы сделать отдельную IMUL, которая работает с Immediate. Это очень полезная и крайне нужная инструкция для вычисления например, координат.
Очень медленно работа идет над этим процессором, потому что у меня нет времени на то, чтобы заниматься этим постоянно. Сегодня мне бы хотелось сделать инструкции умножения и деления, потому что это тоже важно, между прочим. И просто посмотреть, сколько занимает логических элементов текущий код, просто потому что интересно, влезет ли в 10к от Марсохода в будущем, это тоже важно.
У меня есть вторая плата, которую покупал совсем недавно, это OMDAZZ, и ее тоже было бы интересно проверить, потому что по техническим характеристикам она полностью совпадает с Марсоходом2. То есть по идее, если я смогу сделать для нее, то и для 3-го циклона тоже получится.
Игра Жизнь
Еще недавно я научился "шить" микросхему 150К ПЛИС, загрузил туда свою прошивку для симуляции поля игры "Жизнь" 128 на 120. Это значит, что каждая ячейка "живет" независимо от других и за один такт перебрасывается поле в новое состояние. Это значит, что если запустить на 25 мгц, то, учитывая 128 на 120 = 15360 ячеек, которые занимают 148К ЛЕ, то это равносильно будет обработке 384 млрд ячеек в секунду! Поразительная скорость массового параллелизма. Но это лишь простые ячейки, более сложного ничего не делал пока что, только игру "Жизнь".
У меня еще есть мечта сделать растеризацию фрактала Мандельброта, только вот, смогу ли я это сделать, тот еще вопрос... на самом деле, ничего меня не может остановить, чтобы это сделать, кроме собственной лени.
Итог дня
Сегодня я полдня делал шаблон для omdazz, назначал пины, проверял различные комбинации, тестировал VGA и вот что я скажу — какая-то есть проблема с видеовыходом, поскольку во-первых, там всего лишь 3 бита, во-вторых, изображение получается тусклым. Один из проверочных моих мониторов вообще не может настроиться на видевыход как надо, к тому же, картинка съезжает, возможно даже из-за этих тусклых цветов. Как я посмотрел на схеме, там подключено к 1 кОм резистору, вместо например, 100 Ом, и видимо поэтому изображение такое тусклое и показывается.
Вторая неприятная вещь в том состоит, что оказывается, пины, которые якобы GPIO, на самом деле присоединены к различным устройствам, и значит что придется использовать их совместно. И вообще так получается, что эти пины особо и не получится использовать, честно говоря. Да, можно отказаться от SDRAM например, в пользу пинов, но вместе их использовать никак не выйдет.
Еще на плате есть выводы на LCD экранчик, который присоединяется отдельно. У меня такое чувство, что его подцепить туда будет нельзя, поскольку похоже, не совпадают выводы. Но я должен буду это еще проверить. В любом случае, именно эти пины то и можно юзать как GPIO.
Смог сегодня сделать инструкции умножения и частично деления, только беззнаковое пока что. Знаковое сложнее, это я уже потом делать буду. Дополнительно к функции умножения через обычные групповые инструкции еще бы сделать отдельную IMUL, которая работает с Immediate. Это очень полезная и крайне нужная инструкция для вычисления например, координат.
11 окт 2024 Пт
Оптимизации продолжаются
Сегодня, как всегда, с утра продолжил делать оптимизации. Вчера я смог сделать MOVSx инструкцию, но не учел тот момент, что когда инструкция MOVSB, то требуется всего лишь 2 такта вместо 3 тактов, это исправил. Также оптимизировал инструкцию CMPSx, чтобы она выполнялась за 5 (BYTE) или 7 тактов (WORD). В случае REP тоже работает за 3 или 5 тактов за один раз. Это хорошо, и теперь осталось только сделать SCASx, который будет работать за 1/2 такта. И строковые инструкции будут полностью оптимизированы. Всего их 6 видов:
Само по себе выполнение оптимизации мне нужно для создания плавного скроллинга для игр, которые я хотел бы сделать. Например, можно начать с игры Flappy Bird, которая не так сложна для реализации. И я буду делать ее для чипа C5, с 308К памяти, потому что программирование на Марсоходе-2 меня пока не так сильно привлекает пока что. В любом случае, если потребуется, я просто доработаю для чипа этого.
В итоге смог оптимизировать всё и удалить ненужный код для ipstart. Есть только один недостаток, что при исполнении инструкции она не может быть оборвана посередине. Но это не так важно, все равно, если контроллер прерываний будет, то он будет реагировать на внешние изменения.
Есть одна важная вещь, которую мне надо сделать, это деление, да такое, чтобы побыстрее работало, и неплохо бы оптимизировать и инструкции сдвига, на самом деле. У меня по этому процессору просто прорва работы, он очень сырой и когда его завершу, я не знаю даже. Уже столько времени над ним работаю.
-
STOS
— сохранение A по адресу ES:DI -
LODS
— считывание из DS:SI в A -
MOVS
— копирование из DS:SI -> ES:DI -
CMPS
— сравнение DS:SI с ES:DI, через операцию CMP -
SCAS
— сравнение ES:DI с A
Само по себе выполнение оптимизации мне нужно для создания плавного скроллинга для игр, которые я хотел бы сделать. Например, можно начать с игры Flappy Bird, которая не так сложна для реализации. И я буду делать ее для чипа C5, с 308К памяти, потому что программирование на Марсоходе-2 меня пока не так сильно привлекает пока что. В любом случае, если потребуется, я просто доработаю для чипа этого.
В итоге смог оптимизировать всё и удалить ненужный код для ipstart. Есть только один недостаток, что при исполнении инструкции она не может быть оборвана посередине. Но это не так важно, все равно, если контроллер прерываний будет, то он будет реагировать на внешние изменения.
Есть одна важная вещь, которую мне надо сделать, это деление, да такое, чтобы побыстрее работало, и неплохо бы оптимизировать и инструкции сдвига, на самом деле. У меня по этому процессору просто прорва работы, он очень сырой и когда его завершу, я не знаю даже. Уже столько времени над ним работаю.
10 окт 2024 Чт
Оптимизация? Не... не слышал
Есть у меня один проект одного ядра 8088, который я решил просто доделать, чтобы было. Суть такова. Существует такая инструкция как
Пришла пора значит, переделывать. Сегодня сел с утра и переделал так, что теперь вся эта инструкция выполняется за 4*CX + 3 тактов! Да, это вот такое ускорение аж в 3 раза! Один байт, получается, перекидывает за 2Т.
Если пересчитать количество тактов, то можно понять, что для того, чтобы сдвинуть экран 320 на 200, потребуется (160 x 4 + 3)*200 тактов, что равно 128600, и это в пересчете 25 000 000 / 128600 дает 194 кадров в секунду! Просто поразительное ускорение фактически на 300% только за счет того что я сделал оптимизацию.
Единственный минус в том, что если посередине исполнения этой инструкции возникнет сигнал INTR, то ему придется подождать, пока инструкция закончит работу. Учитывая, что там может быть 65535 итерации, то ждать придется 262140 тактов. Это надо учитывать при разработке программ, которые юзают INTR. Но и еще мне тоже надо доработать контроллер прерываний, чтобы не было такой ситуации, чтобы они были упущены, а то это нехорошо. Контроллер прерываний надо сделать внешний для этого.
А еще сделал чтобы STOSx выполнялся 1Т = 1 байт, с такой скоростью теперь пишется. Для LODSx вообще будет выполняться за 4-5Т всегда, вне зависимости от REP, поскольку имеет смысл читать только последние 1-2 байта из общей выборки.
Таким образом, я переделаю все строковые инструкции.
REP MOVSW
, например. Когда я делал это ядро раньше, то сделал ее такой, чтобы каждый раз она исполнялась за 12Т, и это очень, очень много! Несмотря на то что она исполнялась так медленно, даже этой скорости хватало, чтобы сделать скроллинг экрана со скоростью 65 кадров в секунду. Но разве это дело? Это медленно, и мне этой скорости не хватило.move: xor di, di mov si, 2 mov dx, 200 @@: mov cx, (318/2) rep movsw add di, 2 add si, 2 dec dx jne @b retВыше я привел сакральные коды скроллера, который выполняет перенос всего экрана. Итак, как мы видим, краеугольный камень проблемы в том, что rep movsw выполнялась за 12Т на каждое пройденное машинное слово (2 байта). Я посмотрел в код и удивился, до чего я его не оптимально сделал.
Пришла пора значит, переделывать. Сегодня сел с утра и переделал так, что теперь вся эта инструкция выполняется за 4*CX + 3 тактов! Да, это вот такое ускорение аж в 3 раза! Один байт, получается, перекидывает за 2Т.
Если пересчитать количество тактов, то можно понять, что для того, чтобы сдвинуть экран 320 на 200, потребуется (160 x 4 + 3)*200 тактов, что равно 128600, и это в пересчете 25 000 000 / 128600 дает 194 кадров в секунду! Просто поразительное ускорение фактически на 300% только за счет того что я сделал оптимизацию.
Единственный минус в том, что если посередине исполнения этой инструкции возникнет сигнал INTR, то ему придется подождать, пока инструкция закончит работу. Учитывая, что там может быть 65535 итерации, то ждать придется 262140 тактов. Это надо учитывать при разработке программ, которые юзают INTR. Но и еще мне тоже надо доработать контроллер прерываний, чтобы не было такой ситуации, чтобы они были упущены, а то это нехорошо. Контроллер прерываний надо сделать внешний для этого.

А еще сделал чтобы STOSx выполнялся 1Т = 1 байт, с такой скоростью теперь пишется. Для LODSx вообще будет выполняться за 4-5Т всегда, вне зависимости от REP, поскольку имеет смысл читать только последние 1-2 байта из общей выборки.
Таким образом, я переделаю все строковые инструкции.
09 окт 2024 Ср
Программирование на 86-м для Марсохода2
У меня, как я и говорил ранее, есть большая мечта, это создать программы-демки для собственного 8086 для Марсохода2, который обладает небольшим количеством памяти, а именно всего лишь 46Кб. Для этого я придумал следующую идею. Сделать двойную буферизацию (две экранные страницы) в областях памяти #A0000-#BFFFF. При записи в адрес на самом деле будет писаться 2 младших бита, что дает 4 цвета - черный, синий, зеленый или красный. Цвета можно менять через перепрограммирование DAC через порты 968 и 969.
Итого, для программ и данных остается 14Кб памяти. Первые 256 байт — они зарезервированы под некоторое подобие биоса, то есть там реализованы таймер, клава, сервисные прерывания для видео и клавы, и так далее. Всего лишь 256 байт! Вывод шрифта будет программный, можно использовать как 512 байт для этого, так и 1024 байт, в зависимости от того какая будет задача, имеется только графический режим.
Памяти на чипе мало, так что придется делать очень небольшие программки, но это не страшно. Я не собираюсь делать что-то крутое, мне достаточно будет просто вращать трехмерный куб и на этом успокоить свою душу. Особо целей больше нет никаких...
А может и не надо мне двойной буферизации. И так места в памяти нет, лучше использовать 16 цветов вместо 4. Маловато цветов как-то, маловато. Если юзать 16, то будет 32К тоже, но зато 16 цветов! Может, эмулятор винды получится сделать. А может, и не получится. Кто его знает.
Еще есть одна интересная мысль по поводу игры. Можно сделать небольшую игру про Лиса, который просто бегает по платформам и собирает фрукты, овощи, и ему за это дают монетки в качестве награды. Сюжета делать не буду.
Итого, для программ и данных остается 14Кб памяти. Первые 256 байт — они зарезервированы под некоторое подобие биоса, то есть там реализованы таймер, клава, сервисные прерывания для видео и клавы, и так далее. Всего лишь 256 байт! Вывод шрифта будет программный, можно использовать как 512 байт для этого, так и 1024 байт, в зависимости от того какая будет задача, имеется только графический режим.
Памяти на чипе мало, так что придется делать очень небольшие программки, но это не страшно. Я не собираюсь делать что-то крутое, мне достаточно будет просто вращать трехмерный куб и на этом успокоить свою душу. Особо целей больше нет никаких...
А может и не надо мне двойной буферизации. И так места в памяти нет, лучше использовать 16 цветов вместо 4. Маловато цветов как-то, маловато. Если юзать 16, то будет 32К тоже, но зато 16 цветов! Может, эмулятор винды получится сделать. А может, и не получится. Кто его знает.
Еще есть одна интересная мысль по поводу игры. Можно сделать небольшую игру про Лиса, который просто бегает по платформам и собирает фрукты, овощи, и ему за это дают монетки в качестве награды. Сюжета делать не буду.
08 окт 2024 Вт
Мне надоело переписывать с нуля
§ Предпринимаемость
У меня есть код, который называется процессор 8088, и я его уже миллион раз сделал, так что у меня есть одна простая идея, которая заключается в том, чтобы взять свой код и просто сделать его на Марсоходе-2, и всё. Надо будет доработать код, а не переделать.
Тогда вот что я предприму. Я просто обновлю код 16-битного процессора и сделаю для него простую демосценку, чтобы было. Пока что так. А какую демосценку я сделаю? Конечно же, вращение кубов, куда без них. Я сделаю запись трехмерного куда так, чтобы его мне хватило надолго.
Итак, можно проработать несколько вариантов. Известно что на Марсоходе-2 всего 46 Кб памяти. Если сделать 320 на 200, то можно будет располагать 32КБ памяти для 16 цветов или 16Кб для 4х цветов. Так как я хочу сделать цветное изображение, то 4 цвета тоже сойдет для двойной буферизации. Так что, останется 14 Кб для программной памяти. Интересно. Надо делать.
§ Куб: гиперпуп
Буду делать вращение куба на своем процессоре. Итак, у меня есть 16x2=32K памяти для хранения 4 цветов. Куб будет вращаться вокруг по 3м осям, как это делал старый добрый DirectX куб и рендерится с помощью обычных треугольников без использования буфера глубины. Это хочу сделать для демонстрации возможности ассемблерной программы, конечно же.
Видео область та же, A0000h-AFFFFh, то есть, писаться будет как обычно для видеоразрешения 320 на 200, но количество цветов не 256, а всего лишь 4. Мне просто хочется сделать 3Д хотя бы раз нормально.
У меня есть код, который называется процессор 8088, и я его уже миллион раз сделал, так что у меня есть одна простая идея, которая заключается в том, чтобы взять свой код и просто сделать его на Марсоходе-2, и всё. Надо будет доработать код, а не переделать.
Тогда вот что я предприму. Я просто обновлю код 16-битного процессора и сделаю для него простую демосценку, чтобы было. Пока что так. А какую демосценку я сделаю? Конечно же, вращение кубов, куда без них. Я сделаю запись трехмерного куда так, чтобы его мне хватило надолго.
Итак, можно проработать несколько вариантов. Известно что на Марсоходе-2 всего 46 Кб памяти. Если сделать 320 на 200, то можно будет располагать 32КБ памяти для 16 цветов или 16Кб для 4х цветов. Так как я хочу сделать цветное изображение, то 4 цвета тоже сойдет для двойной буферизации. Так что, останется 14 Кб для программной памяти. Интересно. Надо делать.
§ Куб: гиперпуп
Буду делать вращение куба на своем процессоре. Итак, у меня есть 16x2=32K памяти для хранения 4 цветов. Куб будет вращаться вокруг по 3м осям, как это делал старый добрый DirectX куб и рендерится с помощью обычных треугольников без использования буфера глубины. Это хочу сделать для демонстрации возможности ассемблерной программы, конечно же.
Видео область та же, A0000h-AFFFFh, то есть, писаться будет как обычно для видеоразрешения 320 на 200, но количество цветов не 256, а всего лишь 4. Мне просто хочется сделать 3Д хотя бы раз нормально.
07 окт 2024 Пн
Блог чёкнутого Лиса
Есть такая привычка у меня, писать программы снова и снова, снова и снова, снова и снова, и каждый раз они начинаются как обычно:
Хочу его сделать для OMDAZZ EPC4 на 10К элементов, чтобы было. А там как пойдет. В общем и целом, план такой. Есть система регистров [ax, bx, cx, dx, sp, bp, si, di] и этих регистров на самом деле, всего лишь 8. Есть и другие регистры, сегментные [es, cs, ds, ss] и специальные [flags, ip]. Они тоже являются регистрами, но доступ к ним другого характера.
Как и обычно, процессор мне надо сделать именно простой, напоминающий 8088, потому что он простой. На этот раз я хочу попробовать вариант сделать не как раньше делал, через сначала считывание опкода, префиксов, а вот попробовать сделать считывание опкода и выполнение его. Пока не придумал как это будет точно, но посмотрим по ходу дела, как говорится. Посмотрим... Например, можно сделать сохранение регистров на негативном CLK, почему бы и нет, спектрум так вот смог сделать.
110 PRINT "HELLO WORLD! "; 220 GOTO 10И это классно, потому что мне нравится не вылазить с песочницы и делать одно и тоже годами, такова моя судьба. Теперь вот моя идея заключается в том, чтобы писать в блог все что я могу придумать по поводу того, что такое 8088, который является моим любимым процессором и который делаю годами и никак сделать не могу, потому что лень заела. Не знаю как бы его сделать, но начну.
Хочу его сделать для OMDAZZ EPC4 на 10К элементов, чтобы было. А там как пойдет. В общем и целом, план такой. Есть система регистров [ax, bx, cx, dx, sp, bp, si, di] и этих регистров на самом деле, всего лишь 8. Есть и другие регистры, сегментные [es, cs, ds, ss] и специальные [flags, ip]. Они тоже являются регистрами, но доступ к ним другого характера.
Как и обычно, процессор мне надо сделать именно простой, напоминающий 8088, потому что он простой. На этот раз я хочу попробовать вариант сделать не как раньше делал, через сначала считывание опкода, префиксов, а вот попробовать сделать считывание опкода и выполнение его. Пока не придумал как это будет точно, но посмотрим по ходу дела, как говорится. Посмотрим... Например, можно сделать сохранение регистров на негативном CLK, почему бы и нет, спектрум так вот смог сделать.
1// ЛИСНЫЙ ПРОЦЕССОР 8088 2module fox86 3( 4 input clock, // Тактовая частота 25 5 input reset_n, // Сброс процессора 6 input ce, // Разрешение работы процессора 7 output [19:0] address, // Адрес 1Мб 8 input [ 7:0] in, // Входящие 9 output reg [ 7:0] out, // Исходящие 10 output reg we // Разрешение на запись 11); 12endmoduleТак выглядят процессоры, которые создаются лисами. Стандарт. Теперь переходим к разработке системы. Обычно я делаю сначала считывание префиксов, после идет разбор байта modrm, считываются данные операндов из регистров или памяти, потом выполняются и записываются обратно. Это тоже стандартная схема работы. Лучше я пока придумать не смог.
28 июн 2024 Пт
Новый проект
Свой проект я буду делать постепенно и не спеша. Еще мне хочется много чего сделать, например, у меня есть новая ПЛИС, CE4 на 10К элементов, которую я так полностью еще не проверил до конца. Сегодня мне бы хотелось проверить ее работу, запустить VGA поначалу, попробовать подключить PLL, создать простой стартовый шаблон для начала работы.
Еще хочу сделать вывод экрана тоже, в 128 на 128 точек, из памяти. Могу сказать, что буферизация тут будет именно двойная, не иначе. Количество памяти, которое требуется на такое разрешение равно 128 x 128 (16384 пикселей), но так как в 1 байте 2 пикселя, из-за 16-ти цветов, то для одного видеобуфера необходимо всего лишь 8К. Однако, учитывая двухбуферную память, мне все равно потребуется 16К.
Всего в чипе CE4 встроенной памяти на 46К. Вычитая оттуда видеопамять, получаем свободное место 30Кб всего лишь. В этой памяти дополнительно будет храниться область спрайтов, на 256 знаков. Это займет 8x8x256 пикселей, что равно 16К пикселей. И да, 16 цветов, значит будет 8К.
Остается всего лишь 22К памяти для программ и данных. Это мало, на самом деле. Несмотря на это, все равно достаточно для написания простых игр.
Еще хочу сделать вывод экрана тоже, в 128 на 128 точек, из памяти. Могу сказать, что буферизация тут будет именно двойная, не иначе. Количество памяти, которое требуется на такое разрешение равно 128 x 128 (16384 пикселей), но так как в 1 байте 2 пикселя, из-за 16-ти цветов, то для одного видеобуфера необходимо всего лишь 8К. Однако, учитывая двухбуферную память, мне все равно потребуется 16К.
Всего в чипе CE4 встроенной памяти на 46К. Вычитая оттуда видеопамять, получаем свободное место 30Кб всего лишь. В этой памяти дополнительно будет храниться область спрайтов, на 256 знаков. Это займет 8x8x256 пикселей, что равно 16К пикселей. И да, 16 цветов, значит будет 8К.
Остается всего лишь 22К памяти для программ и данных. Это мало, на самом деле. Несмотря на это, все равно достаточно для написания простых игр.
<< Ранние записи |
Поздние записи >>