ZX-Ревю 1996 №7-8 1995 г.

Читатель - читателю - вывод на экран спрайт-файлов в iS-Dos.


Предлагаю  программу  для IS-DOS.Oна поз-  
воляет  выводить  на  экран  спрайт-файлы     
формата  графического  редактора  PICASSO    
for IS-DOS  (расширение .sp). Для  файлов
без атрибутов  можно поменять  постоянный
цвет программой unicolor.com .
   Для вывода на экран по нажатии клавиши
3(VIEW) нужно поместить  следующую строку
в файл extview.txt (в каталоге SHELL):

          sp :Q:SHELLexesp /w

   Альтернативные способы вывода на экран
таких  файлов - это использование команд-
ной строки или текстовых командных файлов
типа ".bat".
   В этих случаях строка

    Q:SHELLexesp T:КАТАЛОГфайл [/w]

набирается   соответственно  в  командной
строке либо в редакторе.(В редакторе соз-
дается файл типа ".bat").
   Поместив  несколько подобных строк без
ключа  /w в командный файл типа ".bat"
можно получить просмотр спрайтов,непре-
рывно сменяющих друг друга.
  Для управления выводом на экран исполь-
зуется /w - ключ ожидания.


;*************************
;       Exesp v1.00
;    Copyright 18.07.96
;   by Andrei Chereshnev
;*************************

       ORG  24000
       LD   A,#18           ;Сохраняем текущую
       LD   C,#36           ;среду
       RST  16              ;в пользовательском
       RET  C               ;канале #18
       JR   Start
;-------------------------
       DEFM "UnCo"          ;Для настройки
       DEFB #01             ;постоянного цвета
COLOR  DEFB <0*128>+<0*64>+<7*8>+0

ext:   DEFM "sp "
XY     EQU  #0000           ;Координаты
;-------------------------  ;окна спрайта
L0:    EXX
       EX   DE,HL
       LD   HL,L1
       LD   (addr^+1),HL
Start:
       LD   C,#43           ;Открываем каталог
       RST  16              ;файла и
       RET  C               ;снимаем ключ (если он
addr^  JP   NZ,Exit         ;есть)
       AND  A
       JR   Z,L0
       RES  5,A
       CP   "W"
       JR   NZ,Exit
       XOR  A
       LD   (mnem^),A
       JR   Start
;-------------------------
L1:    EX   DE,HL
       CALL Begin
       RET  C
       XOR  A
mnem^  RET
       LD   C,#07           ;Ждет нажатия
       RST  16              ;клавиши
Exit:
       LD   A,#18           ;Восстановление
       LD   C,#37           ;среды из канала #18
       RST  16
       XOR  A               ;Стандарный выход
       LD   A,#F4           ;в IS-DOS
       RET
;-------------------------
Begin:
       PUSH HL
       LD   DE,8            ;Подставляем файлу
       ADD  HL,DE           ;расширение .sp
       EX   DE,HL
       LD   HL,ext
       LD   BC,#0003
       LDIR
       POP  HL
       LD   C,#25           ;Открываем файл
       RST  16
       RET  C
;-------------------------
       EXX
       LD   DE,14           ;В HL-адрес 32-байтового
       ADD  HL,DE           ;описателя файла (FNAME)
       LD   E,(HL)
       INC  HL
       LD   D,(HL)          ;В DE-длина файла (FLENG).
       CALL Memory          ;Проверяем наличие свободной
       RET  C               ;памяти
;-------------------------
       LD   IX,$SPACE
       XOR  A
       PUSH HL
       LD   HL,#0000
       LD   C,#29           ;Чтение файла,$SPACE -
       RST  16              ;адрес в памяти
       POP  HL
       RET  C
;-------------------------
       LD   BC,5            ;В HL- FLENG+1.
       ADD  HL,BC           ;В HL- WORD_20.
       LD   C,(HL)
       INC  HL
       LD   B,(HL)          ;В BC- #hl спрайта
       LD   A,B
       OR   C
       RET  Z
       PUSH BC
       CALL TestCol         ;Проверяем атрибуты спрайта
