PDA

Просмотр полной версии : Програмирование



Snaper97
07.05.2008, 22:12
Спаял Pentagon128, к нему контроллер Немо +hdd+cd. Поиграл. Хочу научиться програмированию. С чего начать??? Ничего не знаю.:v2_conf2:
Спасибо Всем за помощь!

valeron
07.05.2008, 23:02
Можно было б тебе посоветовать книжек почитать. На Виртуал ТР-ДОСе их навалом в разделе book, только пока ты их почитаешь у тебя все желание перегорит. Так что лучше пошарь по журналам, например ZX-Format, ZX-Power и куча других. А помоему в Amazin было рассмотрено поэтапное создание демки в примерах. Короче кто ищет - тот обрящет. Удачи!

daniel
08.05.2008, 09:13
читай ZX-Рев. Сканы на zx.da.ru

DINAMIX
08.05.2008, 23:46
У меня такой вопрос,с детства буквально мучает.
Как переключать страницы в 128к,и вобще как ими пользоваться?Вот если я захочу в одну стр.загрузить картинку в другую музыку (там помойму по 16к одна страница)..Вобщем подскажите где искать..(прессу Инфоркома я прочел,но ниче не понял)
А как обстоят дела со стр. выше 128к?На Скорпионе и выше.Этот вопрос особо интересует,т.к раньше для меня больше 128к памяти считал фантастикой.

TomCaT
09.05.2008, 11:27
"Как написать игру для ZX-Spectrum" сперва книгу 1, потом 2

Но на них, конечно, не останавливаться.


сайт Виртуал Тр-Доса (http://trd.speccy.cz), раздел Books

janvier
09.05.2008, 11:44
Тот же "Инфорком" советовал начинать с просмотра кода чужих программ. При наличии современных эмуляторов, которые содержат в себе отладчики и даже ассемблер (EmuZWin), это делается не так сложно.

retroid
09.05.2008, 11:52
Я начинал изучать ассемблер по Инфоркомовской книжке. Очень и очень просто всё изложено. Отличное пособие для начинающих.

Shadow Maker
09.05.2008, 12:05
Я как ТомКат посоветую. Там интересно хотя бы, с картинками, да и написано отлично. А у Инфоркома очень сухо, ну справочник, что с него взять.

CityAceE
09.05.2008, 14:09
А по своему опыту думаю, что надо просто поставить перед собой реальную задачу (например, написать Tetris) и начать её воплощать. По ходу воплощения сразу возникнет куча вопросов, ответы на которые можно получить из приведённых выше книг и здесь на форуме.

pulsar
09.05.2008, 19:31
А по своему опыту думаю, что надо просто поставить перед собой реальную задачу (например, написать Tetris) и начать её воплощать.

имхо, самый толковый совет:v2_clap2:

и уж желание при такой постановке точно не перегорит, а читать книжечки... лучше те моменты которые нужны... кстати, сам так начинал (с реальной задачи). надо только сразу интересную задачу ставить:v2_wink2:

valeron
09.05.2008, 23:28
+1
По своему опыту могу добавить, что больше путался с програмой-ассеблером и STS-кой чем с языком-ассемблером. Так что сначала нужно выбрать себе программу-ассемблер, изучить ее, распечатать и держать под рукой назначение клавиш. Лично я так с Аласмом и не подружился. ХASмом пользуюсь - для ленивых в самый раз.

Destr
09.05.2008, 23:47
А по своему опыту думаю, что надо просто поставить перед собой реальную задачу (например, написать Tetris) и начать её воплощать. По ходу воплощения сразу возникнет куча вопросов, ответы на которые можно получить из приведённых выше книг и здесь на форуме.
Поддерживаю. Правда это далеко не самый быстрый вариант, но самый надёжный (чтоб научится программировать, надо взять, и начать программировать).
Требуется, однако и куча свободного времени+крепкое желание...

Shadow Maker
10.05.2008, 03:19
Если из нативных - то ZASM 3.0 однозначно, уж больно у него хороший текстовый редактор. А с XAS потом куда-либо уйти сложно с такой мнемоникой.

rasmer
10.05.2008, 12:58
имхо кросс-ассемблеры рулят... тотже самый сджасм.... вообще в очередной раз скажу что идеальной считаю для программера связку sjasm+unreal

pulsar
11.05.2008, 16:23
имхо кросс-ассемблеры рулят... тотже самый сджасм.... вообще в очередной раз скажу что идеальной считаю для программера связку sjasm+unreal
не присоединяюсь:v2_neutr: и вообще считаю, что начинающему не следует прислушиваться к этому совету. нужно начинать с любого "реального" асма:v2_smoke: креативу и стимулов больше будет, а там куда уж кривая выведет! ...меня, кстати, к sjasm'у так и не вывела и надеюсь и не выведет, а за плечами какие-никакие, а лет 6-11 есть...

з.ы.: rasmer'ик не обижайся, ага:v2_wink2: эт только мое имхо:v2_cheer:

TomCaT
11.05.2008, 19:19
недавно пересел с Gens ;) на Alasm, пока не жалуюсь (что, в общем, понятно)

