недавно чета мысля в голову стукнула как можно сделать поддержку семафоров без запрета прерываний достаточно быстрым методом.
главная задача- в один шаг изменить значение запирающей общей ячейки памяти на "занято", получив при этом предыдущее значение. на z80 для этих целей прекрасно подходит команда dec (hl) (dec(ix/iy), inc (hl/ix/iy))

вот примерный код семафора
Код:
spinlock db 1    ;1-free, other-busy
           db 0     ;for owner

...
ld ix,spinlock
call lock
...               ;do smth
call unlock


...
lock
      dec (ix)                ;A
      jr z,isfree              ;B
      inc (ix)
      call sleep
      jr lock
isfree
      ld a,(pid)
      ld (ix+1),a
      ret

unlock
      ld (ix),1
      ret
единственная опасность, которую мне удалось рассмотреть, это если 255 процессов последовательно прервут друг друга между точками А и В. прежде чем кинуться считать такую вероятность, посчитайте вероятность простого запуска такого количества процессов %)


http://3os.ru - довольно интересный проект. немного почитал, симпатишно, но одна мысля испортила все настроение. когда почитаете, поймете какая %)