;-------------------------
       LD   DE,XY
       POP  BC
       EXX
       LD   HL,$SPACE
       EXX
       JR   Sp_out          ;Изображаем спрайт

;-------------------------
Memory:
       PUSH DE
       LD   C,#10
       RST  16
       EXX
       LD   DE,5            ;В HL-адрес вектора
       ADD  HL,DE           ;конфигурации ядра
       LD   E,(HL)
       INC  HL
       LD   D,(HL)          ;В DE-адрес начала
       LD   HL,$SPACE       ;электронного диска
       EX   DE,HL
       AND  A
       SBC  HL,DE
       POP  DE
       AND  A
       SBC  HL,DE
       EXX
       LD   A,130           ;Не хватает памяти-
       RET                  ;ошибка 130

TestCol:
       LD   L,B             ;B*C=HL
       LD   B,8
       XOR  A
       RR   L
mul0   JR   NC,mul1
       ADD  A,C
mul1   RRA
       RR   L
       DJNZ mul0
       LD   H,A
;
       ADD  HL,HL
       ADD  HL,HL
       ADD  HL,HL
       AND  A
       SBC  HL,DE
       RET  C               ;Есть атрибуты
;Mono
       LD   HL,L0^      ;
       LD   (HL),#21    ;
       LD   HL,COLOR    ;
       LD   (L0^+1),HL  ;LD HL,COLOR
       LD   HL,L0^+3    ;
       LD   (HL),#D9    ;EXX
       LD   HL,L1^      ;
       LD   (HL),#00    ;NOP
       RET

Sp_out:
       PUSH DE
       PUSH BC
       LD   A,E
       AND  #18
       ADD  A,#40
       LD   H,A
       LD   A,E
       AND  7
       RRCA
       RRCA
       RRCA
       ADD  A,D
       LD   L,A

       PUSH HL
       LD   A,H
       RRCA
       RRCA
       RRCA
       AND  #03
       OR   #58
       LD   H,A
       EX   (SP),HL
                            ;Выводим пиксели
L1_0:  LD   E,B
       LD   D,8
L2_0:  LD   B,C
L3_0:  EXX
       LD   A,(HL)
       INC  HL
       EXX
       LD   (HL),A
       INC   HL
       DJNZ  L3_0
       AND   A
       SBC   HL,BC
       INC   H
       DEC   D
       JR    NZ,L2_0
       LD    B,E
;
       LD    A,H
       AND   7
       JR    NZ,L0_0
       LD    A,L
       ADD   A,32
       LD    L,A
       JR    C,L0_0
       LD    A,H
       SUB   8
       LD    H,A
L0_0:  DJNZ  L1_0
;-------------------------
L0^    DEFB 00,00,00,00
       POP  HL
       POP  BC
       POP  DE
L0_1:  LD   E,B             ;Выводим атрибуты (атрибут)
       LD   B,C
L1_1:  EXX
       LD   A,(HL)
L1^    INC  HL
       EXX
       LD   (HL),A
       INC  HL
       DJNZ L1_1
       AND  A
       SBC  HL,BC
       LD   B,E
       LD   DE,32
       ADD  HL,DE
       DJNZ L0_1
       AND  A               ;Обнуляем флаг C
       RET
       END

$SPACE EQU  $

  Oбратите  внимание  на  адрес загрузки
и запуска программы exesp.com (24000). Он
специально выбран для возможной  работы с
помощью mon.com .Длина exesp.com  состав-
ляет 300 байтов.
  Я хотел бы переписываться со всеми, кто
программирует в системе IS-DOS.Мой адрес:
344111,гор.Ростов-на-Дону,пр.40-летия По-
беды,75/4 кв.3,Черешневу Андрею.



СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Анекдоты - подборка анекдотов.
IzhNews - о группе Brutal Creators: на благо группы работают только два человека - NoViS и RTD.
Игрушки - Nomad: интервью с автором скролл-шутера Nomad (Hippiman).
Анкета - Анкетирование продолжается...
Застрял ? - Описание игры "Night Breed".

В этот день...   24 ноября