Неправда! Ничего не глючило. Даже мой малой помнит беседу с Иглом... И проблема была в нехватке 1 страницы под метки. Всего лишь. Аласм его устраивал вполне. А Алем обещал больше страниц... Решили подождать...Сообщение от Robus
просто забили
![]()
Неправда! Ничего не глючило. Даже мой малой помнит беседу с Иглом... И проблема была в нехватке 1 страницы под метки. Всего лишь. Аласм его устраивал вполне. А Алем обещал больше страниц... Решили подождать...Сообщение от Robus
просто забили
![]()
Я так же помню беседу с Eagl'ом, мы с Jungar'ом и Dreamer'ом тогда сидели у меня, после чего Jungar поехал в Николаев водку пить =) И мне Golden показывал как при не хватке меток глючит "аласм" и как ему очень не хватает возможностей "тасма", где можно казывать метку на метку. А меток и вправду не хватала, поэтому последнюю версию ВОРМСа Еагл переписал под "тасм". После Голден купил себе амигу и уж тогда забил на спекки. Хотя настоящую причину "забития" почти никто не знает, кроме Макса и Еагла, и распространяться об этом не будем, это личное Silicon Brains'ов.Сообщение от Знахарь
А в аласме есть только один минус, это меткаи на метки вот и всё, а эта пичина одна из самых главных.
Эх, какие были времена, когда мы с Еаглом по очереди засыпали над его компом, кодируя. Если честно, то я впервые встречал человека, который мог продолжать писать код с того места, на котором я остановился, как и наоборот ... Хех ... "Были люди в наше время, Не то что нынешнее племя, Богатыри, не Вы" ...
Благодарен, Вам ...
AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.
Сообщение от Robus
Хотя, чего я на это трачу время ... Куда мне знать ... Аласм - АЗБЕСТ, CJASM - АЗБЕСТ !!!
Пойду доделывать последний проект ... =)
AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.
Вот это другое делоСообщение от Robus
точки над "и" расставлены
Проехали.
Последний раз редактировалось Знахарь; 03.02.2006 в 17:06.
Robus, что можно укодить такого на ассемблере с фичей "метка на метку", чего никогда не укодишь на ассемблере без этой фичи? С примером плз.
ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
ATM-Turbo 512 v4.50,
Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO
Вот пример программы, где очень много построено на метка в метку ...Сообщение от Aprisobal
Можно-ли подобное откомпилировать в CJASM'е ? Я лишь нажимаю "ентер" и получаю готовый файл, которым уже можно пользоваться !!!Код:; Пример программы супер-микро-мини демка ... EQU $ASAM.PASS.ERROR=1 ;Количество пустых компиляций, для ;устронения вложенных меток в дважды ;запаковынном блоке или больше. INCLUDE "speccy.az8" ;Маленький набор утилит. .LoadPack ,_ ;Загрузка ранее запакованных кусков из @.1.P EQU $PAGE ;файлов, в данном случае это нужно @.1.S INCBIN @.0 ;для LOADER'а, который подгрузит @.1.E EQU $-1 ;картинку загрузки ... =) @.1.L EQU $ASAM.LOAD.SIZE+2 DW $ASAM.LOAD.SIZE .. .PackerXP _ ;Запаковка блока для 128 страниц ORG @.0 @.0.P EQU $PAGE DSQ.Pack @.-@.0 @.0.E EQU $-1 @.0.S EQU $-@.0 .. .RunXP _ ;Автоматическая распаковка и запуск LD A,@.0.P LD HL,@.0.E LD DE,FREEBLOCK CALL DEPACKXP .. PAGE 17 ;Какая-то часть компилится в страницу ORG 49152 EFFx1 PHASE FREEBLOCK ;Адрес свободной памяти EFFx1_S CALL WaitINCER ;Ожидаем окончания секундного интервала LD A,1*8+7 CALL Clearuchik ;Стираем экран CALL Printik ;Печать текста DW 20480 DB "Spectrum Is The Best ..."+128 RET ;Прощай жизнь, конец части =) UNPHASE PackerXP EFFx1 ;Запаковываем кусок B17.S EQU $-49152 ;Размер страницы #17, который в будущем ;запакуется в LOADER, я понимаю, что ;в этой странице уже и так всё запаковано, ;но это всё просто пример PAGE 19 ;То же, что и сверху ... =) ORG 49152 EFFx2 PHASE FREEBLOCK EFFx2_S CALL WaitINCER LD A,2*8+6 CALL Clearuchik CALL Printik DW 18432 DB "Hello To Aprisobal ..."+128 RET UNPHASE PackerXP EFFx2 CLR_P19: ;Процедура, стирания экрана, которая PUSH AF ;распологается сразу после запакованной LD A,R ;части AND 00000111B LD B,A RLCA RLCA RLCA OR B CALL CLR_M0 POP AF LD HL,16384 LD DE,16385 LD BC,6143 LD (HL),L LDIR CLR_M0: LD DE,22529 LD B,A RRA RRA AND A RRA LD HL,ICLR+1 LD (HL),A CLR_M1 BIT 7,(HL) JZ CLR_M1 LD A,B LD HL,22528 LD (HL),A LD BC,767 LDIR RET EFFx3 PHASE FREEBLOCK ;Ещё один блок части, в котором EFFx3_S JMP EFFx3_START ;используется метка на метку ! ORG 49152-(EFFx3_END-EFFx3_START) ;Откомпилит дальнейший код с адреса EFFx3_START ;в самый конец свободной части памяти. CALL WaitINCER ;Последний байт картинки "GFX\entire.scr" LD A,3*8+0 ;будет находиться по адресу 49151 CALL Clearuchik CALL Printik DW 16384 DB "Assembler FOREVER ..."+128 CALL WaitINCER XOR A CALL Clearuchik LD HL,ENTIREL LD DE,18432 LD BC,2048 LDIR HALT LD DE,22528+256 INC B LDIR RET ENTIREL IncBIN "GFX\entire.scr" EFFx3_END UNPHASE PackerXP EFFx3 B19.S EQU $-49152 PAGE 20 ;Для красоты, что бы что-то валялось в странице ORG 49152 DB "CJASM Is The Best ..."+128 B20.S EQU $-49152 PAGE 22 ;Для красоты, что бы что-то валялось в странице ORG 49152 DB "HAVA NAVA VOCHEZ ??? ..."+128 B22.S EQU 16384 PAGE 23 ;Для красоты, что бы что-то валялось в странице ORG 49152 DB "NAVA NAIN VOCHEZ ??? ..."+128 B23.S EQU $-49152 PAGE 16 ;Депакер, который будет использоваться как в деме, ORG 23296 ;так и в LOADER'е DEPACK PUSH DE INC HL LD C,(HL) INC HL LD B,(HL) DEC HL DEC HL DEC DE EX DE,HL ADD HL,BC PUSH HL EX DE,HL AND A PUSH HL SBC HL,DE POP HL JNC DEPAx1 LDDR JMP DEPAx2 DEPAx1 INC HL INC DE SBC HL,BC EX DE,HL SBC HL,BC EX DE,HL LDIR DEPAx2 POP HL POP DE DEPACKX DSQ.DePacker ;Распаковщик by IMP B23296.S EQU $-23296 ;Programm Block ... ORG 23552 INT: PUSHA ;Прерывание ICLR LD A,0 ;Для примера, сюда запихивается цвет бордюра вне INT'а PUSH AF ;да бы можно было понять, что все блоки распаковываются AND 7 ;и запускаются автоматически OUT (254),A POP AF OR 10000000B LD (ICLR+1),A INCER LD A,1 ;Счёчик по секунде, что бы синхронезироваться после DEC A ;затраченного времени на распаковку и другую фингню. JNZ INCERx1 LD A,50 INCERx1 LD (INCER+1),A POPA EI RET Clearuchik: ;Вызов процедуры очистки экрана, которая лежит в 19-ой LD BC,32765 ;странице памяти между двумя запакованными блоками EXA LD A,19 OUT (C),A EXA JP CLR_P19 OrgInt INT,INT ;Утилита из Speccy.az8, устанавливающая в ближайшем StackSP EQU INT.VecAddr ;адресе вектор прерывания, стек лепится перед вектором, ;нпдо же его куда-нибудь поместить WaitINCER: ;Ждём окончание секунды LD HL,INCER+1 LD A,(HL) DEC A JNZ WaitINCER RET M1 ;Цикл запуска трёх частей, в одной из которых RunXP EFFx1 ;появляется наш логотип RunXP EFFx2 RunXP EFFx3 JMP M1 Printik: ;Печать текста POP HL LD E,(HL) INC HL LD D,(HL) INC HL PR1 LD A,(HL) PUSH AF HL RLCA RLCA RLCA LD L,A AND 00000011B ADD A,60 LD H,A LD A,L AND 11111000B LD L,A LD B,D .8 ;Восем раз повторить нужно !!! =) LD A,(HL) LD (DE),A INC L INC D .. ORG $-2 ;Стираем лишние команды, будем экономны !!! =) LD D,B POP HL AF INC E INC HL RLCA JNC PR1 PUSH HL RET DEPACKXP: ;Распаковка блока и запуск его, так как он депачится LD BC,32765 ;сразу послет CALL DEPACKX OUT (C),A CALL DEPACKX FREEBLOCK ;Start Of Programm START: ;Сюда происходит JMP из LOADER'а, так как этот кусок DI ;запускается только раз, его в будущем сотрут LD A,(22528) ;части ГИГА-демы !!! =) RRCA RRCA RRCA LD (ICLR+1),A LD SP,StackSP LD BC,32765 LD A,16 OUT (C),A LD A,INT.VEC LD I,A LD HL,INT LD (INT.VecAddr),HL IM 2 EI JMP M1 ;Интересно, в итоге получился "JP M1" или "JR M1" ? .1 INCLUDE "loader.az8" ;Там лоадер всё запакует и сделает готовый для ORG @. ;использования файл, запихнув его в TRD .. SaveLabels "wl.txt" ;Для примера сохраним все мекти, которые были ;в проекте ;ВСЁ !!! нано-дема отова ... Кстати, вы обратили внимание, на то, что дема ;компилится вообще во всю область памяти, и на ВАСИКовские переменные !!! =) ; ;В итоге всё это ужалось в 4352, с учётом нулей, при сохранении запакованных ;страниц для блоковой загрузки по секторам ... Не экономно, но облом делать ;качественную версию ... В игре Surgicsl Fantasy увидите качественную структуру ;файла, имеющий до 300-та запакованных файлов, блоков и других кусков. ;
Внимательно посмотрите кусок с метки EFFx3 ... Хотя не важно, главное, что бы Вы были Счастливы ...
ССссори за опечатки, всё это делалось за час и я не обращал внимание на грамматику ... =)
Может что-нибудь ещё накодить ??? =) !!!
AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Спасибо. Но можно было и не писать столь большую программу, а дать след. код, который нельзя никак переделать для ассемблера, не умеющего ссылаться вперед:Сообщение от Robus
Код:EFFx3: PHASE FREEBLOCK ;Ещё один блок части, в котором EFFx3_S: JP EFFx3_START ;используется метка на метку ! DB 192 DB 192 EFFx3_START: DEPHASE DEPACKXP: DB 255 DB 255 FREEBLOCK: ;Start Of Programm START: ;...............Никогда не слышал о таком.Сообщение от Robus
На SjASM/SjASMPlus/Pasmo/Xasm/PazAsm/AsMSX/As80/Asm80... нельзя. Знаю только один такой ПЦшный ассемблер tniASM - он мульти-проходной.
Надо будет и что-нибудь с SjASMPlus попробовать сделать на досуге.
ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
ATM-Turbo 512 v4.50,
Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO
Прости, я перепутал ... Это моя оплошность ... Не CJASM, а SjASM... Однако мой компилирует, и ещё TASM 4.0 на Speccy ... Это и была проблема перехода на ALASM, который вообще ниодну мою прогу не компилировал, разве что если всю логику кода переписать. Просто я привык к универсальности. Но это всё вкусы ...Сообщение от Aprisobal
А писать код - приятно большой, маленький, не важно, главное делать.
AAA когда меня режут, я терплю, но когда дополняют, становится нестерпимо.
Ех. Использую структуры (STRUCT). При первой же попытке поюзать заданный стракт вылетает с Exception'ом.Сообщение от Aprisobal
ЗЫ. Банальный тестовый код:
; common sprite structure
STRUCT SPRITE
NEXT WORD 0 ; 00 02 Next sprite in queue (0 - end)
PREV WORD 0 ; 02 02 Previous sprite in queue
NEXTDQ WORD 0 ; 04 02 Next display queue entry (0 - end)
FLAGS BYTE 3 ; 06 01 Flags
; 0: visibility (0 - not visible)
; 1: invalidated (1 - coordinates changed or new sprite)
; 2: delete flag (1 - delete it)
; 3: current visibility (1 - offscreen, preprocessed)
SPRNO BYTE 0 ; 07 01 Sprite number to display
X WORD 0 ; 08 02 X coordinate (pixels) on VSCREEN
Y BYTE 0 ; 0A 01 Y coordinate (pixels) on VSCREEN
DESC WORD 0 ; 0B 02 Sprite descriptor pointer (preprocessed)
SADDR WORD 0 ; 0D 02 Screen address (preprocessed)
HCLIP WORD 0 ; 0F 02 Horizontal clipping routine (preprocessed)
PENTRY WORD 0 ; 11 02 Putter entry (preprocessed)
PEND WORD 0 ; 13 02 Putter endpoint (preprocessed)
LOOKUP BYTE 0 ; 15 01 Lookup high byte (preprocessed)
ENDS
; first queue sprite (0 in visible field)
CSS_Q_FSPR SPRITE 0,0,0,0,0
Последний раз редактировалось Alex/AT; 18.03.2006 в 16:43.
Alex/AT, вот bugfix, пока следующая версия не вышла. См. аттачмент.
Последний раз редактировалось Aprisobal; 20.04.2006 в 12:31.
ATW4GS / BIN2SNA / SquareMania <ТИ-3> / Ужасм+
ATM-Turbo 512 v4.50,
Commodore 64G + TAC-2, Retro-Bit Super Retro TRIO
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)