chore: make use of comptime control flow when working with tuples
This commit is contained in:
parent
2ef4bb7dcc
commit
472457b9f3
|
@ -335,10 +335,10 @@ fn DmaController(comptime id: u2) type {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pollDmaOnBlank(bus: *Bus, comptime kind: DmaKind) void {
|
pub fn pollDmaOnBlank(bus: *Bus, comptime kind: DmaKind) void {
|
||||||
bus.dma[0].poll(kind);
|
comptime var i: usize = 0;
|
||||||
bus.dma[1].poll(kind);
|
inline while (i < 4) : (i += 1) {
|
||||||
bus.dma[2].poll(kind);
|
bus.dma[i].poll(kind);
|
||||||
bus.dma[3].poll(kind);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const Adjustment = enum(u2) {
|
const Adjustment = enum(u2) {
|
||||||
|
|
|
@ -190,19 +190,15 @@ fn Timer(comptime id: u2) type {
|
||||||
|
|
||||||
// Perform Cascade Behaviour
|
// Perform Cascade Behaviour
|
||||||
switch (id) {
|
switch (id) {
|
||||||
0 => if (cpu.bus.tim[1].cnt.cascade.read()) {
|
inline 0, 1, 2 => |idx| {
|
||||||
cpu.bus.tim[1]._counter +%= 1;
|
const next = idx + 1;
|
||||||
if (cpu.bus.tim[1]._counter == 0) cpu.bus.tim[1].onTimerExpire(cpu, late);
|
|
||||||
|
if (cpu.bus.tim[next].cnt.cascade.read()) {
|
||||||
|
cpu.bus.tim[next]._counter +%= 1;
|
||||||
|
if (cpu.bus.tim[next]._counter == 0) cpu.bus.tim[next].onTimerExpire(cpu, late);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
1 => if (cpu.bus.tim[2].cnt.cascade.read()) {
|
3 => {}, // THere is no timer for TIM3 to cascade to
|
||||||
cpu.bus.tim[2]._counter +%= 1;
|
|
||||||
if (cpu.bus.tim[2]._counter == 0) cpu.bus.tim[2].onTimerExpire(cpu, late);
|
|
||||||
},
|
|
||||||
2 => if (cpu.bus.tim[3].cnt.cascade.read()) {
|
|
||||||
cpu.bus.tim[3]._counter +%= 1;
|
|
||||||
if (cpu.bus.tim[3]._counter == 0) cpu.bus.tim[3].onTimerExpire(cpu, late);
|
|
||||||
},
|
|
||||||
3 => {}, // There is no Timer for TIM3 to "cascade" to,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reschedule Timer if we're not cascading
|
// Reschedule Timer if we're not cascading
|
||||||
|
|
|
@ -455,29 +455,12 @@ pub const Arm7tdmi = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn stepDmaTransfer(self: *Self) bool {
|
pub fn stepDmaTransfer(self: *Self) bool {
|
||||||
const dma0 = &self.bus.dma[0];
|
comptime var i: usize = 0;
|
||||||
const dma1 = &self.bus.dma[1];
|
inline while (i < 4) : (i += 1) {
|
||||||
const dma2 = &self.bus.dma[2];
|
if (self.bus.dma[i].in_progress) {
|
||||||
const dma3 = &self.bus.dma[3];
|
self.bus.dma[i].step(self);
|
||||||
|
|
||||||
if (dma0.in_progress) {
|
|
||||||
dma0.step(self);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dma1.in_progress) {
|
|
||||||
dma1.step(self);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dma2.in_progress) {
|
|
||||||
dma2.step(self);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dma3.in_progress) {
|
|
||||||
dma3.step(self);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -46,10 +46,7 @@ pub const Scheduler = struct {
|
||||||
},
|
},
|
||||||
.TimerOverflow => |id| {
|
.TimerOverflow => |id| {
|
||||||
switch (id) {
|
switch (id) {
|
||||||
0 => cpu.bus.tim[0].onTimerExpire(cpu, late),
|
inline 0...3 => |idx| cpu.bus.tim[idx].onTimerExpire(cpu, late),
|
||||||
1 => cpu.bus.tim[1].onTimerExpire(cpu, late),
|
|
||||||
2 => cpu.bus.tim[2].onTimerExpire(cpu, late),
|
|
||||||
3 => cpu.bus.tim[3].onTimerExpire(cpu, late),
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.ApuChannel => |id| {
|
.ApuChannel => |id| {
|
||||||
|
|
Loading…
Reference in New Issue