╔══════════════════════════════════════╗
║Раздел : Ассемблер ║
║Текст : Ж.Юрий ║
║Music : IRONMAN ║
║Информация : Mr.Beeper, Activator. ║
╚══════════════════════════════════════╝
Наверное каждый, кто только начинает изу
чать ассемблер, сталкивается с этой проб-
лемой. HEX - система.
Я скажу прямо, что ничего удивитель-
ного нет в нормальном "человеческом" отно-
шении к этой системе. Но все же, я уверен,
что чем больше Вы будете общаться со своим
SPECCY на уровне ассемблера, тем более
будет меняться Ваше отношение к HEX - сис-
теме. Это просто неизбежно.
Представте себе такую ситуацию. человек
едет, скажем, за границу. Как лучше узнать
о неизвестой стране, о жизни людей, кото-
рые там живут, да и извлечь максимум поль-
зы от поездки?
Разумеется, если знать язык. После этого
Вам откроются многие нюансы, которые Вы
никогда бы не узнали иначе. Вы будете уже
не "понимать", а "чувствовать".
Компьютер "разговаривает" на своем языке
и если Вы хотите (а ведь Вы конечно хоти-
те!) узнать о нем больше, даже не узнать,
а "почувствовать" его, изучайте его язык -
шестнадцатиричную систему. И способ здесь
только один - как можно больше "говорить"
на этом языке - работать в HEX системе.
Попробуйте, ради интереса провести такой
эксперимент. Все, что связано с ассембле-
ром, пишите только в HEX - системе, и
только в ней, даже если поначалу будет
трудновато. Хотя бы неделю. Ведь насколько
естественней записать элегантное:
LD HL,#4000
чем несуразное: LD HL,16384
и так далее. Я уверен, что через неделю
работы на ассемблере в HEX - системе вмес-
то: LD A,2
Вам захочется написать:
LD A,#02
А такие вещи, как загрузка в регистр BC
длины и кода операции TR-DOS:
LD BC,#2005
вообще выглядит естественно и Вам даже не
придет в голову загружать регистры B и C
отдельно - это все будет происходить на
подсознательном уровне - Вам откроется
шестое чувство!
────────────────────────
Вообщем начиная с этого номера, мы
с вами попробуем сделать маленькое,
но красивое DEMO, а если вы потом его и
пришлете к нам в редакцию, то оно будет
вставлено в приложение журнала !!!
Итак, все по порядку:
Первое что надо нам сделать, это уста-
новить атрибуты, сделать цыкл, а в цыкле
опрос клавиши SPACE для выхода в TASM.
ORG 25000
XOR A ; установка
OUT (254),A ; атрибутов
LD HL,#4000 ;
LD DE,#4001 ; и очистка экрана
LD BC,6144 ;
LD (HL),L ;
LDIR ;
LD BC,767 ;
LD (HL),7 ; < PAPER 0: INK 7
LDIR ;
;--------------- ЦЫКЛ !
CYCL LD BC,#7FFE ; если нажата кл.
IN A,(C) ; "space"
BIT 0,A ; то
RET Z ; выход
CALL ... ; вызов осн.подпр.
HALT ; задержка
JR CYCL ; возврат на начало
Ну вот, с первой задачей мы
и справились.
Попробуйте сюда вставить еще проигрывание
мелодии.
А если вы не знаете как это сделать, тогда
подсказываю, что надо для этого сделать:
1. Надо откомилировать мелодию в любом
музыкальном редакторе, под удобный для
Вас адрес.
Если вы не знаете как компилировать
мелодию, тогда почитайте HELP для редак-
тора, там должно быть это написано. Да,
■и компилируйте с player'ом.
2. Подгрузить в память ассемблера эту
мелодию можно следующим образом.
В самом начале вашей программы надо напи-
сать две вот такие строчки:
ORG ... ; адрес
INCBIN ... ; имя файла
и мелодия будет уже находится в памяти.
Давайте предположим, что мелодия у нас
будет находится по адресу 49152.
После этого поставте перед началом цыкла
CALL 49152, а в самом цыкле надо
влепить тоже команду CALL, но адрес уже
придется изменить в соответствии с ре-
дактором, в котором откомпилирована эта
мелодия. Ниже преведены адреса инсталя-
ции и проигрывания мелодии, для различных
типов музыки: инсталяция│проигрыв.
────────────────────
│
Pro Tracker 1.1 - - - - - +0 │+6
│
Pro Tracker 2.1 - - - - - +0 │+6
│
Pro Tracker 2.4 - - - - - +0 │+5
│
Sound Tracker Pro x.x - - +0 │+6
│
ASC Sound Master x.x - - +11│+14
Ну вот, теперь мы знаем как мелодию проиг-
рывать.
А чтоб ее выключить, надо в цыкле изменить
команду RET Z, на JR Z,EXIT
И в конце цыкла дописать:
EXIT CALL 49152 ; выключение мелодии
RET ; выход в TASM
Теперь все это попробуйте записать в
TASM и запустить.
Если все правильно, то эта небольшая
програмка должна работать !!!
* * *
Конечно это ничто, что еще мы с вами
сделаем, но для начала сойдет.
А для тех, кто знает ассемблер чуть луч-
ше, внизу приведена процедура бегущей
строки по спрайтам. На диске есть как и
этот скролл в формате TASM 4.0 так и
шрифт для него, под название "SPR.FNT".
Попробуйте разобраться с ним сами.
ORG #8000
SCROLL LD A,(DATA)
DEC A
LD (DATA),A
JR NZ,SCROL
LD A,8 - ;расстояние
LD (DATA),A ;между буквами
LD HL,(TDAT)
LD A,(HL)
CP #FF - ;проверка на ко-
CALL Z,NEW ;нец текста
INC HL
LD (TDAT),HL
LD H,0
LD L,A
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,#9000-512 ;адрес шрифта
ADD HL,DE
LD DE,POLY
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
LDI
SCROL LD IX,POLY
LD HL,#50C0+31 ;размещение на
LD B,16 ;экране
KC PUSH HL
RLC (IX+00)
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
DEC HL
RL (HL)
POP HL
CALL SNOS
INC IX
DJNZ KC
RET
SNOS INC H
LD A,H
AND 7
RET NZ
LD A,L
ADD A,#20
LD L,A
RET C
LD A,H
SUB 8
LD H,A
RET
NEW LD HL,TEXT
LD (TDAT),HL
LD A,(HL)
RET
POLY DW 0,0,0,0,0,0,0,0,0
DATA DB 8
TDAT DW TEXT
TEXT DB " THIS IS POLYFORM MAGAZINE "
DB #FF
Если вы уже разобрались, то переходим к
следующей процедуре, которая тоже встре-
чается во многих demo. Это часы, которые
предоставил нам ACTIVATOR.
________________________________
;TIMING!;
;CODED AND COPYRIGHT BY ACTIVATOR'97;
CALL NEW ;надо ставить перед
;цыклом
TIKTAK LD A,(ZAD)
DEC A
LD (ZAD),A
AND A
RET NZ
LD A,50
LD (ZAD),A
LD A,(SEC1)
INC A
LD (SEC1),A
CP #0A
JR Z,NEXT1
LD HL,#50E5
CALL PRINT
RET
NEXT1 XOR A
LD (SEC1),A
LD HL,#50E5
CALL PRINT
LD A,(SEC2)
INC A
LD (SEC2),A
CP #06
JR Z,NEXT2
LD HL,#50E4
CALL PRINT
RET
NEXT2 XOR A
LD (SEC2),A
LD HL,#50E4
CALL PRINT
LD A,(MIN1)
INC A
LD (MIN1),A
CP #0A
JR Z,NEXT3
LD HL,#50E2
CALL PRINT
RET
NEXT3 XOR A
LD (MIN1),A
LD HL,#50E2
CALL PRINT
LD A,(MIN2)
INC A
LD (MIN2),A
CP #06
JR Z,NEW
LD HL,#50E1
CALL PRINT
RET
NEW XOR A
LD (SEC1),A
LD HL,#50E5
CALL PRINT
XOR A
LD (SEC2),A
LD HL,#50E4
CALL PRINT
XOR A
LD (MIN1),A
LD HL,#50E2
CALL PRINT
XOR A
LD (MIN2),A
LD HL,#50E1
CALL PRINT
RET
PRINT LD (VIV+1),HL
LD H,#00
LD L,A
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD DE,#6A19
ADD HL,DE
VIV LD DE,#0000
LD B,#07
LOOP LD A,(HL)
LD (DE),A
INC HL
INC D
DJNZ LOOP
RET
ZAD DB 50
SEC1 DB 0
SEC2 DB 0
MIN1 DB 0
MIN2 DB 0
На диске эта процедура тоже есть в фор-
мате TASM 4.0
_______________
------------------------------------------
Ну вот, на сегодня вроде-бы все, больше
информации у меня не осталось.
А если у Вас есть интересные процедуры
и вы хотите с ними поделиться, тогда
пишите в редакцию и мы опубликуем их в
кратчайшие сроки.
Продолжение следует ...
________________________