Список форумов Scenergy Web Resource Scenergy Web Resource
8-bit imagination. Post your mind!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Z80ASM, Z80 cross-platfrom macro assembler with preprocessor
На страницу Пред.  1, 2
 
Начать новую тему   Ответить на тему    Список форумов Scenergy Web Resource -> News Discussion
Предыдущая тема :: Следующая тема  
Автор Сообщение
aprisobal



Зарегистрирован: 03.10.2004
Сообщения: 14
Откуда: Беларусь, Минск

СообщениеДобавлено: 27.11.2004 02:52:43    Заголовок сообщения: Ответить с цитатой

Ещё один буржуйский кросс-ассемблер - PASMO (http://www.arrakis.es/~ninsesabe/pasmo/). Поддерживает и локальные метки, и макросы, и пр. полезные фичи. Судя по форумам WOS на нём пишут большинство буржуев (он даже умеет в .tap собирать(!)).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
tasman^mc
Гость





СообщениеДобавлено: 29.11.2004 14:35:00    Заголовок сообщения: Ответить с цитатой

всё равно,какой-то он не доделанный..
куда удобней под эмулем спековкий асм юзать.
Вернуться к началу
Rob F.



Зарегистрирован: 22.05.2005
Сообщения: 3
Откуда: Kiev, Ukraine

СообщениеДобавлено: 22.05.2005 03:43:28    Заголовок сообщения: ASAM Compiler v.001.023B By Rob F. / Entire Group Ответить с цитатой

Может вам этот асм понравится ??? Кстати, он велеколепно создаёт вяческие TAP или TRD, и может свободно в них писать данные, файлы ... Велеколепно создаются любые BASIC лоадеры, если, конечно автор программы имеет голову ... Так же можно не отходя от кассы любую вашу работу запаковать ...

http://www.entire.nm.ru/coding/asam.zip

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

Код:


Там ещё с кодировкой проблемы, ну хоть так ...

              --- ASAM Compiler ---

 Version .................................... 001.023B
 DATE .................................... 18 sep 2004
 Written By .................... Rob F. / Entire Group

 Use Info #1:
  asam.exe demo.az8 z80.cmd
  +------+ +------+ +-----+
     ¦        ¦        +---> Файл списка комманд для Z80
     ¦        +------------> То что будем компилировать
     +---------------------> Загадочное название компилятора
  z80.cmd .................. Тут лежат наши родные команды Z-ника

 Use Info #2:
  asam.exe demo.ac5 c51.cmd
  +------+ +------+ +-----+
     ¦        ¦        +---> Файл списка комманд для Intel-51
     ¦        +------------> То что будем компилировать
     +---------------------> Загадочное название компилятора
  c51.cmd .................. Тут лежат конченные команды Intel-ки

 Use Info #3:
  asam.exe demo.az8
  +------+ +------+
     ¦        +------------> То что будем компилировать
     +---------------------> Загадочное название компилятора
! Если не указывать список команд, то работает только "LoadCMD" !


           --- Описание ASAM-команд для "z80.cmd" ---

ORG nn
 ... nn = Адрес компиляции (0..65535)

ORG nn,mm
 ... nn = Адрес компиляции (0..65535)
 ... mm = Адрес будет делиться на это число (ALIGN)

ORG nn:mm
 ... nn = Адрес компиляции (0..65535)
 ... mm = Страница (0..63)

PAGE nn
 ... mm = Страница (0..63)

IntMode.ON
 ... Включение отбрасывания запятой, - для совместимости с TASM by RST 7

IntMode.OFF
 ... Все операции будут проводиться с учётом плавоющей точки

Include 
 ... Откомпилировать файл, количество вложений зависит от памяти в ПиЦи
 ...  = Имя файла

IncBIN 
 ... Загрузить файл данных (BIN)
 ...  = Имя файла

SaveBIN ,nn,mm
 ... Сохранить файл данных (BIN)
 ...  = Имя файла
 ... nn = Адрес данных
 ... mm = Размер

IncBIN ,
 ... Загрузить файл данных (BIN) из модуля TRD или ZX
 ... 1 = Имя файла
 ... 2 = TRD или ZX имя внутри модуля

IncTRD ,
 ... Загрузить файл данных (BIN) из модуля TRD
 ... 1 = Имя файла
 ... 2 = Имя внутри модуля TRD

IncZX$ 
 ... Загрузить файл данных (BIN) из модуля ZX
 ... 1 = Имя файла

EquSize 
 ... Присвоить последней метке размер файла
 ...  = Имя файла

EquSizeZX$ 
 ... Присвоить последней метке размер файла из ZX модуля
 ...  = Имя файла

EquStartZX$ 
 ... Присвоить последней метке начало файла из ZX модуля
 ...  = Имя файла

EquSizeTRD ,
 ... Присвоить последней метке размер файла из TRD модуля
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TRD модуле

EquStartTRD ,
 ... Присвоить последней метке начало файла из TRD модуля
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TRD модуле

EquLastSize
 ... Присвоить последней метке размер последнего загружаемого файла

EquLastStart
 ... Присвоить последней метке начало последнего загружаемого файла

LoadTRD ,
 ... Загрузить файл в адрес указанный в файле TRD модуля
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TRD модуле

LoadZX$ 
 ... Загрузить файл в адрес указанный в файле ZX модуля
 ...  = Имя файла на ПиЦи

Load ,nn
 ... Загрузить файл данных
 ...  = Имя файла на ПиЦи
 ... nn = Адрес

SaveTRD ,,nn,mm
 ... Сохранить или перезаписать данные в файл TRD модуля
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TRD модуле
 ... nn = Адрес
 ... mm = Размер

SaveAddTRD ,,nn,mm
 ... Сохранить или дописать данные в файл TRD модуля
 ... Данные дописываются в конец файла по секторам
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TRD модуле
 ... nn = Адрес
 ... mm = Размер

DB "
 ... Через зяапятую лепите числа не больше чем BYTE
 EXAM:
  >> ORG 0
  >> DB 'Data'+1,2
 MEM 00000000: 044 061 074 062 002

DW "
 ... Через зяапятую лепите числа не больше чем WORD
 EXAM:
  >> ORG 0
  >> DW 'Data'+1,2
 MEM 00000000: 044 000 061 000 074 000 062 000 002 000

DD "
 ... Через зяапятую лепите числа не больше чем DWORD
 EXAM:
  Ну думаю вы сами догадались ...

DS nn
 ... Заполнит нулями память, не лепите размер меньше нуля, - на вас обидятся
 ... nn = Размер
 EXAM:
  >> ORG 0
  >> DS 3
 MEM 00000000: 000 000 000

DT nn
 ... Перевести DWORD или метку в STRING, то есть пропишет его в памяти
 ... nn = DWORD Data
 EXAM:
  >> ORG 0
  >> DT 3345                    ;-3345 Будет обижаться на такое !!!
 MEM 00000000: 033 033 034 035

EQU nn
 ... Присвоить последней метке значение nn
 ... nn = Значение
 EXAM:
  >>       ORG 0
  >> M1    EQU $
  >>       DB M1
  >>       EQU 33
  >>       DB M1
  >>       EQU 213H
  >>       DW M1
  >>       EQU -110010100101100101B
  >>       DD M1
 MEM 00000000: 000 021 013 002 09B 0D6 0FC 0FF

EQU (nn)
 ... То же самое, только синтаксис записи в скобках, сделано из-за
 ... команд имеющие синтаксис в скобках, например: LD (IX+(2+88)),44

DATA n
 ... Битовая адресация для Intel-ов из данных, если попадает в это поле
 ... n = 000H..0FFH
 EXAM:
  >> M1  DATA 20H               ;M1=20H
  >>                            ;M1.0=$20000H First Byte the BIT ADDRESES
  >>                            ;M1.1=$20001H First Byte the BIT ADDRESES
  >>                            ;M1.2=$20002H First Byte the BIT ADDRESES
  >>                            ;M1.3=$20003H First Byte the BIT ADDRESES
  >>                            ;M1.4=$20004H First Byte the BIT ADDRESES
  >>                            ;M1.5=$20005H First Byte the BIT ADDRESES
  >>                            ;M1.6=$20006H First Byte the BIT ADDRESES
  >>                            ;M1.7=$20007H First Byte the BIT ADDRESES

BIT n
 ... Битовая адресация для Intel-ов из данных
 ... n = 000..0FF
  M1     BIT 20H                ;M1=$20020H First Byte the BIT ADDRESES

SetTextXOR "
 ... Всякая информация в кавычках будет XOR-иться по таблице, которую вы
 ... можете задать этой командой. Эта комана создана для совмещения различных
 ... кодировок удобных для вас. Например у вас есть шрифт, где код буквы "A"
 ... не 65 а 32, вы можете без труда создать таблицу или пару его элементов
 ... записав на место 65-ой ячейки таблицы 32, тем самым заставите компилятор
 ... заменять все буквы "A"-65 на " "-32, вот и все примудрости.
 EXAM:
  >> SetTextXOR '0',0,1,2,3,4,5,6,7,8,9      ;'0'=48 В будущем "0" будет 0
  >> DB ' 0123456789'
  >> SetTextXOR '0',0,1,2,3,4,5,6,7,8,9      ;'0'=0 Ничего не даст, поскольку
  >>                                         ;    ноль в кавычка уже ноль, но
  >>                                         ;    как будут мучаться другие
  >> DB ' 012'
 MEM 00000000: 020 000 001 002 003 004 005 006 007 008 009 020 000 001 002

ResetTextXOR
 ... Збросить состояние таблицы в исходное положение

LoadTextXOR 
 ... Загрузить таблицу из файла (Размер должен быть 256 Bytes)
 ...  = Имя файла на ПиЦи

LoadCMD 
 ... Загрузить список команд, я свойт Wild Speccy так пишу, прыгая из ZX-а в
 ... систему Intel-а
 ...  = Имя файла на ПиЦи
 EXAM:
  >> LoadCMD 'c51.cmd'
  >> MOV A,#3                ;Intel Instruction !!!
  >> LoadCMD 'z80.cmd'
  >> LD A,3                  ;Z80 Instruction !!!
 MEM 00000000: 074 003 03E 003

SaveLabels 
 ... Сохранить в файл все метки собранные на данный момент, а так же макросы
 ...  = Имя файла на ПиЦи

SaveAllMEM ,
 ... Сохранить в два файла данные и маску на всё что вы компилировали. В
 ... первом файле будут храниться данные, во втором битовая маска.
 ... 1 = Имя файла на ПиЦи Binary DATA ......... 4194304 Bytes (64*65536)
 ... 2 = Имя файла на ПиЦи Mask For DATA ....... 524288 Bytes (64*65536/8)

SaveHEX 
 ... Сохранить в HEX вормате всю текущую страницу с адреса 0 по 65535
 ...  = Имя файла на ПиЦи

SaveHEX ,nn,mm
 ... Сохранить в HEX вормате
 ...  = Имя файла на ПиЦи
 ... nn = Адрес
 ... mm = Размер

SaveHEX ,nn,mm,ss
 ... Сохранить в HEX вормате
 ...  = Имя файла на ПиЦи
 ... nn = Адрес
 ... mm = Размер
 ... ss = Количество байт в линии HEX-а       ;See Stupid Intel

Align nn
 ... Текущий адрес будет делиться на nn без остатка, до адреса заполнет нулями
 ... nn = Allign Data

OrgALI nn
 ... Текущий адрес будет делиться на nn без остатка
 ... nn = Allign Data

PUSHA
 ... Сохранить все регистры Z80, - редко, но метко

POPA
 ... Восстановить все регистры Z80, - редко, но метко

CreateImage 
 ... Создать модуль TRD или TAP
 ...  = Имя файла на ПиЦи (IF "*.TRD"=ImageTRD ELSE "*.TAP"=ImageTAP)

CreateImage ,
 ... Создать модуль TRD или TAP
 ... 1 = Имя файла на ПиЦи
 ... 2 = Написать слово "TRD" или "TAP", для определения ваших потребностей

SaveAddTAP ,,nn,mm
 ... Сохранить файл в TAP модуль
 ... 1 = Имя файла на ПиЦи
 ... 2 = Имя файла в TAP модуле
          "*.P" Basic Data "*"=FileName
          "*.N" Number Data "*"=FileName
          "*.C" Code Data "*"=FileName
          "*.B" Base Data "*"=FileName
          "*.D" Block "*"=[0..255] Type
 ... nn = Адрес
 ... mm = Размер

SaveAddTAP ,ss,nn,mm
 ... Сохранить файл в TAP модуль
 ...  = Имя файла на ПиЦи
 ... nn = Адрес
 ... mm = Размер
 ... ss = Тип блока [0..255]

ORGOF nn,mm
 ... Виртуальный адрес, компилироваться будет в прежнее место, а метки смещены
 ... Если nn=mm, то виртуальность отменяется
 ... nn = Virtual Address               ;$=Current Virtaul Address
 ... mm = Real Address                  ;$$=Current Real Address

JMP s
 ... if (-128 >= s >= +127) then JR else JP

JZ s
 ... if (-128 >= s >= +127) then JR Z else JP Z

JNZ s
 ... if (-128 >= s >= +127) then JR NZ else JP NZ

JC s
 ... if (-128 >= s >= +127) then JR C else JP C

JNC s
 ... if (-128 >= s >= +127) then JR NC else JP NC

DSQ.Pack ,,,,,,_                 ;Packing DSQ Method
 ... Запаковать данные методом DSQ с текущего адреса
 ... 1 = StartAddr For Depacker
 ... 2 = Buffer For Depacker
 ... 3 = Decrunch To This ADDR
 ... 4 = AutoStart Execute
 ... 5 = Size For Packing
 ... 6 = "Y"/"N"-DePacker
 ... 7 = PackMode [1..7] Else Crash !!!

DSQ.Pack _                             ;Packing DATA
 ... Запаковать данные методом DSQ с текущего адреса без депакера
 ... Команда для сумасшедших !!!
 ... Текущий адрес будет сразу после последнего запакованного байта
 ... 1 = Размер пакуемых данных

DSQ.DePacker
 ... Распаковщик в виде макроса написанный на ассемблере для распаковки
 ... запакованных данных методом DSQ
 ... HL = (End Of Packed Data)-1
 ... DE = Start ADDR For Decrunch


MoveMemAA ,:,
 ... Move Memory Block From ASAM To ASAM
 ... 1 = From ADDR
 ... 2 = To ADDR
 ... 3 = Page To ADDR
 ... 4 = Size

MoveMemAA ,,
 ... Move Memory Block From ASAM To ASAM Page=Current
 ... 1 = From ADDR
 ... 2 = To ADDR
 ... 3 = Size

EmlZX.LoadTRD ,n
 ... Загрузить во втроенный эмулятор TRD модуль
 ...  = Имя файла на ПиЦи
 ... n = [0..3] Drive

EmlZX.Key 
 ... Добавить очередную инструкцию для эмуляции нажатия клавиш в эмуляторе
 ...  = Data
 ... Смотри примеры, и прозревай !!!

EmlZX.KeyCLR
 ... Убрать все инструкции о нажтий клавиш в эмуляторе

EmlZX.KeyAdd 
 ... EmlZX.KeyAdd = EmlZX.Key

MoveMemZA :,,
 ... Move Memory Block From ZX To ASAM
 ... 1 = From ZX ADDR
 ... 2 = From ZX Page
 ... 3 = To ASAM ADDR
 ... 4 = Size

MoveMemAZ ,:,
 ... Move Memory Block From ASAM To ZX
 ... 1 = From ASAM ADDR
 ... 2 = To ZX ADDR
 ... 3 = To ZX Page
 ... 4 = Size

PeekZB =(:)
 ... Get BYTE From ZX Memory
 ... 1 = Label
 ... 2 = From ZX ADDR
 ... 3 = From ZX Page

PeekZ2 =(:)
 ... Get WORD From ZX Memory
 ... 1 = Label
 ... 2 = From ZX ADDR
 ... 3 = From ZX Page



PeekAB =()
 ... Get BYTE From ASAM Memory
 ... 1 = Label
 ... 2 = From ASAM ADDR

PeekAW =()
 ... Get WORD From ASAM Memory
 ... 1 = Label
 ... 2 = From ASAM ADDR


PokeZB (:)=
 ... Put BYTE To ZX Memory
 ... 1 = From ZX ADDR
 ... 2 = From ZX Page
 ... 3 = Label

PokeZW (:)=
 ... Put WORD To ZX Memory
 ... 1 = From ZX ADDR
 ... 2 = From ZX Page
 ... 3 = Label

PokeAB ()=
 ... Put BYTE To ASAM Memory
 ... 1 = From ASAM ADDR
 ... 2 = Label

PokeAW ()=
 ... Put WORD To ASAM Memory
 ... 1 = From ASAM ADDR
 ... 2 = Label

RunEmulZX
 ... Запустить эмулятор Speccy

RunEmulZXne
 ... Запустить эмулятор Speccy только если нет ошибок до данного момента



               --- Simple Mcros ---

;--- EXAM 001 ... -----------------------------------------
       .Fill                 ;"Fill" - Macros Name
        LD HL,@.0            ;First Parametr
        LD DE,@.0+1          ;First Parametr + 1
        LD BC,@.1-1          ;Second Parametr - 1
        LD (HL),@.2          ;Third Parametr
        LDIR
       ..

        ORG 32768

        XOR A
        Fill 16384,6144,A

;--- EXAM 002 ... -----------------------------------------
        .33                  ;Repeat
         DB 'Hello World '
         DD @.C*2            ;Counter 1..33
        ..

;--- EXAM 003 ... -----------------------------------------
        .3                   ;Repeat
         LD HL,@.            ;HL = START Macro Address
         LD DE,@..           ;HL = END Macro Address
        ..

;--- EXAM 004 ... -----------------------------------------
        .Somthing
         ADD A,@.0           ;ADD First Parametr
         JZ @..              ;Exit From Macro
         SUB @.1             ;SUB Second Parametr
         DJNZ @.             ;Go To Start Macro
        ..

        ORG 32768

        XOR A
        LD B,10
        LD C,0001010B
        Somthing C,3

;--- EXAM 005 ... -----------------------------------------
        .FOR = TO         ;Create Macro FOR ?=? TO ?
         LD (@M1+1),HL
         LD HL,@.1
         LD @.0,HL
         LD HL,@.2
         PUSH HL
         LD HL,@..
         PUSH HL
@M1
         LD HL,0
        ..


        .NEXT               ;Create NEXT ?
         LD (@HL+1),HL
         LD (@DE+1),DE
         POP HL
         LD (@JUMP+1),HL
         POP DE
         LD (@SP+1),SP
         PUSH HL
         PUSH DE


         LD HL,@.0
         INC HL
         LD @.0,HL
         AND A
         SBC HL,DE
@HL      LD HL,0
@DE      LD DE,0
@JUMP    JP C,0
@SP      LD SP,0
        ..


        ORG 0
        LD HL,123
        LD (O),HL
        FOR (N)=1 TO (O)     ;Use FOR
         NOP
         NOP
         NOP
        NEXT (N)             ;Use NEXT

N:      DW 0
M:      DW 0
O:      DW 0

;--- EXAM 006 ... -----------------------------------------
        .Something_          ;"_" Macro WithOut Auto VARs
         NOP
        ..

        ORG 0
        Something            ;Worked
        Something 1          ;Generated ERROR

;--- EXAM 007 ... -----------------------------------------
        .123
         DB @.C*33           ;@.C - Counter [1...123]
        ..

;--- EXAM 008 ... -----------------------------------------
         ORG 32768
EXECUTE  EQU 25000
         DI
         LD HL,PROG.S
         LD DE,EXECUTE
         LD BC,PROG.E-PROG.S
         PUSH DE
         LDIR
         RET
PROG.S
         ORGOF EXECUTE,$$
         CALL CLEAR          ;CLEAR=25004
         HALT                ;Only Reset Save Z80 !!!
CLEAR
         LD HL,16384
         LD DE,16385
         LD BC,6144
         LD (HL),L
         LDIR
         LD (HL),7*8+7
         LD BC,767
         LDIR
         RET
         ORGOF $$,$$
PROG.E

;--- EXAM 009 ... -----------------------------------------
    ;Emulator By Rob F. / Entire Group
    ;Emulated ALL (100%) Z80 Instructions With Secret CMD
    ;Fasted On The Earth !!!
    ;Tested On CPU 0133 - 3.7*50  INT Of Speccy Per Second
    ;Tested On CPU 0266 - 6.3*50  INT Of Speccy Per Second
    ;Tested On CPU 2400 - 36.9*50 INT Of Speccy Per Second
    ;Люблю сходить сума, особенно ради великого Speccy

         ORG 16384
         DI
         LD HL,16384
         LD DE,16385
         LD BC,65536            ;=0 !!!
         LDIR
         EQU ZX.R.Break=$       ;IF = -1 Then NoBreakPoint
         EQU ZX.R.PC=16384

         MoveMemAZ 0,0:16,16384
         RunEmulZXne            ;Run Emulator
                                ;Breaked After LDIR = DI !!!
                                ;Worked And Not Reseted !!!

         MoveMemZA 0:16,0,65536 ;Save And Look All Memory =)

