Ага люблю учить тому чего сам не умею )) Хотя тут наука то не велика на самом деле. Возни только много без конвертера ))
Во первых перекодируем ZASMовские исходники в обычный текст без упаковки пробелов. Я делал средствами самого ZASMа и вытаскивал на ПЦ. Если файл был сильно большой для конверсии - делил пополам.
Во вторых уже на ПЦ переписываем макросы засма в макросы ужасма )))
Пример:
ZASM
Код:MACROS_MAC_INCLUDED ;ISR_ENTER OLD_SP,JUMP_ADR,ISR_SP ISR_ENTER MACRO:EX (SP),HL:LD (=1),HL:EX (SP),HL:INC SP,SP:LD (=2),SP LD SP,=3:PUSHA:EXX:EXA:PUSHA:PUSH IX,IY:LD A,(PAGE):PUSH AF:ENDM ;ISR_LEAVE ISR_LEAVE MACRO:POP AF:CALL LKL:POP IY,IX:POPA:EXX:EXA:POPA:ENDM GETA MACRO:DEC SP:POP AF:ENDM NEGHL MACRO:XOR A:SUB L:LD L,A:SBC A,H:SUB L:LD H,A:ENDM NEGDE MACRO:XOR A:SUB E:LD E,A:SBC A,D:SUB E:LD D,A:ENDM NEGBC MACRO:XOR A:SUB C:LD C,A:SBC A,B:SUB C:LD B,A:ENDM STA MACRO:LD (HL),A:INC HL:ENDM STDE MACRO:LD (HL),E:INC HL:LD (HL),D:INC HL:ENDM STBC MACRO:LD (HL),C:INC HL:LD (HL),B:INC HL:ENDM STB MACRO:LD (HL),=1:INC HL:ENDM STW MACRO:STB =1:STB =1.h:ENDM LODBC MACRO:LD C,(HL):INC HL:LD B,(HL):INC HL:ENDM LODDE MACRO:LD E,(HL):INC HL:LD D,(HL):INC HL:ENDM LODA MACRO:LD A,(HL):INC HL:ENDM GENASN MACRO:LD D,=1.h:CALL GENASN_:ENDM GENXX MACRO:LD D,=1.h:CALL GENXX_:ENDM INISIN MACRO:LD D,=1.h:CALL INISIN_:ENDM PUSHA MACRO:PUSH AF,BC,DE,HL:ENDM POPA MACRO:POP HL,DE,BC,AF:ENDM POPLD MACRO:POP HL:LD (#2222),HL:ENDM DEPSCRA MACRO:LD HL,=1:LD DE,=2:LD BC,=3:SCF:CALL _DEPSCR:ENDM DEPSCR MACRO:LD HL,=1:LD DE,=2:LD BC,=3:OR A:CALL _DEPSCR:ENDM LDHLDE MACRO:LD H,D:LD L,E:ENDM LDDEHL MACRO:LD D,H:LD E,L:ENDM LDCOUNT MACRO:LD BC,=1.b*256+((=1.b+255).h)+=1.h:ENDM LOOP MACRO:DJNZ =1:DEC C:JRNZ =1:ENDM[свернуть]
SjASMplus может и с ошибками ))
Код:MACROS_MAC_INCLUDED MACRO PUSHA : PUSH AF,BC,DE,HL : ENDM MACRO POPA : POP HL,DE,BC,AF : ENDM ;ISR_ENTER OLD_SP,JUMP_ADR,ISR_SP MACRO ISR_ENTER OLD_SP_, JUMP_ADR_, ISR_SP_ EX (SP),HL : LD (OLD_SP_),HL : EX (SP),HL : INC SP: INC SP : LD (JUMP_ADR_),SP LD SP,ISR_SP_ : PUSH AF : EXX : EXA : PUSHA : PUSH IX,IY : LD A,(PAGE) : PUSH AF ENDM ;ISR_LEAVE MACRO ISR_LEAVE : POP AF : CALL LKL : POP IY,IX : POPA : EXX : EXA : POPA : ENDM MACRO GETA : DEC SP : POP AF : ENDM MACRO NEGHL : XOR A : SUB L : LD L,A : SBC A,H : SUB L : LD H,A : ENDM MACRO NEGDE : XOR A : SUB E : LD E,A : SBC A,D : SUB E : LD D,A : ENDM MACRO NEGBC : XOR A : SUB C : LD C,A : SBC A,B : SUB C : LD B,A : ENDM MACRO STA : LD (HL),A : INC HL : ENDM MACRO STDE : LD (HL),E : INC HL : LD (HL),D : INC HL : ENDM MACRO STBC : LD (HL),C : INC HL : LD (HL),B : INC HL : ENDM MACRO STB b1 : LD (HL),b1 : INC HL : ENDM MACRO STW w1 : STB low w1 : STB high w1 : ENDM MACRO LODBC : LD C,(HL) : INC HL : LD B,(HL) : INC HL : ENDM MACRO LODDE : LD E,(HL) : INC HL : LD D,(HL) : INC HL : ENDM MACRO LODA : LD A,(HL) : INC HL : ENDM MACRO GENASN h1 : LD D, high h1 : CALL GENASN_ : ENDM MACRO GENXX h1 : LD D, high h1 : CALL GENXX_ : ENDM MACRO INISIN h1 : LD D, high h1 : CALL INISIN_ : ENDM MACRO POPLD : POP HL : LD (#2222),HL : ENDM MACRO DEPSCRA a1, a2 ;, a3 : LD HL,a1 : LD DE,a2 ; : LD BC,a3 : SCF : CALL _DEPSCR : ENDM MACRO DEPSCR a1, a2 ;, a3 : LD HL,a1 : LD DE,a2 ; : LD BC,a3 : OR A : CALL _DEPSCR : ENDM MACRO LDHLDE : LD H,D : LD L,E : ENDM MACRO LDDEHL : LD D,H : LD E,L : ENDM MACRO LDCOUNT a1 : LD BC, ( low a1 )*256+( high (( low a1 )+255)+(high a1) :ENDM MACRO LOOP retadr : DJNZ retadr : DEC C : JRNZ retadr : ENDM[свернуть]
Тут есть моменты:
1) Ужасм не умеет постопределений, поэтому скажем POPA, PUSHA надо вытащить вверх.
2) .h , .b и т.п. выполняются через функции high и low
3) Да х.з.
В третьих - условная компиляция.
У ужасма используется раздельное поле адресов меток и определений и те условия которые ZASM использует для меток - SjASMplus будет пытаться применить для определений. Более того аналог условия существования метки появился только в чешской версии ужасма 1.18.2
ZASM
SjASMplus 1.18.2Код:IFNDEF PG0 INCLUDE "E:PAGES.asm" ENDIF
Ну и в четвёртых ручками подправляем засмовские сокращённые мнемоники в человеческий вид. ))Код:IFN exist PG0 INCLUDE "PAGES.asm" ENDIF
А да ещё забыл - в начало основного файла добавить device zxspectrum128 а в конец сохранение файла в нужном формате ))





Ответить с цитированием