Спаял Pentagon128, к нему контроллер Немо +hdd+cd. Поиграл. Хочу научиться програмированию. С чего начать??? Ничего не знаю.:v2_conf2:
Спасибо Всем за помощь!
Вид для печати
Спаял Pentagon128, к нему контроллер Немо +hdd+cd. Поиграл. Хочу научиться програмированию. С чего начать??? Ничего не знаю.:v2_conf2:
Спасибо Всем за помощь!
Можно было б тебе посоветовать книжек почитать. На Виртуал ТР-ДОСе их навалом в разделе book, только пока ты их почитаешь у тебя все желание перегорит. Так что лучше пошарь по журналам, например ZX-Format, ZX-Power и куча других. А помоему в Amazin было рассмотрено поэтапное создание демки в примерах. Короче кто ищет - тот обрящет. Удачи!
читай ZX-Рев. Сканы на zx.da.ru
У меня такой вопрос,с детства буквально мучает.
Как переключать страницы в 128к,и вобще как ими пользоваться?Вот если я захочу в одну стр.загрузить картинку в другую музыку (там помойму по 16к одна страница)..Вобщем подскажите где искать..(прессу Инфоркома я прочел,но ниче не понял)
А как обстоят дела со стр. выше 128к?На Скорпионе и выше.Этот вопрос особо интересует,т.к раньше для меня больше 128к памяти считал фантастикой.
"Как написать игру для ZX-Spectrum" сперва книгу 1, потом 2
Но на них, конечно, не останавливаться.
сайт Виртуал Тр-Доса, раздел Books
Тот же "Инфорком" советовал начинать с просмотра кода чужих программ. При наличии современных эмуляторов, которые содержат в себе отладчики и даже ассемблер (EmuZWin), это делается не так сложно.
Я начинал изучать ассемблер по Инфоркомовской книжке. Очень и очень просто всё изложено. Отличное пособие для начинающих.
Я как ТомКат посоветую. Там интересно хотя бы, с картинками, да и написано отлично. А у Инфоркома очень сухо, ну справочник, что с него взять.
А по своему опыту думаю, что надо просто поставить перед собой реальную задачу (например, написать Tetris) и начать её воплощать. По ходу воплощения сразу возникнет куча вопросов, ответы на которые можно получить из приведённых выше книг и здесь на форуме.
+1
По своему опыту могу добавить, что больше путался с програмой-ассеблером и STS-кой чем с языком-ассемблером. Так что сначала нужно выбрать себе программу-ассемблер, изучить ее, распечатать и держать под рукой назначение клавиш. Лично я так с Аласмом и не подружился. ХASмом пользуюсь - для ленивых в самый раз.
Если из нативных - то ZASM 3.0 однозначно, уж больно у него хороший текстовый редактор. А с XAS потом куда-либо уйти сложно с такой мнемоникой.
имхо кросс-ассемблеры рулят... тотже самый сджасм.... вообще в очередной раз скажу что идеальной считаю для программера связку sjasm+unreal
не присоединяюсь:v2_neutr: и вообще считаю, что начинающему не следует прислушиваться к этому совету. нужно начинать с любого "реального" асма:v2_smoke: креативу и стимулов больше будет, а там куда уж кривая выведет! ...меня, кстати, к sjasm'у так и не вывела и надеюсь и не выведет, а за плечами какие-никакие, а лет 6-11 есть...
з.ы.: rasmer'ик не обижайся, ага:v2_wink2: эт только мое имхо:v2_cheer:
недавно пересел с Gens ;) на Alasm, пока не жалуюсь (что, в общем, понятно)
2DINAMIX : да, вот только вчера написал первый лоадер для дискованной 128к игрушки... пользуясь недолгим прочтением начала "Zx Spectrum и TR-DOS для пользователей и программистов", на ВИРТе есть. Мое имо, но авторов "Как написать..." за стиль весьма уважаю, а книгу выше написал один из соавторов.
Вопрос выбора ассмеблера это вообще вопрос веры :-) так что его лучше не трогать.
2Snaper97> делай как Стас посоветовал, самое то. Я вот читал книжку "как написать игру на ассемблере", просто читал и осозновал, книжка на самом деле очень толковая. И потом, когда у меня что то там переваривалось и переключалось жал на кнопари, чтобы попробовать так же но лучше. Кстати мне кажется авторы нарочно не проводили какую либо оптимизацию программ, дабы не усложнить её и оставить места для фантазии, я даже на листочках некоторые программы переписывал, только делал их более быстрыми, оптимальными и т.д. У меня до сих пор вся книжка в этих листочках :-)
Я тоже читаю книгу "как написать игру на ассемблере". Все, что нужно запомнить (это я определяю "на глаз", как говорится), выписываю в специально заведенную для этого дела тетрадку, а также набиваю данный пример на асме вначале один в один, а потом чуточку видоизменяя.
Извиняюсь, проверил и выяснил, что меня чего-то переклинило... хотя, разобраться, клинило весьма давно. Упорно считал, что Родионов, на чью книгу ссылались в "Как написать..." (именно информации из "ZX и TRD для п. и п." в 96-97 мне не хватало при прочтении последней книги), участвовал в написании и этих книг "Как написать...".
2GriV:А насчет ассемблера, конечно, вопрос веры, просто привел свой "клинический случай" :) , а то, что привыкнув к Alasm, слегка забываешь про Gens, думаю, естественное развитие событий.
Подскажите, кому не лень, как перевести число из HEX в DEC. Переклинило меня не могу сообразить. Все что приходит в голову так это или составить таблицу или тупо отнимать по 10 и проверять на заём. Нужна компактная процедура перевода однобайтного числа в диапазоне #00-#63 в десятичные 0-99. Ну пожалуйста!:v2_blush:
Можно использовать "средний" вариант - держать таблицу из семи BCD-чисел (0,16,32,48,64,80,96), а потом корректировать. Т.е получается выборка из таблицы и одно или два вычитания (на 10 для младших разрядов) с инкрементами (для старших).
А.. ну и еще 1-3 сдвига на 4 бита (в зависимости от того, хранить в таблице упакованные числа или нет, и должно ли число на выходе быть упакованным). По-моему есть какая-то команда BCD-корректировки после сложения, с ее помощью можно немного соптимизировать.
Вот тут инфа не поможет?
http://baze.au.com/misc/z80bits.html
Ты натолкнул меня на одну идею, щас обмозгую, может как раз и получится компактно и быстро.
Добавлено через 5 минут
Есть переменная - один байт. По ходу дела её значение меняется в некотором диапазоне. Задача - регулярно выводить на экран в человеческом (десятичном) виде текущее значение. Например если переменная равна #10 то на экран нужно выводить 16, если #1F то 31 и т.д.
Добавлено через 7 минут
Спасибо за ссылку, я хоть и учил английский, но литературный, так что с трудом разбираю что там к чему, но сайт, без сомнения, полезный. Tnx.
Если я правильно понял, то вот вариант:Цитата:
Сообщение от valeron
Регистры B и C содержат соответственно старший и младший ASCII коды результирующего числа.Код:;****************************************************
; 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
;****************************************************
CARO, ну просто огромное спасибо. Такая короткая процедура что я потрясен. Вот для сравнения то что я сегодня родил, сохраню для истории, потом когда-нибудь прикольно будет почитать :)
org #7800tablDB #00 - таблица десятичных значений для старшего полубайта
DB #16 - для пересчета шестнадцатиричных чисел в десятичный
DB #32 - вид для диапазона от нуля до ста.
DB #48 - таблица не должна попадать на переход адресов через
DB #64 - круглое значение (например #7800, #7900,#7A00 и т.д)
DB #80
DB #96
HEX>DECLD 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 мл.полубайта
Ну пожалуй эта процедура равномерна по времени исполнения и там где это критично вполне может подойти в качестве альтернативы.
У меня совсем дурацкий вариант с 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"
Во жесткачите... :)
Если в качестве источника вывода используется инкрементальный/декрементальный счетчик, то можно конвертить на лету:
ЗЫ. Не помню точно, daa только на add/sub реагирует или на inc/dec тоже...Код:counter:
ld a,0
add a,1
daa
ld (counter+1),a
;старшие 4 бита А - десятки, младшие - единицы.
помоему только на add/sub
Придумал еще один способ, отнимать последовательно 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
Ну если мы уж про совсем аццкие способы, то вот как было сделано в первой программе, которую я написал на ассемблере (скорее всего это даже не моя процедура):
В 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
Народ, не поможете советом? Вот кусочек кода, который должен выполниться.
До этого все было нормально, но если убрать ";", то выводится не совсем то, что надо. А именно вот это: http://pic.ipicture.ru/uploads/090929/e5BcGHGz3g.jpgКод:;--------------------------------------
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"
Не подскажете, в чем дело? Я пробовал менять координаты (hisco defb 22,2,23,"H","I","S","C","O","R","E") вместо 2 и 23 ставил другие координаты, но ничего не помогает.
набрал то же самое. вполне получилось.
SAM style, спасибо, натолкнул на одну мысль.
Добавил
и вызвал процедуру печати этого пробела между SCORE и HISCORE. Все заработало.Код:null1 defb 22,21,31," "
а в пзу должна быть процедурка вывода hex в dec формате. никто не искал?
Нужен скролл экрана с права на лево , по знакоместам с цветом , и удалением уехавшего за пределы экрана. При вызове процедуры сдвигает влево экран на одно знакоместо.
Поделитесь, пожалуйста.