Обновление. Перевел пятую главу.
Обновление. Перевел пятую главу.
=======================================
Мой профиль на Pixeljoint: http://pixeljoint.com/p/35576.htm
=======================================
Мой профиль на ZXArt.ee: http://zxart.ee/rus/avtory/h/helcril/
=======================================
ZX Spectrum +2, ZX Evolution Rev. C
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
=======================================
Мой профиль на Pixeljoint: http://pixeljoint.com/p/35576.htm
=======================================
Мой профиль на ZXArt.ee: http://zxart.ee/rus/avtory/h/helcril/
=======================================
ZX Spectrum +2, ZX Evolution Rev. C
Шестая глава практически переведена, осталось немного причесать. Однако, в первый раз меня подвел встроенный ассемблер эмулятора ZX Spin. Ругается на строчку ld a,(ix), выдает "Invalid combination of opcode and operands". Не понимаю что его смущает в данной конструкции. Все же верно: загрузить в аккумулятор значение, которое находится по адресу указанному в ix, так? Скомпилировал в sjasm'е и проверил в Spectaculator - все работает нормально. Может кто подскажет, что нужно подправить, чтобы в ZX Spin заработало (он кстати, гад еще и выражения вычислять не умеет).
Второй момент: я не понял что такое аббревиатура GP в комментариях к коду (Generic Point??). Коментарии я так же выделил жирным шрифтом и оставил непереведенными. Прошу помочь с этим.
Листинг программы из этой главы в приложении.centipede.zip
=======================================
Мой профиль на Pixeljoint: http://pixeljoint.com/p/35576.htm
=======================================
Мой профиль на ZXArt.ee: http://zxart.ee/rus/avtory/h/helcril/
=======================================
ZX Spectrum +2, ZX Evolution Rev. C
Спасибо за перевод! Набрал "простую игру" из второй главы...запустил ...вроде цвет поменялся и всё, курсор мигает и больше ничего...
Участок кода из-за которого не работало:
; Initialise coordinates.
ld hl,21+15*256 ; load hl pair with starting coords. эта начальная координата по x, оставил ld hl,21 и все заработало.
ld (plx),hl ; set player coords.
call basexy ; set the x and y positions of the player.
call splayr
Последний раз редактировалось megozavr; 22.12.2015 в 17:59.
Какой ещё курсор? :/
Скормил это sjasm-у, скомпилировалось. Запускаю в эмуле - чёрный экран с треугольничком, управляется цифровыми клавишами.
Код:DEVICE ZXSPECTRUM48 org 25000 ; Устанавливаем черный экран. ld a,71 ; белые чернила (7) на черной бумаге (0), ; яркость (64). ld (23693),a ; устанавливаем наши цвета. xor a ; быстрый способ загрузить 0 в аккумулятор. call 8859 ; устанавливаем постоянный цвет бордюра. ; Настраиваем нашу графику. ld hl,blocks ; адрес данных UDG. ld (23675),hl ; переменная теперь указывает на него. ; ОК, начнем игру. call 3503 ; Процедура ПЗУ – очищает экран, открывает канал 2. ; Инициализация координат. ld hl,21+15*256 ; загружаем в hl начальные координаты. ld (plx),hl ; устанавливаем координаты игрока. call basexy ; устанавливаем координаты x,y игрока. call splayr ; выводим изображение игрока. ; Здесь основной цикл. mloop equ $ ; Стираем изображение игрока. call basexy ; устанавливаем координаты x,y игрока. call wspace ; выводим пробел поверх изображения игрока. ; Теперь после стирания мы можем передвигать игрока, перед тем как вывести ; его по новым координатам. ld bc,63486 ; группа клавиш 1-5/порт джойстика 2. in a,(c) ; смотрим какие клавиши нажаты. rra ; крайний бит = клавиша 1. push af ; запоминаем значение. call nc,mpl ; если была нажата, двигаем влево. pop af ; восстанавливаем аккумулятор. rra ; следующий бит (значение 2) = клавиша 2. push af ; запоминаем значение. call nc,mpr ; если была нажата, двигаем вправо. pop af ; восстанавливаем аккумулятор. rra ; следующий бит (значение 4) = клавиша 3. push af ; запоминаем значение. call nc,mpd ; если была нажата, двигаем вниз. pop af ; восстанавливаем аккумулятор. rra ; следующий бит (значение 8) считывает клавишу 4. call nc,mpu ; если была нажата, двигаем вверх. ; После передвижения игрока можем снова отобразить его. call basexy ; устанавливаем координаты x,y игрока. call splayr ; выводим игрока. halt ; задержка. ; Переходим на начало основного цикла. jp mloop ; Движение игрока влево. mpl ld hl,ply ; запомните, y координата по горизонтали! ld a,(hl) ; каково текущее значение? and a ; оно равно нулю? ret z ; если да – мы не можем больше идти влево. dec (hl) ; вычитаем 1 из координаты y. ret ; Движение игрока вправо. mpr ld hl,ply ; запомните, y координата по горизонтали! ld a,(hl) ; каково текущее значение? cp 31 ; это правый край экрана (31)? ret z ; если да - мы не можем больше идти вправо. inc (hl) ; прибавляем 1 к координате y. ret ; Движение игрока вверх. mpu ld hl,plx ; запомните, x координата по вертикали! ld a,(hl) ; каково текущее значение? cp 4 ; это верхний край экрана (4)? ret z ; если да – не можем двигаться выше. dec (hl) ; вычитаем 1 из координаты x. ret ; Движение игрока вниз. mpd ld hl,plx ; запомните, x координата по вертикали! ld a,(hl) ; каково текущее значение? cp 21 ; это нижний край экрана (21)? ret z ; если да – не можем двигаться ниже. inc (hl) ; прибавляем 1 к координате x. ret ; Установка координат x, y для позиции игрока. ; Эта процедура вызывается перед выводом и стиранием изображения игрока. basexy ld a,22 ; управляющий ASCII-код AT. rst 16 ld a,(plx) ; x координата игрока. rst 16 ; устанавливаем ее. ld a,(ply) ; y координата игрока. rst 16 ; устанавливаем ее. ret ; Вывод игрока в текущей позиции печати. splayr ld a,69 ; голубые чернила (5) на черной бумаге (0), ; яркость (64). ld (23695),a ; устанавливаем наши временные цвета. ld a,144 ; ASCII-код для символа UGD 'A'. rst 16 ; выводим изображение игрока. ret wspace ld a,71 ; белые чернила (7) на черной бумаге (0), яркость (64). ld (23695),a ; устанавливаем наши временные цвета. ld a,32 ; символ пробела. rst 16 ; выводим пробел. ret plx defb 0 ; x координата игрока. ply defb 0 ; y координата игрока. ; UDG графика. blocks defb 16,16,56,56,124,124,254,254 ; изображение игрока. SAVESNA "program.sna",25000
Последний раз редактировалось helcril; 23.12.2015 в 09:09.
=======================================
Мой профиль на Pixeljoint: http://pixeljoint.com/p/35576.htm
=======================================
Мой профиль на ZXArt.ee: http://zxart.ee/rus/avtory/h/helcril/
=======================================
ZX Spectrum +2, ZX Evolution Rev. C
Обновление. Перевел шестую главу. Еще раз попрошу людей разбирающихся помочь с переводом комментариев к коду:
GP x area.
GP y area.
set up GP y coord.
Сам я так и не разобрался для чего эти строчки, а самое главное, что здесь означает GP?
=======================================
Мой профиль на Pixeljoint: http://pixeljoint.com/p/35576.htm
=======================================
Мой профиль на ZXArt.ee: http://zxart.ee/rus/avtory/h/helcril/
=======================================
ZX Spectrum +2, ZX Evolution Rev. C
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)