Предлагаю программу для 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,Черешневу Андрею.