User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 23

Тема: Программирование на Z80 в ассемблере и машинном коде на 48 Kb машине!

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Программирование на Z80 в ассемблере и машинном коде на 48 Kb машине!

    Под руками лежит 48 Kb Ленинград (можно c прошивкой Turbo-91), программы Gens и Mons (в ней Я и сам работать не умею) и распечатаны все выпуски журнала ZX Ревю (возможно в плохом качестве, но вообщем-то это не так важно, хотя влияет на работоспособность программ - если что найдем правильное решение методом подбора)!

    Да между прочим для Меня осталась загадкой возможность программирования в машинном коде в области 128 Kb компьютера Пентагон, так как операторы POKE и PEEK как Я понял работают в области 48 килобайт, хотя Я могу ошибаться, но про программирование в машинных кодах в области 128 килобайт никакой литературы найдено не было...
    Последний раз редактировалось alex8418; 21.01.2023 в 23:33.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,288
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    про программирование в машинных кодах в области 128 килобайт никакой литературы найдено не было...
    часть памяти подменяется другой, обычно это называется страницей
    Последний раз редактировалось goodboy; 21.01.2023 в 23:54.

    Этот пользователь поблагодарил goodboy за это полезное сообщение:

    Barmaley_m(24.01.2023)

  4. #3

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    часть памяти подменяется другой, обычно это называется страницей
    Доброго времени суток goodboy! Напишите если возможно, конкретный пример с оператором POKE, чтобы всем читателям темы было понятно как работать в области 128 килобайт!

  5. #4

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,288
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    как работать в области 128 килобайт!
    диапазон адресов тот-же #0000-#FFFF, но 16к #C000-#FFFF можно подменять другим куском памяти.
    сами страницы переключаются через порт (командой OUT)

  6. #5

    Регистрация
    15.05.2010
    Адрес
    Москва
    Сообщений
    64
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    диапазон адресов тот-же #0000-#FFFF, но 16к #C000-#FFFF можно подменять другим куском памяти.
    сами страницы переключаются через порт (командой OUT)
    Спасибо goodboy, диапазон #0000-#FFFF можно было представить в десятичном виде, потому что я думаю не все читатели статьи пока понимают, что FFFF в десятичном представлении это 65535, между прочим создатели журнала ZX Ревю тоже частенько упускали этот момент, возможно для экономии бумаги - предполагая что читатель читал все номера журнала и сориентируется. Я честно говоря сам долго догонял - вот статья с программой, в конце табличка с программой, а что с табличкой делать не понятно, так она ещё и в шестнадцатеричном виде представлена, перерыв весь журнал понял потом и даже разобрался в структуре написание программы в машинном коде! Правда об этом Я хотел позднее написать!

    - - - Добавлено - - -

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Не знаю, откуда появилась мысль про "возмущение", но мне все-таки кажется, что PEEK и POKE - это команды BASIC, а не ассемблера. Или ошибаюсь?
    А смысл набивать бейсик вручную опкодами ассемблера, если сам ассемблер это и так делает автоматически - тоже с трудом понимаю.
    Дело в том, что уважаемый 0xDEAD, что программы в машинном коде и ассемблере отличаются - это первое! Второе: Ассемблер - это программа имеющая, доступ не ко всем командам процессора, а вот машинный код - совсем другое дело, даёт полный доступ абсолютно ко всем командам процессора, которые представлены в соответствующей литературе, описывающей команды процессора Z80! Как Вы ещё получите доступ к машинному коду, если не через POKE и PEEK?
    Последний раз редактировалось alex8418; 25.01.2023 в 02:27.

  7. #6

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    диапазон #0000-#FFFF можно было представить в десятичном виде, потому что я думаю не все читатели статьи пока понимают, что FFFF в десятичном представлении это 65535
    Лучше учитесь читать в шестнадцатеричном виде числа, понятнее будет всё в дальнейшем.
    Цитата Сообщение от alex8418 Посмотреть сообщение
    что программы в машинном коде и ассемблере отличаются - это первое!
    А любопытно чем они отличаются?
    Цитата Сообщение от alex8418 Посмотреть сообщение
    Второе: Ассемблер - это программа
    Ассемблер это не программа, это представление команд процессора в виде, доступном(более понятном) для чтения человеком.
    А то, что вы называете ассемблером, это всего навсего компилятор, да и то, актуальные версии компиляторов, как правило, понимают недокументированные команды процессора
    Последний раз редактировалось LW; 25.01.2023 в 02:37.

  8. #7

    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    105
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    33
    Поблагодарили
    25 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Ассемблер - это программа имеющая, доступ не ко всем командам процессора, а вот машинный код - совсем другое дело
    Да?
    Понимаю, понимаю...

  9. #8

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Ассемблер - это программа имеющая, доступ не ко всем командам процессора, а вот машинный код - совсем другое дело, даёт полный доступ абсолютно ко всем командам процессора, которые представлены в соответствующей литературе, описывающей команды процессора Z80!
    Неожиданно вся соответствующая литература описывает команды процессора мнемониками ассемблера и только потом расшифровкой ))
    И даже если использовать древнейшие трансляторы ассемблера, даже в этом случае любую недокументированную команду можно набить как DEFB байт, байт,...

    Цитата Сообщение от alex8418 Посмотреть сообщение
    Как Вы ещё получите доступ к машинному коду, если не через POKE и PEEK?
    Также как это обычно делают программы для спектрума - загрузкой кодового блока и передачей ему управления. Загрузка в самом простом виде выполняется загрузкой файла кода из команд бейсика. В более извращённом продвинутом - кодовый блок загрузчика впихивается в тело бейсик программы. Ну и естественно структура загрузчика зависит от того с ленты или диска производится загрузка.

    Цитата Сообщение от alex8418 Посмотреть сообщение
    диапазон #0000-#FFFF можно было представить в десятичном виде, потому что я думаю не все читатели статьи пока понимают, что FFFF в десятичном представлении это 65535
    Напротив если будете программировать в ассемблере под zx, забудьте как выглядят адреса и мнемоники в десятичном виде )) Практически все мониторы-отладчики и прочие используют шестнадцатеричное представление, поскольку оно намного удобнее для работы с маш-кодом.

    Ну и немного в тему страниц памяти.
    Запись в порт #7FFD (32765) имеет битовую структуру: %00BRSnnn,

    где nnn - номер страницы (биты 0-2 (0-7): изначально как правило 0),
    S - номер экрана (бит 3 (8): 0 - стандартный стр.5 , 1 - дополнительный стр.7),
    R - номер ПЗУ ( бит 4 (16): 1 - BASIC 48 , 0 - BASIC 128 ),
    B - блокировка 128 K ( бит 5 (32): 0 - доступно , 1 - заблокировано) - если заблокировать, то не разблокируется до перезагрузки.
    старшие биты 6,7 ставить в 0 ( в пентагоне, кае и других клонах могут использоваться для дополнительной памяти)

    В карте процессора страницы следуют:
    #0000 - #3FFF ( 0 -16383) - ПЗУ
    #4000 - #7FFF (16384 - 32767) - 5
    #8000 - #BFFF (32768 - 49151) - 2
    #C000 - #FFFF (49152 - 65535) - окно

    Если воткнуть в окно скажем 5-ю или 2-ю страницу, то она будет доступна сразу по двум адресам и по своему стандартному расположению и по окну.

    Запись в порт в Z80 на ассемблере производится командами:
    out (c),a ( есть также out(c),reg , где reg = a,b,c,d,e,h,l )
    out (n),a где n - короткий адрес порта. (не следует использовать для #7FFD)

    В случае OUT (C),A и подобными на самом деле запись A ведётся в порт с адресом в регистровой паре BC
    а в случае OUT (n),A старший байт адреса порта берется из самого A, то есть значение регистра A засылается в порт с адресом (A)*256+n

    В былые времена наплодили много программ, демок и т.п. использующих короткую адресацию по #xxFD вместо #7FFD, в результате на многих компах (с расширением памяти выше 128 особенно) эти программы вылетали со скрипом ))
    Последний раз редактировалось Dart Alver; 26.01.2023 в 04:27.

    Этот пользователь поблагодарил Dart Alver за это полезное сообщение:

    Barmaley_m(30.01.2023)

  10. #9

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alex8418 Посмотреть сообщение
    чтобы всем читателям темы было понятно как работать в области 128 килобайт!
    Можно посмотреть бейсик-загрузчики игр для 128К.
    Там будут примеры, как подменять память.
    Ну, или можно нагуглить например, https://zxpress.ru/article.php?id=9971
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  11. #10

    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    2,080
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    479
    Поблагодарили
    145 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    помню-помню такую конфигурацию) мне лет 12 было)

    кстати, GENS так-то норм для супер начального уровня) У него каждая строка, помню, нумеровалась как в бейсике.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Программирование на ассемблере
    от shuran33 в разделе Вектор
    Ответов: 341
    Последнее: 05.11.2025, 20:00
  2. Программирование на ассемблере
    от tnt23 в разделе Океан-240
    Ответов: 6
    Последнее: 30.10.2025, 12:56
  3. Ответов: 275
    Последнее: 16.12.2018, 23:01
  4. Продам книгу- AMIGA: программирование на ассемблере
    от Doctor Max в разделе Барахолка (архив)
    Ответов: 11
    Последнее: 01.03.2012, 00:35
  5. Интерфейс эмулятора в коде Z80
    от CityAceE в разделе Эмуляторы
    Ответов: 29
    Последнее: 15.09.2008, 20:23

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •