Хех... вот только концовки у них перепутаны.
а иначе, например, DHL после 7й строчки перепрыгнет на 72ю.Код:DHL
...
ret c
ld a,h
sub 8
ld h,a
ret
UHL
...
ret c
ld a,h
add a,8
ld h,a
ret
Вид для печати
Хех... вот только концовки у них перепутаны.
а иначе, например, DHL после 7й строчки перепрыгнет на 72ю.Код:DHL
...
ret c
ld a,h
sub 8
ld h,a
ret
UHL
...
ret c
ld a,h
add a,8
ld h,a
ret
Так будет быстрей:
...
A,H
DEC H
AND 7
CALL Z,UH
...
UH A,L
ADD A,#E0
L,A
SBC A,A
AND 8
ADD A,H
H,A
RET
Или так (если нельзя делать Call):
A,H
DEC H
AND 7
JR NZ,$+11
A,L
ADD A,#E0
L,A
SBC A,A
AND 8
ADD A,H
H,A
RET
Довн ХЛ оч распространенная процедура, в каждом кодерском журнале есть (спековском) почти, а вот UP HL я не встречал, а иногда нужно...
когда я писал скроллеры, которые меняют позицию по горизонтали - обычно использовал таблицу адресов экранных линий - опять же смотря по различным демам - так все и делают
DownHL - распространенная процедура конечно, но если она вызывается порядочное число раз на кадр - от нее надо отказываться... UpHL - хотя практически одно и то же - но на практике встречается довольно редко потому, что на практике обычно бывает изменить алгоритм и перейти к старой знакомой процедуре =)
ничего личного...
таблица адресов рулит ! 8)
Ковыряюсь вот помаленьку. Нубский вопрос, как в alasm перейти из режима редактирования в режим комманд?
Вот у меня теоретический вопрос. Применяются ли реально команды OTDR OTIR и подобные, или это сделано по соображениям совместимости или "зеркальности" по отношению к внутренней памяти? простите если туплю..
INIR применяется в драйвере винта в процедуре чтения. OTIR там не применяется только из-за особенностей устройства контроллера (там используются пары OUTI, OUTD). А так, эти команды вполне можно использовать при работе с высокоскоростными внешними устройствами передачи данных...
Друзья спектрумисты, кто мне подскажет, как объявлять матрицу в ассемблере? Желательно с примерами. Ну и как работать с ними. Спасибо
Обычной таблицей. Потом просто использовать функцию преобразования двумерных матричных координат в одномерные координаты массива. Для ускорения можно воспользоваться следующей формулой:
Elem_Addr=256*(row+high(matrix_base))+col*sizeof_e lement.
Т.е. ряды по секторам, выровненным по 256 байт. Но это если очень быстро надо, ибо весьма расточительно (хотя остатки секторов также можно исползовать для своих целей
дайте справочник по асму в эл. виде.
забыл все команды, такты и фичести...
:)
а по мну - самый здравый справочник по командам - в книге Родионова Zx-Spectrum и Tr-Dos для пользователей и программистов --- а растактовка - опять же в ПИТЕРской книжке - как написать игру на ассемблере... сам уже больше 10 лет пользуюсь =)
обе книги есть на виртуал тр-досе...
а мну так написал, чтоб тему обновить :)
Доброго времени суток!
Прошу прощения за вопросы. Я скачал SjASMPlus Z80 кросс ассемблер. Как его запустить. Как им пользоваться. У меня стоит Windows XP. ZX Spectrum работает через эмулятор US0365. Когда был реальный ZX Spectrum а пользовался ассемблером Gens, Mons. Может есть другие ассемблеры для эмуляторов под Windows XP.
На самом деле SjASMPlus это не редактор (как тот же Gens) это компилятор. Ты создаёшь в любом текстовом редакторе (Блокнот, FAR итд) текст своей программы и компилируешь с помощью SjASMPlus.
примеры можешь посмотреть в examples, ну и почитай документацию по командам. как сохранить результаты на образ диска итд.
я пользуюсь sjasm примерно по такой схеме:
1. есть bat-file, который запускает процесс компиляции, а потом автоматом стартует unreal со сгенерированным trd файлом.
его содержимое:
2. внутри main.asm перед самой программой идут вот такие директивы:Код:sjasmplus.exe main.asm
pause
unreal\unreal main.trd
это - включение модели памяти zx128, создание пустого трд диска и запись первым файлом заранее приготовленного бута (в качестве бута идет real commander).Код:DEVICE ZXSPECTRUM128
EMPTYTRD "main.trd"
org 23867
INCBIN "boot.bin"
SAVETRD "main.trd","boot.B",23867,161
3. в конце main.asm, после кода самой программы идут вот такие строки:
здесь автоматом вычисляется длина скомпилированной программы, которая потом используется для сохранения блока скомпилированного кода на диск.Код:END_ADDRESS
PROGRAM_LENGTH EQU END_ADDRESS-START_ADDRESS
SAVETRD "main.trd","code.C",START_ADDRESS,PROGRAM_LENGTH
ORG 45056
INCBIN "file1.bin"
SAVETRD "main.trd","file1.C",#b000,4096
ORG 39680
INCBIN "file2.bin"
SAVETRD "main.trd","file2.C",39680,768
ну и далее к trd цепляются еще 2 файла, нужные для моей проги.
редактирую asm-файлы в Scite редакторе с подправленными правилами раскраски текста.
Я отыскал ZX-Ревю за 1993г. Там есть перевод книги Стюард Николс. Применение Ассемблера для создания быстроработающих программ. На реальном ZX-Spectrum я прорабатывал эту тему, но так и не закончил. Поскольку сейчас появился эмулятор, то имеется возможность продолжить изучение. Как то давно продавали «типа китайских игрушек тетрис и др.», но только советские. Была на мой взгляд неплохая игра. Волк из «Ну погоди», сидящий посередине экрана ловил яйца. Яйца прокатывались по 4 наклонным, как бы, палочкам и подали вниз. Игрок должен был клавишам направить волка с корзиной, чтобы поймать яйцо. Если оно падало, то вылуплялся цыпленок и с писком убегал. При этом число попыток уменьшалось на 1.
Я давно хотел написать такую программу на ассемблере, но я не знаю как прокатывать яйца. По мере увеличения набранных очков увеличивалось и количество прокатываемых яичек. Как их двигать я не знаю.
Всё уже написано до вас ;) http://trd.speccy.cz/full_ver/KOOLEGGZ.ZIP
Ну и что же, что написано! Как я понимаю, человек хочет написать своё для изучения языка и тренировки.
Классика жанра- "Как написать игру на ассемблере" (с робокопом на мотоцикле на обложке). И изучение языка и основ работы с графикой (спрайты и так далее).
Ну а если просто для тренировки - у нас в кулегсах алгоритм простой - за "прокатку" яиц отвечали 2 байта: первый - скорость перекатки яйца с позицию на позицию в прерываниях, второй - через сколько прерываний появляется новое яйцо. Ну и на каждое яйцо описатель - номер лотка, номер текущей позиции в лотке, "время жизни" яйца в прерываниях на текужей позиции. Не много совсем подумать-то и надо :) Блин, жаль исходников не сохранилось, поделился бы.
Доброго времени...!
Vitamin: "Как написать игру на ассемблере" я слышал о такой книге, но не видел. Хотел бы почитать. Я читал книгу «Как написать игру для ZX Spectrum».
CityAceE:. У меня по части программирования ничего не получается.
Kurles: Я скачал “KOOLEGGZ.ZIP” внутри находится файл “KOOLEGGZ.SCL”. У меня
эмуляторы Unreal, EmuZWin. В эмуляторе EmuZWin есть Debug Window так, что дизассемблер Вашей программы можно увидеть.
В EmuZWin программы, которые я набираю на Basic записываются *.ezx
В EmuZWin “All supported file types ” поддерживается *.SCL. При выделении файлов *.TAP появляется изображение кассеты и игра загружаются и сама запускается. При выделении файлов *.SCL появляется изображение дискеты, но ничего не загружаются. Я не знаю как с этим бороться. Я все программы скачивал с расширением *. TAP. Я записал файл “KOOLEGGZ.SCL” на дискету и загружал его с дискеты не загружаются.
Добавлено через 27 минут
Мне удалось найти книгу Евдокимов А. А. Капульцевич. Как написать игру на ассемблере для ZX Spectrum.
Может это глупое желание. Я бы хотел посмотреть код очень простой игры.
В комплекте с sjasm в качестве примеров идёт несколько исходников програм, в том числе и исходник игры Питон.
А кто знает ассемблер ARTICASM. При запуске заставка "SPECTRUM-ASSEMBLER"
1982 ARTIC Computing Ltd. Если нажать H появляется help:
A......Assemble current Source C... Copy block of memory D...Damp (to printer)
E...go into the EDITOR и т.д. Если нажать E появится редактор. 1. В каком формате вводить программу, которую хочу ассемблировать? 2. Как выйти из редактора (пока самое главное)? Можно скачать http://zx-spectrum.narod.ru/soft00.htm
Articasm - ассемблер (82) - 7 kb
Добавлено через 1 час 31 минуту
Я все равно не пойму как работать с sjasm. Имеем файл Sjasmplus я понимаю, что *.exe который должен запустится. Он запускается, но с экрана картинка сразу исчезает. Возможно sjasm не под ХР. Я запускал под VC (Волков). Там такая картина:
Option flags as follows:
-- help Help information <you se it>
-- i <path> or I <path> or – inc=< path > Include path и т.д.
А у Вас как? Как он вообще запустится?
Дык, так и запустится... Знаешь что такое консоль? Пуск->Выполнить->cmd
Вот оттуда или из коммандеров(тот же VC) и нужно запускать.
Например "sjasmplus -mbq game.a80", из директории с исходниками. В зависимости от содержимого входного файла может получиться дамп памяти например или образ диска.
Я наконец, понял как использовать эмулятор EmuZWin для ассемблирования и дизассемблирования программ в кодах. Ввод их в Spectrum и выполнение.
С Articasm много возни и бестолку.
Добавлено через 2 часа 35 минут
ORG 61A8 (1)
LD A, 02 (2)
CALL 5633 (3)
LD DE, MESS (4)
LD BC, 10 (5)
LOOP LD A, B (6)
OR C (7)
RET Z (8)
LD A, (DE) (9)
RST16 (10)
INC DE (11)
DEC BC (12)
JR LOOP (13)
MESS DFEB «I love you» (14)
DFEB «I love you»: DFEB I love you:
MESS DFEB 73,32,108,111,118,101,32,121,111,117
MESS DFEB 73 32 108 111 118 101 32 121 111 117
MESS DFEB 49h,20h,6Ch,6Fh,76h,65h,20h,79h,6F,75h
MESS DFEM »I love you»: MESS DFEM I love you:
От такой код, сообщает 14:Syntax invalid. Как правильно написать?. Я пробовал разные варианты не получается. Какие еще есть варианты? Вариантов много главное выбрать правильный.
К чему столько строк с объявлениями?
К тому же неправильными. DEFB надо использовать для вставки набора байт/строки (не все ассемблеры поддерживают вставку строки в DEFB, надо использовать директиву DEFM).
ORG 25000
LD A,2
CALL 5633
LD DE,MESS
LD BC,10
LOOP LD A,B
OR C
RET Z
LD A,(DE)
RST 16
INC DE
DEC BC
JR LOOP
MESS DEFB "I love you"
Вот верный код, теперь и у меня получилось. Спасибо
А почему такая программа не получается ? Так после метки MESS можно написать целое меню.
ORG 40000
LD A,2
CALL 5633
LD HL,MESS
REP LD A,(HL)
CP FFH
RET Z
RST 16
INC HL
JR REP
MESS DEFB 22,5,2
DEFB "Sinclair Research Ltd. 1982"
DEFB 22,10,4
DEFB "······Program··W·I·N·D·O·W"
DEFB 255
у кого-нибудь из здесь присутствующих есть опыт по написанию искусственного интеллекта? Он вообще много памяти занимает? И что посоветуете, анализировать ситуацию сразу после действий игрока (ну двинулся он направо, например, а потом происходит анализ на нахождение врагов в каком-либо радиусе он героя) или через определенное количество времени?
Как-то делал игру типа шашек. "ум", выбирая свой следующий ход, перебирал все возможные его варианты и выбирал тот, после которого человек может нанести минимальный урон (а то и сам оказаться в плачевном положении).
"Абзац" 23 (http://www.abzac.retropc.ru/files/23.zip)
Статья Вячеслава Медноногова "Интеллект компьютера в стратегиях реального времени".
LD A,2
CALL 5633
можно свободно заменить на
CALL #0DAF - экономим пару байт, цель и функции теже :)
она за одно, если память не изменяет, очистит экран и установит текущие атрибуты из басика, + 2-й поток для печати через ПЗУ.