2DINAMIX : да, вот только вчера написал первый лоадер для дискованной 128к игрушки... пользуясь недолгим прочтением начала "Zx Spectrum и TR-DOS для пользователей и программистов", на ВИРТе есть. Мое имо, но авторов "Как написать..." за стиль весьма уважаю, а книгу выше написал один из соавторов.

GriV
11.05.2008, 21:16
недавно пересел с Gens на Alasm, пока не жалуюсь (что, в общем, понятно)
Вопрос выбора ассмеблера это вообще вопрос веры :-) так что его лучше не трогать.

2Snaper97> делай как Стас посоветовал, самое то. Я вот читал книжку "как написать игру на ассемблере", просто читал и осозновал, книжка на самом деле очень толковая. И потом, когда у меня что то там переваривалось и переключалось жал на кнопари, чтобы попробовать так же но лучше. Кстати мне кажется авторы нарочно не проводили какую либо оптимизацию программ, дабы не усложнить её и оставить места для фантазии, я даже на листочках некоторые программы переписывал, только делал их более быстрыми, оптимальными и т.д. У меня до сих пор вся книжка в этих листочках :-)

tmp_online
11.05.2008, 22:08
Я тоже читаю книгу "как написать игру на ассемблере". Все, что нужно запомнить (это я определяю "на глаз", как говорится), выписываю в специально заведенную для этого дела тетрадку, а также набиваю данный пример на асме вначале один в один, а потом чуточку видоизменяя.

Shadow Maker
12.05.2008, 05:13
Мое имо, но авторов "Как написать..." за стиль весьма уважаю, а книгу выше написал один из соавторов.
Чьих соавторов?

TomCaT
12.05.2008, 13:47
Чьих соавторов?

Извиняюсь, проверил и выяснил, что меня чего-то переклинило... хотя, разобраться, клинило весьма давно. Упорно считал, что Родионов, на чью книгу ссылались в "Как написать..." (именно информации из "ZX и TRD для п. и п." в 96-97 мне не хватало при прочтении последней книги), участвовал в написании и этих книг "Как написать...".

2GriV:А насчет ассемблера, конечно, вопрос веры, просто привел свой "клинический случай" :) , а то, что привыкнув к Alasm, слегка забываешь про Gens, думаю, естественное развитие событий.

valeron
13.05.2008, 20:59
имхо кросс-ассемблеры рулят... тотже самый сджасм.... вообще в очередной раз скажу что идеальной считаю для программера связку sjasm+unreal

Я вообще-то реал имел ввиду. Нету у меня на работе ПЦ, связист я. А спектрум есть, и даже иногда выкраиваю время на него.

valeron
15.09.2008, 20:50
Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!:v2_blush:

Shwartz
15.09.2008, 22:01
Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём.
Можно использовать "средний" вариант - держать таблицу из семи BCD-чисел (0,16,32,48,64,80,96), а потом корректировать. Т.е получается выборка из таблицы и одно или два вычитания (на 10 для младших разрядов) с инкрементами (для старших).
А.. ну и еще 1-3 сдвига на 4 бита (в зависимости от того, хранить в таблице упакованные числа или нет, и должно ли число на выходе быть упакованным). По-моему есть какая-то команда BCD-корректировки после сложения, с ее помощью можно немного соптимизировать.

Kurles
15.09.2008, 22:35
Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!:v2_blush:Не понятна суть вопрса - что именно должно быть на входе процедуры и что на выходе - строка символов, к примеру db "#4b", или само число - db #4b?

NovaStorm
16.09.2008, 10:03
Вот тут инфа не поможет?
http://baze.au.com/misc/z80bits.html

