@@ -69,10 +69,12 @@ KNLOpenStart:
6969 tay
7070
7171_loop
72- jsr kernel .Yield ; event wait
7372 jsr GetNextEvent
74- bcs _loop
73+ bcc _process_event ; only yield when no events available
74+ jsr kernel .Yield ; event wait
75+ bra _loop
7576
77+ _process_event:
7678 lda KNLEvent.type
7779 cmp #kernel.event.file.OPENED
7880 beq _success
@@ -156,10 +158,12 @@ KNLReadBlock:
156158 bcs _KGNBExitFail ; report as general error
157159
158160_KGRBEventLoop:
159- jsr kernel .Yield ; event wait
160161 jsr GetNextEvent
161- bcs _KGRBEventLoop
162+ bcc _KNLRBProcessEvent ; only yield when no events available
163+ jsr kernel .Yield ; event wait
164+ bra _KGRBEventLoop
162165
166+ _KNLRBProcessEvent:
163167 lda KNLEvent.type ; get event
164168
165169 cmp #kernel.event.file.DATA ; data, return data
@@ -223,10 +227,12 @@ KNLWriteBlock:
223227 bcs _KWBFailed
224228
225229_KNLWLoop: ; wait for an event.
226- jsr kernel .Yield
227230 jsr GetNextEvent
228- bcs _KNLWLoop
231+ bcc _KNLWProcessEvent ; only yield when no events available
232+ jsr kernel .Yield ; event wait
233+ bra _KNLWLoop
229234
235+ _KNLWProcessEvent:
230236 lda KNLEvent.type ; various errors.
231237 cmp #kernel.event.file.CLOSED
232238 beq _KWBFailed
@@ -238,7 +244,7 @@ _KNLWLoop: ; wait for an event.
238244 cmp #kernel.event.file.WROTE ; wait until block write succeeds
239245 bne _KNLWLoop
240246 clc
241- lda KNLEvent.file.wrote.wrote ; get bytes written.
247+ lda KNLEvent.file.wrote.wrote ; get bytes written.
242248 bra _KWBExit
243249
244250_KWBFailed:
0 commit comments