Быстрое рисование экрана в Z80 Assembler + BASIC на эмуляторе

Следуя инструкциям Дэррила Слоана в главе 10 книги «Первые шаги в языке ассемблера Z80»: Во-первых, мы заполняем экран БЕЙСИК-программой случайными раскрашенными сообщениями «привет». Код ассемблера, насколько я понимаю, может затем скопировать эти данные экрана и распечатать их обратно после очистки экрана.

Однако у меня просто черный экран вместо случайного набора цветных приветствий.

Это асм

      ORG 50000; Origin statement
LD HL, 30000 ; start address
LD BC, 6912 ; number of bytes to copy
LD DE, 16384 ; destination address
LDIR
RET

и ОСНОВНОЙ

      40 PRINT INK INT (RND*8); PAPER INT (RND*8); "Hello";
50 GO TO 50

Я понимаю концепцию и код, однако, в отличие от автора, я не использую эмулятор со встроенным ассемблером. - Вот где я могу ошибаться.

  • Напишите код ассемблера в блокноте.
  • Преобразование asm-кода в касание
  • Загрузить в файл крана
  • Введите две строки BASIC в эмуляторе в существующий код.
  • ЗАПУСТИТЬ программу в эмуляторе
  • СЛУЧАЙНО ИЗМЕНИТЬ 50000 USR

1 ответ

Как уже указывал @Jester, этот фрагмент кода, который вы разместили, копирует содержимое памяти 30000-36911 в память дисплея, которая во время выполнения, скорее всего, заполнена нулями, отсюда и черный экран.

Сначала вам нужно перенести содержимое экрана в эту область памяти с помощью дополнительной процедуры передачи:

      ORG 50020; Origin statement
LD HL, 16384; start address of screen
LD BC, 6912 ; number of bytes to copy
LD DE, 30000; destination address
LDIR
RET

И вызовите из базового, как обычно:

RANDOMIZE USR 50020 --> сохранить экран в оперативной памяти

RANDOMIZE USR 50000 --> перевести оперативную память обратно на экран

Другие вопросы по тегам