valeron
16.09.2008, 11:09
Можно использовать "средний" вариант ...

Ты натолкнул меня на одну идею, щас обмозгую, может как раз и получится компактно и быстро.

Добавлено через 5 минут

Не понятна суть вопрса - что именно должно быть на входе процедуры и что на выходе - строка символов, к примеру db "#4b", или само число - db #4b?

Есть переменная - один байт. По ходу дела её значение меняется в некотором диапазоне. Задача - регулярно выводить на экран в человеческом (десятичном) виде текущее значение. Например если переменная равна #10 то на экран нужно выводить 16, если #1F то 31 и т.д.

Добавлено через 7 минут

Вот тут инфа не поможет?
http://baze.au.com/misc/z80bits.html

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

caro
16.09.2008, 12:19
...как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99.
Если я правильно понял, то вот вариант:
;************************************************* ***
; a => bc
; [0..63h] => ['00'..'99']
;************************************************* ***
bin2bcd:
ld c,10
ld b,'0'-1
; делить исходное число на 10
div10: inc b ;старший нибл
sub c
jr nc,div10
; переполнение
add a,c
add a,'0'
ld c,a ;младший нибл
ret
;************************************************* ***

Регистры B и C содержат соответственно старший и младший ASCII коды результирующего числа.

Kurles
16.09.2008, 13:31
Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!:v2_blush:Ну тогда тупо отнимать по десять и проверять на заем - это очень удачная идея =) Реализацию уже вроде написали.

valeron
16.09.2008, 23:01
Если я правильно понял, то вот вариант:[CODE];************************************************* ***
...
Регистры B и C содержат соответственно старший и младший ASCII коды результирующего числа.

CARO, ну просто огромное спасибо. Такая короткая процедура что я потрясен. Вот для сравнения то что я сегодня родил, сохраню для истории, потом когда-нибудь прикольно будет почитать :)


org #7800
tabl
DB #00 - таблица десятичных значений для старшего полубайта
DB #16 - для пересчета шестнадцатиричных чисел в десятичный
DB #32 - вид для диапазона от нуля до ста.
DB #48 - таблица не должна попадать на переход адресов через
DB #64 - круглое значение (например #7800, #7900,#7A00 и т.д)
DB #80
DB #96

HEX>DEC
LD C,A - сохранить исходное число
AND #0F - взять мл.полубайт
OR A - сбросить флаги
DAA - преобразовать в десятичный вид
LD B,A - запомнить в регистре В
LD HL,tabl - адрес начала таблицы для старшего полубайта
LD A,C - берем исходное число
RRCA - выделяем старший полубайт
RRCA -
RRCA -
RRCA -
AND #0F - и подготавливаем индексацию таблицы
ADD A,L - индексация
LD L,A -
LD A,(HL) - берем из таблицы десятичное значение ст.полубайта
ADD A,B - складываем с десятичным значение мл. полубайта
OR A - сбрасываем флаги
DAA - еще раз чтобы при сложении избавится от переполнения
RET мл.полубайта

Ну пожалуй эта процедура равномерна по времени исполнения и там где это критично вполне может подойти в качестве альтернативы.

Shwartz
17.09.2008, 01:58
У меня совсем дурацкий вариант с 26-байтной таблицей


; a - исходное число
;на выходе:
; b - первый символ
; с - второй символ
HexToDec
ld l, a ;определяем смещение в таблице
srl l
srl l
res 0, l

ld h, 0 ;если выровнять Table на 256 байт,
ld de, Table ;то эти строки можно заменить на
add hl, de ; ld h, Table / 256

ld b, (hl) ;старшая цифра
inc hl
and 7
add (hl) ;младшая цифра
cp "9" + 1
jr c, EndHexToDec ;если > 9
inc b ;увеличиваем старшую
sub 10 ;уменьшаем младшую
EndHexToDec
ld c, a
ret
Table
db "00081624324048566472808896"

Shadow Maker
17.09.2008, 02:56
Во жесткачите... :)

Vitamin
17.09.2008, 10:09
Если в качестве источника вывода используется инкрементальный/декрементальный счетчик, то можно конвертить на лету:



counter:
ld a,0
add a,1
daa
ld (counter+1),a
;старшие 4 бита А - десятки, младшие - единицы.


ЗЫ. Не помню точно, daa только на add/sub реагирует или на inc/dec тоже...

James DiGreze
17.09.2008, 11:44
помоему только на add/sub

