User Tag List

Показано с 1 по 10 из 443

Тема: Пишу шедевр для «Вектора 06Ц»

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #9

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    metamorpho, забавный глюк
    если уперется в стену вверх или вниз и зачать соостветсвенно вверх или вниз то враги дрожат на месте

    - - - Добавлено - - -

    вот тебе архив с комментариями
    3 файла

    interrupt.a80 правильные прерывания для работы с программой отрисовки спрайтов

    Скрытый текст

    Код:
    ;процедура обработки прерывания с восстановлением поврежденных данных
    ;при доступе к стеку
    ;регистровая пара для доступа к стеку BC
    im_routine
    	di
    ;сохраняем HL и забираем адрес возврата из прерывания
    	ex	(sp),hl
    ;сохраняем его
    	ld	(im_ret),hl
    ;забираем HL
    	pop	hl
    ;сохраняем его чтобы не потерять при манипуляциях с SP
    	ld	(im_hl),hl
    ;сохраняем флаги
    	push	af
    ;вычисляем корректный адрес стека программы
    	ld	hl,2
    	add	hl,sp
    ;сохраняем стек программы
    	ld	(im_sp),hl
    	pop	af
    ;восстановлением поврежденые данные регистром BC
    	push	bc
    	
    ;задаем стек прерывания	
    	ld	sp,im_stek
    ;сохраняем все регистры кроме HL
    	push	af,bc,de
    ;-----------------------------
    ;ISR
    ;здесь прерывание	 	
    ;-----------------------------
    ;восстанавливаем регистры
    	pop	de,bc,af
    ;восстанавливаем HL
    	ld	hl,#2121
    im_hl	equ	$-2
    ;восстанавливаем стек
    	ld	sp,#3131
    im_sp	equ	$-2
    	ei
    ;возвращаемся из обработки прерывания
    	jp	#c3c3
    im_ret	equ	$-2
    [свернуть]

    sprite.a80 две подпрограммы быстрого вывода через стек
    но тебе надо будет поменять формат спрайтов
    сначала вся линия для одного плана, потом для другого, потом для третьего.
    это значительно ускорит вывод.

    вектор использует систему битпланов при формировании цвета точки
    вот здесь на примере идентичной системы Commodore Amiga более менее рассказано


    Скрытый текст

    Код:
    ;вывод спрайта в системе битпланов Вектор 06
    ;ширина спрайта -24
    ;на входе
    ;bc адрес спрайта
    ;de aдрес на экране 
    ;E-Y D-X 
    ;A высота спрайта/2
    
    drop24
    	ld	hl,0
    	add	hl,sp
    	ld	(sprite_sp0),hl
    	ld	h,b
    	ld	l,c
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    ;задаем Y в L
    	ld	l,e
    ;задаем высоту спрайта в E
    	ld	e,a
    ;задаем X в A
    	ld	a,d
    ;переход между битпланами
    	ld	d,#20	
    drop240
    	ld	h,a
    ;рисуем на первом плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    
    ;повторяем цикл рисования
    ;
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    ;выбираем следующую пару байтов для цикла рисования
    	pop	bc
    
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    ;проверяем на завершение цикла 
    	dec	e
    	jp	nz,drop240	
    sprite_sp
    	ld	sp,#3131
    sprite_sp0 equ	$-2
    	ret
    
    ;ширина спрайта -32
    ;на входе
    ;bc адрес спрайта
    ;de aдрес на экране 
    ;E-Y D-X 
    ;A высота спрайта/2
    
    drop32
    	ld	hl,0
    	add	hl,sp
    	ld	(sprite_sp0),hl
    	ld	h,b
    	ld	l,c
    	ld	c,(hl)
    	inc	hl
    	ld	b,(hl)
    	inc	hl
    	ld	sp,hl
    ;задаем Y в L
    	ld	l,e
    ;задаем высоту спрайта в E
    	ld	e,a
    ;задаем X в A
    	ld	a,d
    ;переход между битпланами
    	ld	d,#20	
    drop320
    	ld	h,a
    ;рисуем на первом плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    
    ;повторяем цикл рисования
    ;
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на второй битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на втором плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	pop	bc
    ;переход на третий битплан
    	add	a,d
    
    	ld	h,a
    ;рисуем на третьем плане
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    	inc	h
    	pop	bc
    	ld	(hl),c
    	inc	h
    	ld	(hl),b
    ;выбираем следующую пару байтов для цикла рисования
    	pop	bc
    
    ;возвращаемся на первый план	
    	sub	#40
    ;переходим на следующую строку
    	inc	l	
    ;проверяем на завершение цикла 
    	dec	e
    	jp	nz,drop320	
    	jp	sprite_sp
    [свернуть]

    И небольшая таблица в EXCEL
    с памяткой по переводу команд из z80 в i8080 и назад.
    чтобы понять как это работает

    interrupt.zip
    Последний раз редактировалось jerri; 01.08.2020 в 22:05. Причина: багу нашел
    С уважением,
    Jerri / Red Triangle.

    Этот пользователь поблагодарил jerri за это полезное сообщение:

    metamorpho(02.08.2020)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Бейсики для Вектора-06Ц и клонов
    от ivagor в разделе Вектор
    Ответов: 696
    Последнее: 25.10.2025, 02:34
  2. Картотека ПО для Вектора-06ц
    от svofski в разделе Вектор
    Ответов: 719
    Последнее: 04.04.2024, 11:13
  3. Восстановление Вектора-06ц
    от Daniil Chislov 86 в разделе Вектор
    Ответов: 100
    Последнее: 11.03.2021, 00:23
  4. Ответов: 198
    Последнее: 26.04.2020, 13:05
  5. Ответов: 58
    Последнее: 06.07.2019, 23:56

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •