Skip to content

Commit 6cf6ce1

Browse files
mbrukneragurtovoy
authored andcommitted
perf: Speedup disc operations
1 parent f2d07a7 commit 6cf6ce1

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

source/system.f256/ab.system/wrapper.asm

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

source/system.f256/module.interfaces/kernel/commands/files/dir.asm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@ Command_Dir: ;; [dir]
2727
bcs _CDExit
2828

2929
_CDEventLoop:
30-
jsr kernel.Yield ; Polite, not actually needed.
3130
jsr GetNextEvent
32-
bcs _CDEventLoop
31+
bcc _CDProcessEvent
32+
jsr kernel.Yield ; Polite, not actually needed.
33+
bra _CDEventLoop
3334

35+
_CDProcessEvent
3436
lda KNLEvent.type
3537
cmp #kernel.event.directory.CLOSED
3638
beq _CDExit

0 commit comments

Comments
 (0)