Shwartz
18.09.2008, 00:47
Придумал еще один способ, отнимать последовательно 80, 40, 20, 10.


; a - исходное число
;на выходе:
; h - первый символ
; l - второй символ
; a, b, de - портятся
HexToDec
ld b, 80
ld de, #800 ;d = 8
ld h, e ;H = 0; L не имеет значения
Loop cp b
jr c, Less
sub b
add hl, de
Less srl b ;b /= 2
srl d ;d /= 2
jr nc, Loop
ld d, "0" ;e == 0
add d
ld l, a
add hl, de
ret

Понятно, что это медленный способ. Просто было интересно.

Shadow Maker
18.09.2008, 08:54
Ну если мы уж про совсем аццкие способы, то вот как было сделано в первой программе, которую я написал на ассемблере (скорее всего это даже не моя процедура):

В HL я так понял число, потом по адресу BUFFER выстраивается число для печати. Метод кстати прикольный, ибо позволяет в принципе конвертировать любой длины числа при должной адаптации.


DECIMAL LD BC,BUFFER
LD DE,10000
CALL COUNT
LD DE,1000
CALL COUNT
LD DE,100
CALL COUNT
LD DE,10
CALL COUNT
LD A,L
ADD A,48
LD (BC),A
RET
COUNT XOR A
LP PUSH HL
SBC HL,DE
JR C,ENDC
INC A
INC SP
INC SP
JP LP
ENDC POP HL
ADD A,48
LD (BC),A
INC BC
RET

tmp_online
29.09.2009, 18:35
Народ, не поможете советом? Вот кусочек кода, который должен выполниться.



;--------------------------------------
ld hl,udg
ld (23675),hl
ld a,2
call 5633
ld de,score
ld bc,08h
call 8252

;ld de,hisco
;ld bc,10
;call 8252

ld de,kvtst
ld bc,0Dh
call 8252

ret

kvtst defb 22,5,11,144,144,144,144,144,144,144,144,144,144
score defb 22,2,1,"S","C","O","R","E"
udg defb 254,130,186,186,186,130,254,0
hisco defb 22,2,23,"H","I","S","C","O","R","E"


До этого все было нормально, но если убрать ";", то выводится не совсем то, что надо. А именно вот это: http://pic.ipicture.ru/uploads/090929/e5BcGHGz3g.jpg

Не подскажете, в чем дело? Я пробовал менять координаты (hisco defb 22,2,23,"H","I","S","C","O","R","E") вместо 2 и 23 ставил другие координаты, но ничего не помогает.

SAM style
29.09.2009, 19:05
набрал то же самое. вполне получилось.

tmp_online
29.09.2009, 19:36
SAM style, спасибо, натолкнул на одну мысль.
Добавил

null1 defb 22,21,31," "
и вызвал процедуру печати этого пробела между SCORE и HISCORE. Все заработало.

daniel
06.10.2009, 04:32
а в пзу должна быть процедурка вывода hex в dec формате. никто не искал?

AER
19.11.2009, 11:10
Нужен скролл экрана с права на лево , по знакоместам с цветом , и удалением уехавшего за пределы экрана. При вызове процедуры сдвигает влево экран на одно знакоместо.


Поделитесь, пожалуйста.

jerri
19.11.2009, 11:27
Нужен скролл экрана с права на лево , по знакоместам с цветом , и удалением уехавшего за пределы экрана. При вызове процедуры сдвигает влево экран на одно знакоместо.


Поделитесь, пожалуйста.



ld hl,#5801
exx
ld hl,#4001
ld b,#18

l0
exx
ld d,h
ld e,l
dec e
dup 31
ldi
edup
inc hl
exx
push bc,hl

l1
ld d,h
ld e,l
dec e

push hl,de
dup 31
ldi
edup
pop de,hl

inc h
inc d
ld a,h
and #07
jr nz,l1

pop hl,bc
ld a,l
add a,#20
ld l,a
jr nc,$+6
ld a,h
add a,8
ld h,a
djnz l0
ret

как то так

Vitamin
19.11.2009, 11:28
Как-то так:)


ld hl,#4001
ld de,#4000
ld bc,6912
ldir
ld hl,#401f
ld de,32
ld b,27
clr_rig:
ld (hl),0
add hl,de
djnz clr_rig

jerri
19.11.2009, 11:38
тоже вариант :)
но некрасиво скролит :)