;--- EXAM 010 ... -----------------------------------------
        ORG 25000
        DI
        LD HL,DePack1.En-1
        LD DE,16384
        CALL UNPACK                     ;UnPack To Screen
        XOR A
        OUT (254),A
        HALT
UNPACK
        DSQ.DePacker                    ;Compile DSQ.Packer

        IncBin "pic.trd","6omj.C"       ;Load Any Picture
        ORG $-ASAM.Load.Size
        DSQ.Pack ASAM.Load.Size         ;Pack Data
DePack1.En                              ;=After Packed Data !!!

        CreateImage "test.trd"          ;Create Image On The Stupid PC
        SaveTRD 'test.trd','1.C',25000,$-25000 ;Save Data !!!

        ;Enjoy !!!



               --- ASAM Secrets ---

;--- EXAM 001 ... -----------------------------------------
        ORG 65536-(End-Start)
Start:  DB 'ZX-Spectrum Is The Best !!!'
End:                                            ;=65536

;--- EXAM 002 ... -----------------------------------------
M1      EQU 24H.4               ;M1=36.400
        EQU 010B.31             ;M1=2.310

;--- EXAM 003 ... -----------------------------------------
M1      EQU 24H.4               ;M1=36.400
        EQU M2=M1               ;M2=M1 ... =36.400
        EQU 22                  ;M2=22

;--- EXAM 004 ... -----------------------------------------
        PUSH HL DE BC           ;No Comments
        POP BC DE HL            ;No Comments


_________________
By Rob F. / Entire Group ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
aprisobal



Зарегистрирован: 03.10.2004
Сообщения: 14
Откуда: Беларусь, Минск

СообщениеДобавлено: 23.05.2005 16:17:33    Заголовок сообщения: Ответить с цитатой

На правах рекламы. SjASMPlus - http://zx.pk.ru/showthread.php?t=447&page=1. Куча всяческих уникальных фич и БЕШЕННАЯ скорость компиляции - 250000 различных строк кода компилируется за 1.15 секунды! Этот асм создан для серьёзных(ёмких) проектов и для серьёзных кодеров!
_________________
ATM-Turbo 1/512кб/AY/Turbo(up 88000t)/External floppy(1)/LED R/W of floppy/HW pause/Color monitor
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Scenergy Web Resource -> News Discussion Часовой пояс: GMT + 4
На страницу Пред.  1, 2
Страница 2 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group