OrgAsm

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: OrgAsm

Post by Shaos »

Sayman wrote:ну как пример условия:

Code: Select all

debug = 1
....
some code
if debug = 1
   code
endif
если сделать debug = 0 или его убрать совсем, то код между if/endif в компиляцию не попадает. zmac тоже так умеет.
ок, поглядел - вроде в zmac такой же if...else...endif - можно сделать совместимо

также zmac поддерживает макросы вот в таком виде:

Code: Select all

MACROS
       The following defines a macro named m with  zero  or  more
       formal parameters p1, p2, ..., pn, zero or more local sym-
       bols ?s1, ?s2, ..., ?sm, and body b1, b2, ...:

              m macro p1, p2, ..., pn, ?s1, ?s2, ..., ?sm

                b1

                b2

                ...

                endm
можно сделать также
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: OrgAsm

Post by Sayman »

Макросы можно прям позаимствовать у MA80
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: OrgAsm

Post by Shaos »

в масме всё через задницу - я лучше так напишу с нуля :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: OrgAsm

Post by Sayman »

как это через задницу? так то там самые навороченные макросы. навороченее некуда:

Code: Select all

Title	ShellTest	~PSW SOFT~

Ext Type

Maclib	MACLIB.INC

Include OBJECTS.INC
Include	CASE.INC
INCLUDE	KEYS.INC
INCLUDE	EVENTS.INC
INCLUDE	VIEWS.INC
INCLUDE	APP.INC

cmNone equ 0

Start::	Call	HardInit##
	JP	BEGIN

MainMenu:
 SubMenu '~T~ools',10
   MenuItem '~C~alculator...','^C',kbCtrlC,cmCalculator,11
   MenuItem '%~D~esigner...',,,cmCalcDesigner,13
  EndMenu
 SubMenu '~O~ptions',12
   MenuItem '%~C~olors...',' ',,cmColors,14
   MenuItem '%~M~ouse speed',,,cmMouse,15
  MenuLine
   MenuItem '%~O~pen...',,,cmOpenSetup,16
   MenuItem '%~S~ave','CALC.CFG',,cmSaveSetup,17
   MenuItem '%Save ~a~s...',,,cmSaveAsSetup,18
  EndMenu
 SubMenu '~W~indow',19
   MenuItem '~D~rag','^M',kbCtrlD,cmMove,66
   MenuItem '~R~esize','^R',kbCtrlR,cmResize,67
   MenuItem '~N~ext','^N',kbCtrlN,cmNext,63
   MenuItem '~P~revious','^P',kbCtrlP,cmPrev,64
   MenuItem '~Z~oom','^Z',kbCtrlZ,cmZoom,65
   MenuItem '~C~lose','^C',kbCtrlC,cmClose,62
  MenuLine
   MenuItem 'Close ~a~ll',,,cmCloseAll,63
   MenuItem '~A~bout me',,,cmAboutMe,63
  EndMenu
 MenuItem '~Q~uit','-^\',1ch,cmQuit,19
EndMenu
загляни в исходники профинской либы ProfiVision. на макросах ООП сварганили.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: OrgAsm

Post by Shaos »

самые навороченные ненужны - нужны практичные
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: OrgAsm

Post by Shaos »

Наверное макросы буду делать в 3 этапа:

1) макросы без аргументов

Code: Select all

m macro
  something
  something
  endm
2) макросы с аргументами

Code: Select all

m macro a1, a2, a3
  something a1
  something a2
  something a3
  endm
3) макросы с аргументами и локальными метками

Code: Select all

m macro a1, a2, a3
  local l1,l2
  something a1
l1:
  something a2
l2:
  something a3
endm
Локальные метки в таком виде не поддерживаются в zmac - соответственно, чтобы сохранить совместимость между zmac и OrgAsm, придётся также поправить и zmac

P.S. Ниже Sayman предложил поддержать локальные метки в макросах тем же способом как они уже задействованы в OrgAsm - с точками:

Code: Select all

m macro a1, a2, a3
  something a1
.l1:
  something a2
.l2:
  something a3
endm
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: OrgAsm

Post by Sayman »