AER
19.11.2009, 12:57
Завтра буду дома попробую. Так кака лучше будет.


Молодцы , что сказать я еще не силен в этом.

---------- Post added at 12:57 ---------- Previous post was at 12:49 ----------

Я писарь бейсик игр, куда выкладывать то желательно.

AER
20.11.2009, 07:10
чёт несовсем то..
мне надо чтоб знакоместа сместились в лево, правый крайний столбец остался пустым для моего заполнения. и это уже я сделаю циклично.

Vitamin
20.11.2009, 08:56
чёт несовсем то..
мне надо чтоб знакоместа сместились в лево, правый крайний столбец остался пустым для моего заполнения. и это уже я сделаю циклично.
А что получается тогда?

jerri
20.11.2009, 13:08
чёт несовсем то..
мне надо чтоб знакоместа сместились в лево, правый крайний столбец остался пустым для моего заполнения. и это уже я сделаю циклично.

тебе покороче? (с)

AER
21.11.2009, 13:50
да хоть как, работало чтоб. тот скролл по кругу крутит

AER
22.11.2009, 09:29
игра

jerri
22.11.2009, 10:25
так тебе откуда и куда двигать то надо?
в демке - слева направо :)

---------- Post added at 11:25 ---------- Previous post was at 11:23 ----------

он не по кругу крутить - он двигает справа налево
а что там справа - ему по барабану

AER
22.11.2009, 11:16
STE-это просто игру свою показал.

А вот работа вашей двигалки.

jerri
23.11.2009, 09:10
Нужен скролл экрана с права на лево , по знакоместам с цветом , и удалением уехавшего за пределы экрана. При вызове процедуры сдвигает влево экран на одно знакоместо.
Поделитесь, пожалуйста.

Твоё ТЗ?



ld hl,#4001
ld de,#4000
ld bc,6911
ldir


ld hl,#401f
ld de,32
ld b,192
clr_pix:
ld (hl),0
add hl,de
djnz clr_pix

ld b,24
clr_att
ld hl,7
add hl,de
djnz clr_att
ret


ну оно вообщето делает именно то что ты просил - сдвигает экран влево
справа тебе надо уже чемто заполнять

AER
23.11.2009, 13:14
Это правый столбец значит мне очищать надо. Понятно.

Вы бы мне дописали его очистку после сдвига. Я буду заполнять не весь столбец а только отдельные элементы бейсиком.

Еще не достал там ?

Vitamin
23.11.2009, 13:29
Вы бы мне дописали его очистку после сдвига. Я буду заполнять не весь столбец а только отдельные элементы бейсиком.
В моем варианте как раз был отдельный цикл очистки правого столбца.

AER
23.11.2009, 13:35
Че значит - твое тз: - ?

jerri
23.11.2009, 14:05
В моем варианте как раз был отдельный цикл очистки правого столбца.



ld hl,#401f
ld de,32
ld b,27
clr_rig:
ld (hl),0
add hl,de
djnz clr_rig


а вот тут поподробнее - что чистит цикл? :)
он у тебя некорректно работает

---------- Post added at 15:01 ---------- Previous post was at 14:59 ----------


Че значит - твое тз: - ?

твое Техническое Задание
читай: описание того что должна делать заказанная программа.
тебе лет то сколько?

---------- Post added at 15:05 ---------- Previous post was at 15:01 ----------


Это правый столбец значит мне очищать надо. Понятно.

Вы бы мне дописали его очистку после сдвига. Я буду заполнять не весь столбец а только отдельные элементы бейсиком.

Еще не достал там ?



; двигаем экран
ld hl,#4001
ld de,#4000
ld bc,6911
ldir


;чистим правый столбец
ld hl,#401f
ld de,32
ld b,192
clr_pix:
ld (hl),0
add hl,de
djnz clr_pix

;чистим атрибуты правого столбца
ld b,24
clr_att
ld (hl),7 ;вот здесь цвет атрибутов
add hl,de
djnz clr_att
ret

Vitamin
23.11.2009, 14:30
а вот тут поподробнее - что чистит цикл?
он у тебя некорректно работает
А, да. Не до конца:) Атрибуты нулевым цветом- это фича такая)

jerri
23.11.2009, 14:39
27 для атрибутов - многовато ;)

Vitamin
23.11.2009, 14:45
27 для атрибутов - многовато
Не. Меня переклинило- 27 секторов на экран, вот и зафигачил такое же число:)