;;; -*- Mode:LISP; Package:GREY; Base:10 -*- (compiler:define-micro-properties %io-space-write-sync (address word timeout-count status-address status-mask status-value) ) (defun %io-space-write-sync (address word timeout-count status-address status-mask status-value) "Loop waiting for (= (logand status-mask (%io-space-read status-address))) then (%io-space-write address word)." (do ((j 0 (the fixnum (1+ j)))) ((= (the fixnum status-value) (logand (the fixnum status-mask) (the fixnum (%io-space-read status-address)))) (%io-space-write address word)) (if (= (the fixnum j) (the fixnum timeout-count)) (cerror :yes nil "%IO-SPACE-WRITE-SYNC timeout"))))