[ВОПРОС] Вызов нескольких SCR-заставок

  • Автор темы Автор темы yevrowl
  • Дата начала Дата начала

yevrowl

Легенда
Пользователь
Сообщения
3
Счётчик реакций
0
Очки
210
Возможно ли в рамках одной программы записать несколько 6912-байтных экранных заставки, и произвольно вызывать таковые методами Sinclair BASIC?
 
Что-то типа этого, это только набросок:
Бейсик ZX:
   1 REM ============================================
   2 REM Программа с 4 экранными заставками
   3 REM Каждая заставка - 6912 байт
   4 REM Используем массив строк для хранения
   5 REM ============================================
   6
  10 CLEAR 29999          REM Освобождаем память под данные
  20 PRINT AT 0,0;"Загрузка заставок..."
  30
  40 REM Создаем массив для 4 заставок
  50 REM Каждая заставка - строка из 6912 символов
  60 DIM s$(3,6912)       REM Индексы: 0,1,2,3 (4 заставки)
  70
  80 REM === ЗАСТАВКА 0: Черный экран с рамкой ===
  90 FOR i=1 TO 6912
 100 READ a$: LET s$(0,i)=a$
 110 NEXT i
 120
 130 REM === ЗАСТАВКА 1: Шахматная доска ===
 140 FOR i=1 TO 6912
 150 READ a$: LET s$(1,i)=a$
 160 NEXT i
 170
 180 REM === ЗАСТАВКА 2: Градиент ===
 190 FOR i=1 TO 6912
 200 READ a$: LET s$(2,i)=a$
 210 NEXT i
 220
 230 REM === ЗАСТАВКА 3: Текстовая ===
 240 FOR i=1 TO 6912
 250 READ a$: LET s$(3,i)=a$
 260 NEXT i
 270
 280 REM ============================================
 290 REM Основной цикл программы
 300 REM ============================================
 310 LET current=0
 320
 330 REM Функция отображения заставки
 340 DEF FN d(n)=USR 12345  REM Заглушка, будет ниже
 350
 400 REM Главное меню
 410 CLS
 420 PRINT AT 0,0;"=== МЕНЮ ВЫБОРА ЗАСТАВКИ ==="
 430 PRINT AT 2,0;"1 - Черный экран с рамкой"
 440 PRINT AT 3,0;"2 - Шахматная доска"
 450 PRINT AT 4,0;"3 - Градиент"
 460 PRINT AT 5,0;"4 - Текстовая заставка"
 470 PRINT AT 7,0;"0 - Выход"
 480 PRINT AT 9,0;"Выбор: ";
 490
 500 INPUT k
 510 IF k=0 THEN STOP
 520 IF k<1 OR k>4 THEN GO TO 400
 530
 540 REM Отображаем выбранную заставку
 550 GO SUB 1000+(k-1)*1000
 560
 570 PRINT AT 21,0;"Нажмите любую клавишу..."
 580 PAUSE 0
 590 GO TO 400
 600
 610 REM ============================================
 620 REM ПОДПРОГРАММЫ ОТОБРАЖЕНИЯ
 630 REM ============================================
 640
1000 REM Подпрограмма отображения заставки 0
1010 FOR i=1 TO 6912
1020 POKE 16384+i-1,CODE s$(0,i)
1030 NEXT i
1040 RETURN
1050
2000 REM Подпрограмма отображения заставки 1
2010 FOR i=1 TO 6912
2020 POKE 16384+i-1,CODE s$(1,i)
2030 NEXT i
2040 RETURN
2050
3000 REM Подпрограмма отображения заставки 2
3010 FOR i=1 TO 6912
3020 POKE 16384+i-1,CODE s$(2,i)
3030 NEXT i
3040 RETURN
3050
4000 REM Подпрограмма отображения заставки 3
4010 FOR i=1 TO 6912
4020 POKE 16384+i-1,CODE s$(3,i)
4030 NEXT i
4040 RETURN
4050
 700 REM ============================================
 710 REM ДАННЫЕ ДЛЯ ЗАСТАВОК
 720 REM Внимание: здесь должны быть реальные 6912 байт
 730 REM для каждой заставки! Это лишь пример структуры
 740 REM ============================================
 750
 800 REM Заставка 0: Черный экран с белой рамкой
 801 REM Первые 2048 байт - атрибуты (черный на черном)
 802 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 803 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 804 REM ... и так 2048 раз для атрибутов
 805
 806 REM Байты пикселей (6144 байта)
 807 REM Верхняя рамка
 808 DATA 255,255,255,255,255,255,255,255
 809 DATA 255,255,255,255,255,255,255,255
 810 DATA 255,255,255,255,255,255,255,255
 811 REM ... и так далее до 6912 байт
 812
 850 REM Заставка 1: Шахматная доска
 851 DATA 85,85,85,85,85,85,85,85
 852 DATA 170,170,170,170,170,170,170,170
 853 DATA 85,85,85,85,85,85,85,85
 854 DATA 170,170,170,170,170,170,170,170
 855 REM ... повторяем паттерн
 856
 900 REM Заставка 2: Градиент
 901 DATA 0,0,0,0,0,0,0,0
 902 DATA 1,1,1,1,1,1,1,1
 903 DATA 2,2,2,2,2,2,2,2
 904 DATA 3,3,3,3,3,3,3,3
 905 REM ... и так далее
 906
 950 REM Заставка 3: Текст "ZX SPECTRUM"
 951 DATA 0,0,0,0,0,0,0,0
 952 REM ... здесь байты для текстовой заставки
 953
 999 REM Конец данных
 
Интересно кто будет вводить 4*6912=27648 чисел в DATA? :LOL:
Каждое число в памяти - это как минимум 1 байт символ и 6 байт скрыты (14+5-и байтный) - 7 байт, программа 27648*7=193536 байт=189Кб :)
 
Ну это да, согласен. Возможно пример выше приведен просто как пример варианта решения, и именно как и просили на Бейсике. Проще через POKE если уж на то пошло набить туже небольшую програмку на Асме
 
Screen Crasher/by Sendetsky может упаковать картинки так, что распаковщик не привязан к конкретным адресам. Если собрать сжатые картинки вместе и посчитать адрес вызова каждой, то вполне реально.
 
Screen Crasher/by Sendetsky может упаковать картинки так, что распаковщик не привязан к конкретным адресам. Если собрать сжатые картинки вместе и посчитать адрес вызова каждой, то вполне реально.
я скачал scl образ https://zx-forum.ru/resources/screen-crasher.74/ а как в него засунуть мои scr файлы чтобы попробовать сжать? я на windows.
 
Far Manager в помощь.
 
Жаль, что тут нигде не наблюдается педальки "Дизлайк". С радостью надавил бы на неё под каждым сообщением. Простите за откровенность.
 
Жаль, что тут нигде не наблюдается педальки "Дизлайк". С радостью надавил бы на неё под каждым сообщением. Простите за откровенность.
Ты надавишь и тебе надавят. Не жалуйся потом.
 
За что дизлайки? Выше предложили 2 реальных варианта решения. Мне нравится вариант с маленьким asm встроенным в бейсик (DATA+POKE) с командой ldir.
 
Назад
Вверх