Цитата Сообщение от krt17 Посмотреть сообщение
недавно столкнулся с необходимостью лока, это когда процедура запрещает повторный вызов самой себя или работу с областью памяти.
Для однократного вызова процедуры можно глушить ретурном.
Код:
proc_  push af
       ld a,#C9   ; 'ret'
       ld (proc_),a    
       pop af          ; 7 байтов с push , 5 без них
       ...
Код:
      
proc_  ld hl,proc_   ; или если например hl не жалко
       ld (hl),#C9
       ...
или можно встроить семафор в тело программы
Код:
proc_  ld a,1
       or a
       ret z         ; jr z, exit
       xor a
       ld (proc_+1),a
       ...
- - - Добавлено - - -

Ещё пришло на ум . Если однократных вызовов надо много, то можно сделать процедуру залочивания.
Код:
       ; процедура лока
locker_   ex (sp),hl  ; после первого применения поставит заглушку 'ret'
          push hl     ; по вызывавшему адресу
          dec hl
          dec hl
          dec hl
          ld (hl),#C9
          pop hl
          ex (sp),hl
         ret
         
        ; применение
        
proc_   call locker_  ; 3 байта на вызов
        ...