думаю лучше сохранять стилистику Orgasm`а и делать локальные метки через точку.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: OrgAsm

Post by Shaos »

Sayman wrote:думаю лучше сохранять стилистику Orgasm`а и делать локальные метки через точку.
а какие-то другие ассемблеры это поддерживают?

P.S. сейчас локальные метки в OrgAsm используются так:

Code: Select all

Работа с локальными метками. Имена локальных меток
должны начинаться с точки ".". Область "видимости" локальных меток распрост-
раняется до следующей обычной (не локальной) метки.

Пример 1:
~~~~~~~~~
	ld	hl,Mess1.Text
	ld	c,5Ch
	rst	10h
	;
	ld	hl,Mess2.Text
	ld	c,5Ch
	rst	10h
	;
	ld	bc,0041h
	rst	10h
	ret

Mess1:	db	"Text 1 ..."
.Text:	db	"Hello world !",0Dh,0Ah,0

Mess2:	db	"Text 2 ..."
.Text:	db	"Hello world ! ;)",0Dh,0Ah,0

  В данном примере показан доступ к локальным меткам по их полным именам.


Пример 2:
~~~~~~~~~
Test1:	ld	b,16
.loc1:	ld	a,(hl)
	or	a
	ret	z
	inc	hl
	djnz	.loc1
	ret

Test2:	ld	b,32
.loc1:	ld	a,(hl)
	or	a
	ret	z
	inc	hl
	djnz	.loc1
	ret

  Локальные метки .loc1 подпрограмм Test1 и Test2 не будут конфликтовать
между собой, поскольку их разделяет обычная (не локальная) метка Test2.
видимо внутри к имени локальной метки добавляется имя предыдущей обычной метки - при подстановке макросов такой предыдущей метки может не оказаться - придётся генерировать фейковые метки для каждого инстанса макроса, но наверное таки да - ты прав, такая реализация была бы логичнее и проще

P.P.S. Выглядеть это будет примерно так:

Code: Select all

m macro a1, a2, a3
  something a1
.l1:
  something a2
.l2:
  something a3
endm

  m 1,2,3
  m 4,5,6
  m 7,8,9
превратится в:

Code: Select all

m001 ; generated label for 1st instance of macro m
  something 1
.l1
  something 2
.l2
  something 3
m002 ; generated label for 2nd instance of macro m
  something 4
.l1
  something 5
.l2
  something 6
m003 ; generated label for 3rd instance of macro m
  something 7
.l1
  something 8
.l2
  something 9
P.P.P.S. В zmac локальные метки в макросах должны начинаться с ? и должны быть перечислены после аргументов в объявлении макроса - вот код, который только что попробовал:

Code: Select all

  18:                   test    macro   a1, a2, ?l1
  19:                           ld      hl,a1
  20:                   ?l1     ld      c,a2
  21:                           rst     10h
  22:                           jr c,?l1
  23:                           endm
  24:                   
  25:                   ;code of program
  26:                   
  27:   8100            START:
  28:                   
  29:   8100                    test    msg,5ch
  29:   8100  211D81            ld      hl,msg
  29:   8103  0E5C      ?c0000  ld      c,5ch
  29:   8105  D7                rst     10h
  29:   8106  38FB              jr c,?c0000
  29:   8108                    endm
  29:                   
  30:   8108                    test    msg+10,5ch
  30:   8108  212781            ld      hl,msg+10
  30:   810B  0E5C      ?c0001  ld      c,5ch
  30:   810D  D7                rst     10h
  30:   810E  38FB              jr c,?c0001
  30:   8110                    endm
надо будет отменить обязательное указание локальных меток в строке с аргументами и поддержать локальные метки начинающиеся с точки (в данный момент zmac разрешает метки начинающиеся с точки, но они считаются обычными)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: OrgAsm

Post by Sayman »

ну я на пц использую sjasmplus. локальные метки через точку у меня повсеместно. до этого был sjasm, без плюсов. с негно и рисовался когда то orgasm. точнее, возможно, с asmplus, который тогда ещё под досом бегал, но потом вырос в sjasm и т.д. на zx и не только является ныне стандартом.