Быстрое рисование экрана в 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 --> перевести оперативную память обратно на экран