|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
ок, поглядел - вроде в zmac такой же if...else...endif - можно сделать совместимо также zmac поддерживает макросы вот в таком виде: | | | | Code: 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
| | | | |
можно сделать также
|
25 Dec 2020 05:25 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Макросы можно прям позаимствовать у MA80
|
26 Dec 2020 21:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
в масме всё через задницу - я лучше так напишу с нуля
|
26 Dec 2020 21:16 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
как это через задницу? так то там самые навороченные макросы. навороченее некуда: | | | | Code: 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. на макросах ООП сварганили.
|
26 Dec 2020 21:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
самые навороченные ненужны - нужны практичные
|
26 Dec 2020 21:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
Наверное макросы буду делать в 3 этапа: 1) макросы без аргументов 2) макросы с аргументами 3) макросы с аргументами и локальными метками Локальные метки в таком виде не поддерживаются в zmac - соответственно, чтобы сохранить совместимость между zmac и OrgAsm, придётся также поправить и zmac P.S. Ниже Sayman предложил поддержать локальные метки в макросах тем же способом как они уже задействованы в OrgAsm - с точками:
|
09 Jan 2021 21:25 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
думаю лучше сохранять стилистику Orgasm`а и делать локальные метки через точку.
|
10 Jan 2021 01:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22621 Location: Silicon Valley
|
а какие-то другие ассемблеры это поддерживают? P.S. сейчас локальные метки в OrgAsm используются так: | | | | Code: Работа с локальными метками. Имена локальных меток должны начинаться с точки ".". Область "видимости" локальных меток распрост- раняется до следующей обычной (не локальной) метки.
Пример 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. Выглядеть это будет примерно так: превратится в: P.P.P.S. В zmac локальные метки в макросах должны начинаться с ? и должны быть перечислены после аргументов в объявлении макроса - вот код, который только что попробовал: | | | | Code: 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 разрешает метки начинающиеся с точки, но они считаются обычными)
|
10 Jan 2021 04:06 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
ну я на пц использую sjasmplus. локальные метки через точку у меня повсеместно. до этого был sjasm, без плюсов. с негно и рисовался когда то orgasm. точнее, возможно, с asmplus, который тогда ещё под досом бегал, но потом вырос в sjasm и т.д. на zx и не только является ныне стандартом.
|
10 Jan 2021 07:39 |
|
|
Who is online |
Users browsing this forum: No registered users and 32 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|