Fix T() style casts
This commit is contained in:
parent
2587b9f16c
commit
7b2d4c1190
13 changed files with 287 additions and 287 deletions
|
@ -346,7 +346,7 @@ var gdt_ptr: GdtPtr = GdtPtr{
|
|||
var tss: TtsEntry = TtsEntry{
|
||||
.prev_tss = 0,
|
||||
.esp0 = 0,
|
||||
.ss0 = u32(KERNEL_DATA_OFFSET),
|
||||
.ss0 = KERNEL_DATA_OFFSET,
|
||||
.esp1 = 0,
|
||||
.ss1 = 0,
|
||||
.esp2 = 0,
|
||||
|
@ -370,7 +370,7 @@ var tss: TtsEntry = TtsEntry{
|
|||
.gs = 0,
|
||||
.ldtr = 0,
|
||||
.trap = 0,
|
||||
.io_permissions_base_offset = u16(@sizeOf(TtsEntry)),
|
||||
.io_permissions_base_offset = @sizeOf(TtsEntry),
|
||||
};
|
||||
|
||||
///
|
||||
|
@ -448,67 +448,67 @@ fn mock_lgdt(ptr: *const GdtPtr) void {
|
|||
}
|
||||
|
||||
test "GDT entries" {
|
||||
expectEqual(u32(1), @sizeOf(AccessBits));
|
||||
expectEqual(u32(1), @sizeOf(FlagBits));
|
||||
expectEqual(u32(8), @sizeOf(GdtEntry));
|
||||
expectEqual(u32(104), @sizeOf(TtsEntry));
|
||||
expectEqual(u32(6), @sizeOf(GdtPtr));
|
||||
expectEqual(@as(u32, 1), @sizeOf(AccessBits));
|
||||
expectEqual(@as(u32, 1), @sizeOf(FlagBits));
|
||||
expectEqual(@as(u32, 8), @sizeOf(GdtEntry));
|
||||
expectEqual(@as(u32, 104), @sizeOf(TtsEntry));
|
||||
expectEqual(@as(u32, 6), @sizeOf(GdtPtr));
|
||||
|
||||
const null_entry = gdt_entries[NULL_INDEX];
|
||||
expectEqual(u64(0), @bitCast(u64, null_entry));
|
||||
expectEqual(@as(u64, 0), @bitCast(u64, null_entry));
|
||||
|
||||
const kernel_code_entry = gdt_entries[KERNEL_CODE_INDEX];
|
||||
expectEqual(u64(0xCF9A000000FFFF), @bitCast(u64, kernel_code_entry));
|
||||
expectEqual(@as(u64, 0xCF9A000000FFFF), @bitCast(u64, kernel_code_entry));
|
||||
|
||||
const kernel_data_entry = gdt_entries[KERNEL_DATA_INDEX];
|
||||
expectEqual(u64(0xCF92000000FFFF), @bitCast(u64, kernel_data_entry));
|
||||
expectEqual(@as(u64, 0xCF92000000FFFF), @bitCast(u64, kernel_data_entry));
|
||||
|
||||
const user_code_entry = gdt_entries[USER_CODE_INDEX];
|
||||
expectEqual(u64(0xCFFA000000FFFF), @bitCast(u64, user_code_entry));
|
||||
expectEqual(@as(u64, 0xCFFA000000FFFF), @bitCast(u64, user_code_entry));
|
||||
|
||||
const user_data_entry = gdt_entries[USER_DATA_INDEX];
|
||||
expectEqual(u64(0xCFF2000000FFFF), @bitCast(u64, user_data_entry));
|
||||
expectEqual(@as(u64, 0xCFF2000000FFFF), @bitCast(u64, user_data_entry));
|
||||
|
||||
const tss_entry = gdt_entries[TSS_INDEX];
|
||||
expectEqual(u64(0), @bitCast(u64, tss_entry));
|
||||
expectEqual(@as(u64, 0), @bitCast(u64, tss_entry));
|
||||
|
||||
expectEqual(TABLE_SIZE, gdt_ptr.limit);
|
||||
|
||||
expectEqual(u32(0), tss.prev_tss);
|
||||
expectEqual(u32(0), tss.esp0);
|
||||
expectEqual(u32(KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(u32(0), tss.esp1);
|
||||
expectEqual(u32(0), tss.ss1);
|
||||
expectEqual(u32(0), tss.esp2);
|
||||
expectEqual(u32(0), tss.ss2);
|
||||
expectEqual(u32(0), tss.cr3);
|
||||
expectEqual(u32(0), tss.eip);
|
||||
expectEqual(u32(0), tss.eflags);
|
||||
expectEqual(u32(0), tss.eax);
|
||||
expectEqual(u32(0), tss.ecx);
|
||||
expectEqual(u32(0), tss.edx);
|
||||
expectEqual(u32(0), tss.ebx);
|
||||
expectEqual(u32(0), tss.esp);
|
||||
expectEqual(u32(0), tss.ebp);
|
||||
expectEqual(u32(0), tss.esi);
|
||||
expectEqual(u32(0), tss.edi);
|
||||
expectEqual(u32(0), tss.es);
|
||||
expectEqual(u32(0), tss.cs);
|
||||
expectEqual(u32(0), tss.ss);
|
||||
expectEqual(u32(0), tss.ds);
|
||||
expectEqual(u32(0), tss.fs);
|
||||
expectEqual(u32(0), tss.gs);
|
||||
expectEqual(u32(0), tss.ldtr);
|
||||
expectEqual(u16(0), tss.trap);
|
||||
expectEqual(@as(u32, 0), tss.prev_tss);
|
||||
expectEqual(@as(u32, 0), tss.esp0);
|
||||
expectEqual(@as(u32, KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(@as(u32, 0), tss.esp1);
|
||||
expectEqual(@as(u32, 0), tss.ss1);
|
||||
expectEqual(@as(u32, 0), tss.esp2);
|
||||
expectEqual(@as(u32, 0), tss.ss2);
|
||||
expectEqual(@as(u32, 0), tss.cr3);
|
||||
expectEqual(@as(u32, 0), tss.eip);
|
||||
expectEqual(@as(u32, 0), tss.eflags);
|
||||
expectEqual(@as(u32, 0), tss.eax);
|
||||
expectEqual(@as(u32, 0), tss.ecx);
|
||||
expectEqual(@as(u32, 0), tss.edx);
|
||||
expectEqual(@as(u32, 0), tss.ebx);
|
||||
expectEqual(@as(u32, 0), tss.esp);
|
||||
expectEqual(@as(u32, 0), tss.ebp);
|
||||
expectEqual(@as(u32, 0), tss.esi);
|
||||
expectEqual(@as(u32, 0), tss.edi);
|
||||
expectEqual(@as(u32, 0), tss.es);
|
||||
expectEqual(@as(u32, 0), tss.cs);
|
||||
expectEqual(@as(u32, 0), tss.ss);
|
||||
expectEqual(@as(u32, 0), tss.ds);
|
||||
expectEqual(@as(u32, 0), tss.fs);
|
||||
expectEqual(@as(u32, 0), tss.gs);
|
||||
expectEqual(@as(u32, 0), tss.ldtr);
|
||||
expectEqual(@as(u16, 0), tss.trap);
|
||||
|
||||
// Size of TtsEntry will fit in a u16 as 104 < 65535 (2^16)
|
||||
expectEqual(u16(@sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
expectEqual(@as(u16, @sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
}
|
||||
|
||||
test "makeEntry NULL" {
|
||||
const actual = makeEntry(u32(0), u32(0), NULL_SEGMENT, NULL_FLAGS);
|
||||
const actual = makeEntry(0, 0, NULL_SEGMENT, NULL_FLAGS);
|
||||
|
||||
const expected = u64(0);
|
||||
const expected: u64 = 0;
|
||||
expectEqual(expected, @bitCast(u64, actual));
|
||||
}
|
||||
|
||||
|
@ -523,7 +523,7 @@ test "makeEntry alternating bit pattern" {
|
|||
.present = 0,
|
||||
};
|
||||
|
||||
expectEqual(u8(0b01010101), @bitCast(u8, alt_access));
|
||||
expectEqual(@as(u8, 0b01010101), @bitCast(u8, alt_access));
|
||||
|
||||
const alt_flag = FlagBits{
|
||||
.reserved_zero = 1,
|
||||
|
@ -532,106 +532,106 @@ test "makeEntry alternating bit pattern" {
|
|||
.granularity = 0,
|
||||
};
|
||||
|
||||
expectEqual(u4(0b0101), @bitCast(u4, alt_flag));
|
||||
expectEqual(@as(u4, 0b0101), @bitCast(u4, alt_flag));
|
||||
|
||||
const actual = makeEntry(u32(0b01010101010101010101010101010101), u20(0b01010101010101010101), alt_access, alt_flag);
|
||||
const actual = makeEntry(0b01010101010101010101010101010101, 0b01010101010101010101, alt_access, alt_flag);
|
||||
|
||||
const expected = u64(0b0101010101010101010101010101010101010101010101010101010101010101);
|
||||
const expected: u64 = 0b0101010101010101010101010101010101010101010101010101010101010101;
|
||||
expectEqual(expected, @bitCast(u64, actual));
|
||||
}
|
||||
|
||||
test "setTssStack" {
|
||||
// Pre-testing
|
||||
expectEqual(u32(0), tss.prev_tss);
|
||||
expectEqual(u32(0), tss.esp0);
|
||||
expectEqual(u32(KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(u32(0), tss.esp1);
|
||||
expectEqual(u32(0), tss.ss1);
|
||||
expectEqual(u32(0), tss.esp2);
|
||||
expectEqual(u32(0), tss.ss2);
|
||||
expectEqual(u32(0), tss.cr3);
|
||||
expectEqual(u32(0), tss.eip);
|
||||
expectEqual(u32(0), tss.eflags);
|
||||
expectEqual(u32(0), tss.eax);
|
||||
expectEqual(u32(0), tss.ecx);
|
||||
expectEqual(u32(0), tss.edx);
|
||||
expectEqual(u32(0), tss.ebx);
|
||||
expectEqual(u32(0), tss.esp);
|
||||
expectEqual(u32(0), tss.ebp);
|
||||
expectEqual(u32(0), tss.esi);
|
||||
expectEqual(u32(0), tss.edi);
|
||||
expectEqual(u32(0), tss.es);
|
||||
expectEqual(u32(0), tss.cs);
|
||||
expectEqual(u32(0), tss.ss);
|
||||
expectEqual(u32(0), tss.ds);
|
||||
expectEqual(u32(0), tss.fs);
|
||||
expectEqual(u32(0), tss.gs);
|
||||
expectEqual(u32(0), tss.ldtr);
|
||||
expectEqual(u16(0), tss.trap);
|
||||
expectEqual(u16(@sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
expectEqual(@as(u32, 0), tss.prev_tss);
|
||||
expectEqual(@as(u32, 0), tss.esp0);
|
||||
expectEqual(@as(u32, KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(@as(u32, 0), tss.esp1);
|
||||
expectEqual(@as(u32, 0), tss.ss1);
|
||||
expectEqual(@as(u32, 0), tss.esp2);
|
||||
expectEqual(@as(u32, 0), tss.ss2);
|
||||
expectEqual(@as(u32, 0), tss.cr3);
|
||||
expectEqual(@as(u32, 0), tss.eip);
|
||||
expectEqual(@as(u32, 0), tss.eflags);
|
||||
expectEqual(@as(u32, 0), tss.eax);
|
||||
expectEqual(@as(u32, 0), tss.ecx);
|
||||
expectEqual(@as(u32, 0), tss.edx);
|
||||
expectEqual(@as(u32, 0), tss.ebx);
|
||||
expectEqual(@as(u32, 0), tss.esp);
|
||||
expectEqual(@as(u32, 0), tss.ebp);
|
||||
expectEqual(@as(u32, 0), tss.esi);
|
||||
expectEqual(@as(u32, 0), tss.edi);
|
||||
expectEqual(@as(u32, 0), tss.es);
|
||||
expectEqual(@as(u32, 0), tss.cs);
|
||||
expectEqual(@as(u32, 0), tss.ss);
|
||||
expectEqual(@as(u32, 0), tss.ds);
|
||||
expectEqual(@as(u32, 0), tss.fs);
|
||||
expectEqual(@as(u32, 0), tss.gs);
|
||||
expectEqual(@as(u32, 0), tss.ldtr);
|
||||
expectEqual(@as(u16, 0), tss.trap);
|
||||
expectEqual(@as(u16, @sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
|
||||
// Call function
|
||||
setTssStack(u32(100));
|
||||
setTssStack(100);
|
||||
|
||||
// Post-testing
|
||||
expectEqual(u32(0), tss.prev_tss);
|
||||
expectEqual(u32(100), tss.esp0);
|
||||
expectEqual(u32(KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(u32(0), tss.esp1);
|
||||
expectEqual(u32(0), tss.ss1);
|
||||
expectEqual(u32(0), tss.esp2);
|
||||
expectEqual(u32(0), tss.ss2);
|
||||
expectEqual(u32(0), tss.cr3);
|
||||
expectEqual(u32(0), tss.eip);
|
||||
expectEqual(u32(0), tss.eflags);
|
||||
expectEqual(u32(0), tss.eax);
|
||||
expectEqual(u32(0), tss.ecx);
|
||||
expectEqual(u32(0), tss.edx);
|
||||
expectEqual(u32(0), tss.ebx);
|
||||
expectEqual(u32(0), tss.esp);
|
||||
expectEqual(u32(0), tss.ebp);
|
||||
expectEqual(u32(0), tss.esi);
|
||||
expectEqual(u32(0), tss.edi);
|
||||
expectEqual(u32(0), tss.es);
|
||||
expectEqual(u32(0), tss.cs);
|
||||
expectEqual(u32(0), tss.ss);
|
||||
expectEqual(u32(0), tss.ds);
|
||||
expectEqual(u32(0), tss.fs);
|
||||
expectEqual(u32(0), tss.gs);
|
||||
expectEqual(u32(0), tss.ldtr);
|
||||
expectEqual(u16(0), tss.trap);
|
||||
expectEqual(u16(@sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
expectEqual(@as(u32, 0), tss.prev_tss);
|
||||
expectEqual(@as(u32, 100), tss.esp0);
|
||||
expectEqual(@as(u32, KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(@as(u32, 0), tss.esp1);
|
||||
expectEqual(@as(u32, 0), tss.ss1);
|
||||
expectEqual(@as(u32, 0), tss.esp2);
|
||||
expectEqual(@as(u32, 0), tss.ss2);
|
||||
expectEqual(@as(u32, 0), tss.cr3);
|
||||
expectEqual(@as(u32, 0), tss.eip);
|
||||
expectEqual(@as(u32, 0), tss.eflags);
|
||||
expectEqual(@as(u32, 0), tss.eax);
|
||||
expectEqual(@as(u32, 0), tss.ecx);
|
||||
expectEqual(@as(u32, 0), tss.edx);
|
||||
expectEqual(@as(u32, 0), tss.ebx);
|
||||
expectEqual(@as(u32, 0), tss.esp);
|
||||
expectEqual(@as(u32, 0), tss.ebp);
|
||||
expectEqual(@as(u32, 0), tss.esi);
|
||||
expectEqual(@as(u32, 0), tss.edi);
|
||||
expectEqual(@as(u32, 0), tss.es);
|
||||
expectEqual(@as(u32, 0), tss.cs);
|
||||
expectEqual(@as(u32, 0), tss.ss);
|
||||
expectEqual(@as(u32, 0), tss.ds);
|
||||
expectEqual(@as(u32, 0), tss.fs);
|
||||
expectEqual(@as(u32, 0), tss.gs);
|
||||
expectEqual(@as(u32, 0), tss.ldtr);
|
||||
expectEqual(@as(u16, 0), tss.trap);
|
||||
expectEqual(@as(u16, @sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
|
||||
// Clean up
|
||||
setTssStack(u32(0));
|
||||
setTssStack(0);
|
||||
|
||||
expectEqual(u32(0), tss.prev_tss);
|
||||
expectEqual(u32(0), tss.esp0);
|
||||
expectEqual(u32(KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(u32(0), tss.esp1);
|
||||
expectEqual(u32(0), tss.ss1);
|
||||
expectEqual(u32(0), tss.esp2);
|
||||
expectEqual(u32(0), tss.ss2);
|
||||
expectEqual(u32(0), tss.cr3);
|
||||
expectEqual(u32(0), tss.eip);
|
||||
expectEqual(u32(0), tss.eflags);
|
||||
expectEqual(u32(0), tss.eax);
|
||||
expectEqual(u32(0), tss.ecx);
|
||||
expectEqual(u32(0), tss.edx);
|
||||
expectEqual(u32(0), tss.ebx);
|
||||
expectEqual(u32(0), tss.esp);
|
||||
expectEqual(u32(0), tss.ebp);
|
||||
expectEqual(u32(0), tss.esi);
|
||||
expectEqual(u32(0), tss.edi);
|
||||
expectEqual(u32(0), tss.es);
|
||||
expectEqual(u32(0), tss.cs);
|
||||
expectEqual(u32(0), tss.ss);
|
||||
expectEqual(u32(0), tss.ds);
|
||||
expectEqual(u32(0), tss.fs);
|
||||
expectEqual(u32(0), tss.gs);
|
||||
expectEqual(u32(0), tss.ldtr);
|
||||
expectEqual(u16(0), tss.trap);
|
||||
expectEqual(u16(@sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
expectEqual(@as(u32, 0), tss.prev_tss);
|
||||
expectEqual(@as(u32, 0), tss.esp0);
|
||||
expectEqual(@as(u32, KERNEL_DATA_OFFSET), tss.ss0);
|
||||
expectEqual(@as(u32, 0), tss.esp1);
|
||||
expectEqual(@as(u32, 0), tss.ss1);
|
||||
expectEqual(@as(u32, 0), tss.esp2);
|
||||
expectEqual(@as(u32, 0), tss.ss2);
|
||||
expectEqual(@as(u32, 0), tss.cr3);
|
||||
expectEqual(@as(u32, 0), tss.eip);
|
||||
expectEqual(@as(u32, 0), tss.eflags);
|
||||
expectEqual(@as(u32, 0), tss.eax);
|
||||
expectEqual(@as(u32, 0), tss.ecx);
|
||||
expectEqual(@as(u32, 0), tss.edx);
|
||||
expectEqual(@as(u32, 0), tss.ebx);
|
||||
expectEqual(@as(u32, 0), tss.esp);
|
||||
expectEqual(@as(u32, 0), tss.ebp);
|
||||
expectEqual(@as(u32, 0), tss.esi);
|
||||
expectEqual(@as(u32, 0), tss.edi);
|
||||
expectEqual(@as(u32, 0), tss.es);
|
||||
expectEqual(@as(u32, 0), tss.cs);
|
||||
expectEqual(@as(u32, 0), tss.ss);
|
||||
expectEqual(@as(u32, 0), tss.ds);
|
||||
expectEqual(@as(u32, 0), tss.fs);
|
||||
expectEqual(@as(u32, 0), tss.gs);
|
||||
expectEqual(@as(u32, 0), tss.ldtr);
|
||||
expectEqual(@as(u16, 0), tss.trap);
|
||||
expectEqual(@as(u16, @sizeOf(TtsEntry)), tss.io_permissions_base_offset);
|
||||
}
|
||||
|
||||
test "init" {
|
||||
|
@ -651,13 +651,13 @@ test "init" {
|
|||
const tss_limit = @sizeOf(TtsEntry) - 1;
|
||||
const tss_addr = @ptrToInt(&tss);
|
||||
|
||||
var expected = u64(0);
|
||||
expected |= u64(@truncate(u16, tss_limit));
|
||||
expected |= u64(@truncate(u24, tss_addr)) << 16;
|
||||
expected |= u64(0x89) << (16 + 24);
|
||||
expected |= u64(@truncate(u4, tss_limit >> 16)) << (16 + 24 + 8);
|
||||
var expected: u64 = 0;
|
||||
expected |= @as(u64, @truncate(u16, tss_limit));
|
||||
expected |= @as(u64, @truncate(u24, tss_addr)) << 16;
|
||||
expected |= @as(u64, 0x89) << (16 + 24);
|
||||
expected |= @as(u64, @truncate(u4, tss_limit >> 16)) << (16 + 24 + 8);
|
||||
// Flags are zero
|
||||
expected |= u64(@truncate(u8, tss_addr >> 24)) << (16 + 24 + 8 + 4 + 4);
|
||||
expected |= @as(u64, @truncate(u8, tss_addr >> 24)) << (16 + 24 + 8 + 4 + 4);
|
||||
|
||||
expectEqual(expected, @bitCast(u64, tss_entry));
|
||||
|
||||
|
|
|
@ -198,16 +198,16 @@ fn mock_lidt(ptr: *const IdtPtr) void {
|
|||
}
|
||||
|
||||
test "IDT entries" {
|
||||
expectEqual(u32(8), @sizeOf(IdtEntry));
|
||||
expectEqual(u32(6), @sizeOf(IdtPtr));
|
||||
expectEqual(@as(u32, 8), @sizeOf(IdtEntry));
|
||||
expectEqual(@as(u32, 6), @sizeOf(IdtPtr));
|
||||
expectEqual(TABLE_SIZE, idt_ptr.limit);
|
||||
expectEqual(u32(0), idt_ptr.base);
|
||||
expectEqual(@as(u32, 0), idt_ptr.base);
|
||||
}
|
||||
|
||||
test "makeEntry alternating bit pattern" {
|
||||
const actual = makeEntry(u32(0b01010101010101010101010101010101), u16(0b0101010101010101), u4(0b0101), u2(0b01));
|
||||
const actual = makeEntry(0b01010101010101010101010101010101, 0b0101010101010101, 0b0101, 0b01);
|
||||
|
||||
const expected = u64(0b0101010101010101101001010000000001010101010101010101010101010101);
|
||||
const expected: u64 = 0b0101010101010101101001010000000001010101010101010101010101010101;
|
||||
|
||||
expectEqual(expected, @bitCast(u64, actual));
|
||||
}
|
||||
|
@ -240,7 +240,7 @@ test "isIdtOpen" {
|
|||
}
|
||||
|
||||
test "openInterruptGate" {
|
||||
const index = u8(100);
|
||||
const index: u8 = 100;
|
||||
openInterruptGate(index, testHandler0) catch unreachable;
|
||||
expectError(IdtError.IdtEntryExists, openInterruptGate(index, testHandler0));
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ test "openIrq" {
|
|||
idt.initTest();
|
||||
defer idt.freeTest();
|
||||
|
||||
const index = u8(0);
|
||||
const index: u8 = 0;
|
||||
const handler = testFunction0;
|
||||
const ret: idt.IdtError!void = {};
|
||||
|
||||
|
@ -171,7 +171,7 @@ test "registerIrq re-register irq handler" {
|
|||
pic.initTest();
|
||||
defer pic.freeTest();
|
||||
|
||||
pic.addTestParams("clearMask", u16(0));
|
||||
pic.addTestParams("clearMask", @as(u16, 0));
|
||||
|
||||
// Pre testing
|
||||
for (irq_handlers) |h| {
|
||||
|
@ -200,7 +200,7 @@ test "registerIrq register irq handler" {
|
|||
pic.initTest();
|
||||
defer pic.freeTest();
|
||||
|
||||
pic.addTestParams("clearMask", u16(0));
|
||||
pic.addTestParams("clearMask", @as(u16, 0));
|
||||
|
||||
// Pre testing
|
||||
for (irq_handlers) |h| {
|
||||
|
|
|
@ -258,7 +258,7 @@ test "openIsr" {
|
|||
idt.initTest();
|
||||
defer idt.freeTest();
|
||||
|
||||
const index = u8(0);
|
||||
const index: u8 = 0;
|
||||
const handler = testFunction0;
|
||||
const ret: idt.IdtError!void = {};
|
||||
|
||||
|
|
|
@ -190,10 +190,10 @@ fn mapDirEntry(dir: *Directory, virt_start: usize, virt_end: usize, phys_start:
|
|||
var dir_entry = &dir.entries[entry];
|
||||
dir_entry.* |= DENTRY_PRESENT;
|
||||
dir_entry.* |= DENTRY_WRITABLE;
|
||||
dir_entry.* &= ~u32(DENTRY_USER);
|
||||
dir_entry.* &= ~DENTRY_USER;
|
||||
dir_entry.* |= DENTRY_WRITE_THROUGH;
|
||||
dir_entry.* &= ~u32(DENTRY_CACHE_DISABLED);
|
||||
dir_entry.* &= ~u32(DENTRY_4MB_PAGES);
|
||||
dir_entry.* &= ~DENTRY_CACHE_DISABLED;
|
||||
dir_entry.* &= ~DENTRY_4MB_PAGES;
|
||||
|
||||
// Only create a new table if one hasn't already been created for this dir entry.
|
||||
// Prevents us from overriding previous mappings.
|
||||
|
@ -239,10 +239,10 @@ fn mapTableEntry(entry: *align(1) TableEntry, phys_addr: usize) PagingError!void
|
|||
}
|
||||
entry.* |= TENTRY_PRESENT;
|
||||
entry.* |= TENTRY_WRITABLE;
|
||||
entry.* &= ~u32(TENTRY_USER);
|
||||
entry.* &= ~TENTRY_USER;
|
||||
entry.* |= TENTRY_WRITE_THROUGH;
|
||||
entry.* &= ~u32(TENTRY_CACHE_DISABLED);
|
||||
entry.* &= ~u32(TENTRY_GLOBAL);
|
||||
entry.* &= ~TENTRY_CACHE_DISABLED;
|
||||
entry.* &= ~TENTRY_GLOBAL;
|
||||
entry.* |= TENTRY_PAGE_ADDR & @intCast(u32, phys_addr);
|
||||
}
|
||||
|
||||
|
|
|
@ -410,7 +410,7 @@ pub fn spuriousIrq(irq_num: u8) bool {
|
|||
pub fn setMask(irq_num: u8) void {
|
||||
const port: u16 = if (irq_num < 8) MASTER_DATA_REG else SLAVE_DATA_REG;
|
||||
const shift = @intCast(u3, irq_num % 8);
|
||||
const value: u8 = arch.inb(port) | (u8(1) << shift);
|
||||
const value: u8 = arch.inb(port) | (@as(u8, 1) << shift);
|
||||
arch.outb(port, value);
|
||||
}
|
||||
|
||||
|
@ -423,7 +423,7 @@ pub fn setMask(irq_num: u8) void {
|
|||
pub fn clearMask(irq_num: u8) void {
|
||||
const port: u16 = if (irq_num < 8) MASTER_DATA_REG else SLAVE_DATA_REG;
|
||||
const shift = @intCast(u3, irq_num % 8);
|
||||
const value: u8 = arch.inb(port) & ~(u8(1) << shift);
|
||||
const value: u8 = arch.inb(port) & ~(@as(u8, 1) << shift);
|
||||
arch.outb(port, value);
|
||||
}
|
||||
|
||||
|
@ -451,8 +451,8 @@ pub fn init() void {
|
|||
sendDataSlave(ICW4_80x86_MODE);
|
||||
|
||||
// Mask all interrupts
|
||||
sendDataMaster(u8(0xFF));
|
||||
sendDataSlave(u8(0xFF));
|
||||
sendDataMaster(0xFF);
|
||||
sendDataSlave(0xFF);
|
||||
|
||||
log.logInfo("Done\n");
|
||||
|
||||
|
@ -464,7 +464,7 @@ test "sendCommandMaster" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const cmd = u8(10);
|
||||
const cmd: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, cmd);
|
||||
|
||||
|
@ -476,7 +476,7 @@ test "sendCommandSlave" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const cmd = u8(10);
|
||||
const cmd: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, cmd);
|
||||
|
||||
|
@ -488,7 +488,7 @@ test "sendDataMaster" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const data = u8(10);
|
||||
const data: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, data);
|
||||
|
||||
|
@ -500,7 +500,7 @@ test "sendDataSlave" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const data = u8(10);
|
||||
const data: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", SLAVE_DATA_REG, data);
|
||||
|
||||
|
@ -512,9 +512,9 @@ test "readDataMaster" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, u8(10));
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readDataMaster());
|
||||
expectEqual(@as(u8, 10), readDataMaster());
|
||||
}
|
||||
|
||||
test "readDataSlave" {
|
||||
|
@ -522,9 +522,9 @@ test "readDataSlave" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("inb", SLAVE_DATA_REG, u8(10));
|
||||
arch.addTestParams("inb", SLAVE_DATA_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readDataSlave());
|
||||
expectEqual(@as(u8, 10), readDataSlave());
|
||||
}
|
||||
|
||||
test "readMasterIrr" {
|
||||
|
@ -532,10 +532,10 @@ test "readMasterIrr" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, u8(0x0A));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, u8(10));
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, @as(u8, 0x0A));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readMasterIrr());
|
||||
expectEqual(@as(u8, 10), readMasterIrr());
|
||||
}
|
||||
|
||||
test "readSlaveIrr" {
|
||||
|
@ -543,10 +543,10 @@ test "readSlaveIrr" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, u8(0x0A));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, u8(10));
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, @as(u8, 0x0A));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readSlaveIrr());
|
||||
expectEqual(@as(u8, 10), readSlaveIrr());
|
||||
}
|
||||
|
||||
test "readMasterIsr" {
|
||||
|
@ -554,10 +554,10 @@ test "readMasterIsr" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, u8(10));
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, @as(u8, 0x0B));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readMasterIsr());
|
||||
expectEqual(@as(u8, 10), readMasterIsr());
|
||||
}
|
||||
|
||||
test "readSlaveIsr" {
|
||||
|
@ -565,10 +565,10 @@ test "readSlaveIsr" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, u8(10));
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, @as(u8, 0x0B));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, @as(u8, 10));
|
||||
|
||||
expectEqual(u8(10), readSlaveIsr());
|
||||
expectEqual(@as(u8, 10), readSlaveIsr());
|
||||
}
|
||||
|
||||
test "sendEndOfInterrupt master only" {
|
||||
|
@ -576,7 +576,7 @@ test "sendEndOfInterrupt master only" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
var i = u8(0);
|
||||
var i: u8 = 0;
|
||||
while (i < 8) : (i += 1) {
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, OCW2_END_OF_INTERRUPT);
|
||||
|
||||
|
@ -589,7 +589,7 @@ test "sendEndOfInterrupt master and slave" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
var i = u8(8);
|
||||
var i: u8 = 8;
|
||||
while (i < 16) : (i += 1) {
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, OCW2_END_OF_INTERRUPT);
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, OCW2_END_OF_INTERRUPT);
|
||||
|
@ -600,9 +600,9 @@ test "sendEndOfInterrupt master and slave" {
|
|||
|
||||
test "spuriousIrq not spurious IRQ number" {
|
||||
// Pre testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
var i = u8(0);
|
||||
var i: u8 = 0;
|
||||
while (i < 16) : (i += 1) {
|
||||
if (i != 7 and i != 15) {
|
||||
expectEqual(false, spuriousIrq(i));
|
||||
|
@ -610,7 +610,7 @@ test "spuriousIrq not spurious IRQ number" {
|
|||
}
|
||||
|
||||
// Post testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Clean up
|
||||
spurious_irq_counter = 0;
|
||||
|
@ -621,18 +621,18 @@ test "spuriousIrq spurious master IRQ number not spurious" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, @as(u8, 0x0B));
|
||||
// Return 0x80 from readMasterIsr() which will mean this was a real IRQ
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, u8(0x80));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, @as(u8, 0x80));
|
||||
|
||||
// Pre testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Call function
|
||||
expectEqual(false, spuriousIrq(u8(7)));
|
||||
expectEqual(false, spuriousIrq(7));
|
||||
|
||||
// Post testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Clean up
|
||||
spurious_irq_counter = 0;
|
||||
|
@ -643,18 +643,18 @@ test "spuriousIrq spurious master IRQ number spurious" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, @as(u8, 0x0B));
|
||||
// Return 0x0 from readMasterIsr() which will mean this was a spurious IRQ
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, u8(0x0));
|
||||
arch.addTestParams("inb", MASTER_STATUS_REG, @as(u8, 0x0));
|
||||
|
||||
// Pre testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Call function
|
||||
expectEqual(true, spuriousIrq(u8(7)));
|
||||
expectEqual(true, spuriousIrq(7));
|
||||
|
||||
// Post testing
|
||||
expectEqual(u32(1), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 1), spurious_irq_counter);
|
||||
|
||||
// Clean up
|
||||
spurious_irq_counter = 0;
|
||||
|
@ -665,18 +665,18 @@ test "spuriousIrq spurious slave IRQ number not spurious" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, @as(u8, 0x0B));
|
||||
// Return 0x80 from readSlaveIsr() which will mean this was a real IRQ
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, u8(0x80));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, @as(u8, 0x80));
|
||||
|
||||
// Pre testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Call function
|
||||
expectEqual(false, spuriousIrq(u8(15)));
|
||||
expectEqual(false, spuriousIrq(15));
|
||||
|
||||
// Post testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Clean up
|
||||
spurious_irq_counter = 0;
|
||||
|
@ -687,20 +687,20 @@ test "spuriousIrq spurious slave IRQ number spurious" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, u8(0x0B));
|
||||
arch.addTestParams("outb", SLAVE_COMMAND_REG, @as(u8, 0x0B));
|
||||
// Return 0x0 from readSlaveIsr() which will mean this was a spurious IRQ
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, u8(0x0));
|
||||
arch.addTestParams("inb", SLAVE_STATUS_REG, @as(u8, 0x0));
|
||||
// A EOI will be sent for a spurious IRQ 15
|
||||
arch.addTestParams("outb", MASTER_COMMAND_REG, OCW2_END_OF_INTERRUPT);
|
||||
|
||||
// Pre testing
|
||||
expectEqual(u32(0), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 0), spurious_irq_counter);
|
||||
|
||||
// Call function
|
||||
expectEqual(true, spuriousIrq(u8(15)));
|
||||
expectEqual(true, spuriousIrq(15));
|
||||
|
||||
// Post testing
|
||||
expectEqual(u32(1), spurious_irq_counter);
|
||||
expectEqual(@as(u32, 1), spurious_irq_counter);
|
||||
|
||||
// Clean up
|
||||
spurious_irq_counter = 0;
|
||||
|
@ -712,11 +712,11 @@ test "setMask master IRQ masked" {
|
|||
defer arch.freeTest();
|
||||
|
||||
// Going to assume all bits are masked out
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, u8(0xFF));
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, @as(u8, 0xFF));
|
||||
// Expect the 2nd bit to be set
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, u8(0xFF));
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, @as(u8, 0xFF));
|
||||
|
||||
setMask(u8(1));
|
||||
setMask(1);
|
||||
}
|
||||
|
||||
test "setMask master IRQ unmasked" {
|
||||
|
@ -725,11 +725,11 @@ test "setMask master IRQ unmasked" {
|
|||
defer arch.freeTest();
|
||||
|
||||
// IRQ already unmasked
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, u8(0xFD));
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, @as(u8, 0xFD));
|
||||
// Expect the 2nd bit to be set
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, u8(0xFF));
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, @as(u8, 0xFF));
|
||||
|
||||
setMask(u8(1));
|
||||
setMask(1);
|
||||
}
|
||||
|
||||
test "clearMask master IRQ masked" {
|
||||
|
@ -738,11 +738,11 @@ test "clearMask master IRQ masked" {
|
|||
defer arch.freeTest();
|
||||
|
||||
// Going to assume all bits are masked out
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, u8(0xFF));
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, @as(u8, 0xFF));
|
||||
// Expect the 2nd bit to be clear
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, u8(0xFD));
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, @as(u8, 0xFD));
|
||||
|
||||
clearMask(u8(1));
|
||||
clearMask(1);
|
||||
}
|
||||
|
||||
test "clearMask master IRQ unmasked" {
|
||||
|
@ -751,11 +751,11 @@ test "clearMask master IRQ unmasked" {
|
|||
defer arch.freeTest();
|
||||
|
||||
// IRQ already unmasked
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, u8(0xFD));
|
||||
arch.addTestParams("inb", MASTER_DATA_REG, @as(u8, 0xFD));
|
||||
// Expect the 2nd bit to still be clear
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, u8(0xFD));
|
||||
arch.addTestParams("outb", MASTER_DATA_REG, @as(u8, 0xFD));
|
||||
|
||||
clearMask(u8(1));
|
||||
clearMask(1);
|
||||
}
|
||||
|
||||
test "init" {
|
||||
|
@ -783,9 +783,9 @@ test "init" {
|
|||
SLAVE_DATA_REG,
|
||||
ICW4_80x86_MODE,
|
||||
MASTER_DATA_REG,
|
||||
u8(0xFF),
|
||||
@as(u8, 0xFF),
|
||||
SLAVE_DATA_REG,
|
||||
u8(0xFF),
|
||||
@as(u8, 0xFF),
|
||||
);
|
||||
|
||||
init();
|
||||
|
|
|
@ -213,7 +213,7 @@ inline fn sendCommand(cmd: u8) void {
|
|||
///
|
||||
inline fn readBackCommand(counter: CounterSelect) u8 {
|
||||
sendCommand(0xC2);
|
||||
return u8(0x3F) & arch.inb(counter.getRegister());
|
||||
return 0x3F & arch.inb(counter.getRegister());
|
||||
}
|
||||
|
||||
///
|
||||
|
@ -260,7 +260,7 @@ fn setupCounter(counter: CounterSelect, freq: u32, mode: u8) PitError!void {
|
|||
}
|
||||
|
||||
// 65536, the slowest possible frequency. Roughly 19Hz
|
||||
var reload_value = u32(0x10000);
|
||||
var reload_value: u32 = 0x10000;
|
||||
|
||||
// The lowest possible frequency is 18Hz.
|
||||
// MAX_FREQUENCY / 18 > u16 N
|
||||
|
@ -280,10 +280,10 @@ fn setupCounter(counter: CounterSelect, freq: u32, mode: u8) PitError!void {
|
|||
const frequency = (MAX_FREQUENCY + (reload_value / 2)) / reload_value;
|
||||
|
||||
// Calculate the amount of nanoseconds between interrupts
|
||||
time_ns = u32(1000000000) / frequency;
|
||||
time_ns = 1000000000 / frequency;
|
||||
|
||||
// Calculate the number of picoseconds, the left over from nanoseconds
|
||||
time_under_1_ns = ((u32(1000000000) % frequency) * u32(1000) + (frequency / 2)) / frequency;
|
||||
time_under_1_ns = ((1000000000 % frequency) * 1000 + (frequency / 2)) / frequency;
|
||||
|
||||
// Set the frequency for the counter being set up
|
||||
switch (counter) {
|
||||
|
@ -316,11 +316,11 @@ fn setupCounter(counter: CounterSelect, freq: u32, mode: u8) PitError!void {
|
|||
/// IN ticks_to_wait: u32 - The number of ticks to wait.
|
||||
///
|
||||
pub fn waitTicks(ticks_to_wait: u32) void {
|
||||
if (ticks > u32(maxInt(u32)) - ticks_to_wait) {
|
||||
if (ticks > maxInt(u32) - ticks_to_wait) {
|
||||
// Integer overflow
|
||||
|
||||
// Calculate the 2 conditions
|
||||
const wait_ticks1 = u32(maxInt(u32)) - ticks;
|
||||
const wait_ticks1 = maxInt(u32) - ticks;
|
||||
const wait_ticks2 = ticks_to_wait - wait_ticks1;
|
||||
|
||||
while (ticks > wait_ticks1) {
|
||||
|
@ -372,7 +372,7 @@ pub fn getFrequency() u32 {
|
|||
pub fn init() void {
|
||||
log.logInfo("Init pit\n");
|
||||
// Set up counter 0 at 10000hz in a square wave mode counting in binary
|
||||
const freq = u32(10000);
|
||||
const freq: u32 = 10000;
|
||||
setupCounter(CounterSelect.Counter0, freq, OCW_MODE_SQUARE_WAVE_GENERATOR | OCW_BINARY_COUNT_BINARY) catch |e| {
|
||||
panic(@errorReturnTrace(), "Invalid frequency: {}\n", freq);
|
||||
};
|
||||
|
@ -398,7 +398,7 @@ test "sendCommand" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const cmd = u8(10);
|
||||
const cmd: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", COMMAND_REGISTER, cmd);
|
||||
|
||||
|
@ -409,21 +409,21 @@ test "readBackCommand" {
|
|||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const cmd = u8(0xC2);
|
||||
const cmd: u8 = 0xC2;
|
||||
|
||||
arch.addTestParams("outb", COMMAND_REGISTER, cmd);
|
||||
arch.addTestParams("inb", COUNTER_0_REGISTER, u8(0x20));
|
||||
arch.addTestParams("inb", COUNTER_0_REGISTER, @as(u8, 0x20));
|
||||
|
||||
const actual = readBackCommand(CounterSelect.Counter0);
|
||||
|
||||
expectEqual(u8(0x20), actual);
|
||||
expectEqual(@as(u8, 0x20), actual);
|
||||
}
|
||||
|
||||
test "sendDataToCounter" {
|
||||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
const data = u8(10);
|
||||
const data: u8 = 10;
|
||||
|
||||
arch.addTestParams("outb", COUNTER_0_REGISTER, data);
|
||||
|
||||
|
@ -437,13 +437,13 @@ test "setupCounter lowest frequency" {
|
|||
const counter = CounterSelect.Counter0;
|
||||
const port = counter.getRegister();
|
||||
|
||||
var freq = u32(0);
|
||||
var freq: u32 = 0;
|
||||
|
||||
// Reload value will be 0 (0x10000), the slowest speed for frequency less than 19
|
||||
const expected_reload_value = u16(0);
|
||||
const expected_reload_value: u16 = 0;
|
||||
|
||||
// Slowest frequency the PIT can run at
|
||||
const expected_freq = u32(19);
|
||||
const expected_freq: u32 = 19;
|
||||
|
||||
const mode = OCW_MODE_SQUARE_WAVE_GENERATOR | OCW_BINARY_COUNT_BINARY;
|
||||
const command = mode | OCW_READ_LOAD_DATA | counter.getCounterOCW();
|
||||
|
@ -514,7 +514,7 @@ test "setupCounter normal frequency" {
|
|||
// Set the frequency to a normal frequency
|
||||
const freq = 10000;
|
||||
const expected_reload_value = 119;
|
||||
const expected_freq = u32(10027);
|
||||
const expected_freq: u32 = 10027;
|
||||
|
||||
const mode = OCW_MODE_SQUARE_WAVE_GENERATOR | OCW_BINARY_COUNT_BINARY;
|
||||
const command = mode | OCW_READ_LOAD_DATA | counter.getCounterOCW();
|
||||
|
@ -523,13 +523,13 @@ test "setupCounter normal frequency" {
|
|||
|
||||
setupCounter(counter, freq, mode) catch unreachable;
|
||||
|
||||
expectEqual(u32(0), ticks);
|
||||
expectEqual(@as(u32, 0), ticks);
|
||||
expectEqual(expected_freq, current_freq_0);
|
||||
expectEqual(expected_freq, getFrequency());
|
||||
|
||||
// These are the hard coded expected values. Calculated externally to check the internal calculation
|
||||
expectEqual(u32(99730), time_ns);
|
||||
expectEqual(u32(727), time_under_1_ns);
|
||||
expectEqual(@as(u32, 99730), time_ns);
|
||||
expectEqual(@as(u32, 727), time_under_1_ns);
|
||||
|
||||
// Reset globals
|
||||
time_ns = 0;
|
||||
|
@ -588,9 +588,9 @@ fn rt_waitTicks2() void {
|
|||
/// Check that when the PIT is initialised, counter 0 is set up properly.
|
||||
///
|
||||
fn rt_initCounter_0() void {
|
||||
const expected_ns = u32(99730);
|
||||
const expected_ps = u32(727);
|
||||
const expected_hz = u32(10027);
|
||||
const expected_ns: u32 = 99730;
|
||||
const expected_ps: u32 = 727;
|
||||
const expected_hz: u32 = 10027;
|
||||
|
||||
if (time_ns != expected_ns or time_under_1_ns != expected_ps or getFrequency() != expected_hz) {
|
||||
panic(
|
||||
|
|
|
@ -36,7 +36,7 @@ pub fn runtimeTests() void {
|
|||
inline for (@typeInfo(Level).Enum.fields) |field| {
|
||||
const level = @field(Level, field.name);
|
||||
log(level, "Test " ++ field.name ++ " level\n");
|
||||
log(level, "Test " ++ field.name ++ " level with args {}, {}\n", "a", u32(1));
|
||||
log(level, "Test " ++ field.name ++ " level with args {}, {}\n", "a", @as(u32, 1));
|
||||
const logFn = switch (level) {
|
||||
.INFO => logInfo,
|
||||
.DEBUG => logDebug,
|
||||
|
@ -44,6 +44,6 @@ pub fn runtimeTests() void {
|
|||
.ERROR => logError,
|
||||
};
|
||||
logFn("Test " ++ field.name ++ " function\n");
|
||||
logFn("Test " ++ field.name ++ " function with args {}, {}\n", "a", u32(1));
|
||||
logFn("Test " ++ field.name ++ " function with args {}, {}\n", "a", @as(u32, 1));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,8 +102,8 @@ pub inline fn physToVirt(phys: var) @typeOf(phys) {
|
|||
test "physToVirt" {
|
||||
ADDR_OFFSET = 0xC0000000;
|
||||
const offset: usize = ADDR_OFFSET;
|
||||
expectEqual(physToVirt(usize(0)), offset + 0);
|
||||
expectEqual(physToVirt(usize(123)), offset + 123);
|
||||
expectEqual(physToVirt(@as(usize, 0)), offset + 0);
|
||||
expectEqual(physToVirt(@as(usize, 123)), offset + 123);
|
||||
expectEqual(@ptrToInt(physToVirt(@intToPtr(*usize, 123))), offset + 123);
|
||||
}
|
||||
|
||||
|
|
|
@ -29,13 +29,13 @@ const ROW_TOTAL: u16 = vga.HEIGHT - ROW_MIN;
|
|||
const TOTAL_NUM_PAGES: u16 = 5;
|
||||
|
||||
/// The total number of VGA (or characters) elements are on a page
|
||||
const TOTAL_CHAR_ON_PAGE: u16 = u16(vga.WIDTH) * ROW_TOTAL;
|
||||
const TOTAL_CHAR_ON_PAGE: u16 = vga.WIDTH * ROW_TOTAL;
|
||||
|
||||
/// The start of the displayable region in the video buffer memory
|
||||
const START_OF_DISPLAYABLE_REGION: u16 = u16(vga.WIDTH) * ROW_MIN;
|
||||
const START_OF_DISPLAYABLE_REGION: u16 = vga.WIDTH * ROW_MIN;
|
||||
|
||||
/// The total number of VGA elements (or characters) the video buffer can display
|
||||
const VIDEO_BUFFER_SIZE: u16 = u16(vga.WIDTH) * u16(vga.HEIGHT);
|
||||
const VIDEO_BUFFER_SIZE: u16 = vga.WIDTH * vga.HEIGHT;
|
||||
|
||||
/// The location of the kernel in virtual memory so can calculate the address of the VGA buffer
|
||||
extern var KERNEL_ADDR_OFFSET: *u32;
|
||||
|
@ -91,7 +91,7 @@ fn videoCopy(video_buf_offset: u16, data: []const u16, size: u16) TtyError!void
|
|||
return TtyError.OutOfBounds;
|
||||
}
|
||||
|
||||
var i = u32(0);
|
||||
var i: u32 = 0;
|
||||
while (i < size) : (i += 1) {
|
||||
video_buffer[video_buf_offset + i] = data[i];
|
||||
}
|
||||
|
@ -118,7 +118,7 @@ fn pageMove(dest: []u16, src: []u16, size: u16) TtyError!void {
|
|||
|
||||
// Make sure we don't override the values we want to copy
|
||||
if (@ptrToInt(&dest[0]) < @ptrToInt(&src[0])) {
|
||||
var i = u16(0);
|
||||
var i: u16 = 0;
|
||||
while (i != size) : (i += 1) {
|
||||
dest[i] = src[i];
|
||||
}
|
||||
|
@ -190,7 +190,7 @@ fn displayPageNumber() void {
|
|||
// TODO: #89 TTY - print string with alignment
|
||||
// When print a string with alignment is available, can remove.
|
||||
// But for now we can calculate the alignment.
|
||||
column = u8(vga.WIDTH) - @truncate(u8, fmt_text.len);
|
||||
column = @truncate(u8, vga.WIDTH) - @truncate(u8, fmt_text.len);
|
||||
row = ROW_MIN - 1;
|
||||
|
||||
writeString(fmt_text) catch |e| {
|
||||
|
@ -296,7 +296,7 @@ fn scroll() void {
|
|||
};
|
||||
|
||||
// Move all rows up by rows_to_move
|
||||
var i = u32(0);
|
||||
var i: u32 = 0;
|
||||
while (i < (ROW_TOTAL - rows_to_move) * vga.WIDTH) : (i += 1) {
|
||||
video_buffer[START_OF_DISPLAYABLE_REGION + i] = video_buffer[(rows_to_move * vga.WIDTH) + START_OF_DISPLAYABLE_REGION + i];
|
||||
}
|
||||
|
@ -587,14 +587,14 @@ pub fn init() void {
|
|||
if (row != 0 or column != 0) {
|
||||
// Copy rows 7 down to make room for logo
|
||||
// If there isn't enough room, only take the bottom rows
|
||||
var row_offset = u16(0);
|
||||
var row_offset: u16 = 0;
|
||||
if (vga.HEIGHT - 1 - row < ROW_MIN) {
|
||||
row_offset = u16(ROW_MIN - (vga.HEIGHT - 1 - row));
|
||||
row_offset = ROW_MIN - (vga.HEIGHT - 1 - row);
|
||||
}
|
||||
|
||||
// Make a copy into the pages
|
||||
// Assuming that there is only one page
|
||||
var i = u16(0);
|
||||
var i: u16 = 0;
|
||||
while (i < row * vga.WIDTH) : (i += 1) {
|
||||
pages[0][i] = video_buffer[i];
|
||||
}
|
||||
|
@ -708,7 +708,7 @@ fn setPagesIncrementing() void {
|
|||
|
||||
fn defaultVariablesTesting(p_i: u8, r: u8, c: u8) void {
|
||||
expectEqual(test_colour, colour);
|
||||
expectEqual(u16(test_colour) << 8, blank);
|
||||
expectEqual(@as(u16, test_colour) << 8, blank);
|
||||
expectEqual(p_i, page_index);
|
||||
expectEqual(r, row);
|
||||
expectEqual(c, column);
|
||||
|
@ -756,7 +756,7 @@ test "updateCursor" {
|
|||
vga.initTest();
|
||||
defer vga.freeTest();
|
||||
|
||||
vga.addTestParams("updateCursor", u16(0), u16(0));
|
||||
vga.addTestParams("updateCursor", @as(u16, 0), @as(u16, 0));
|
||||
|
||||
// Pre testing
|
||||
defaultAllTesting(0, 0, 0);
|
||||
|
@ -779,7 +779,7 @@ test "getCursor zero" {
|
|||
vga.initTest();
|
||||
defer vga.freeTest();
|
||||
|
||||
vga.addTestParams("getCursor", u16(0));
|
||||
vga.addTestParams("getCursor", @as(u16, 0));
|
||||
|
||||
// Pre testing
|
||||
defaultAllTesting(0, 0, 0);
|
||||
|
@ -802,7 +802,7 @@ test "getCursor EEF" {
|
|||
vga.initTest();
|
||||
defer vga.freeTest();
|
||||
|
||||
vga.addTestParams("getCursor", u16(0x0EEF));
|
||||
vga.addTestParams("getCursor", @as(u16, 0x0EEF));
|
||||
|
||||
// Pre testing
|
||||
defaultAllTesting(0, 0, 0);
|
||||
|
@ -993,7 +993,7 @@ test "putEntryAt in displayable region page_index is not 0" {
|
|||
if (i == 0) {
|
||||
expectEqual(ones, char);
|
||||
} else {
|
||||
expectEqual(u16(0), char);
|
||||
expectEqual(@as(u16, 0), char);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1016,7 +1016,7 @@ test "putEntryAt in displayable region page_index is not 0" {
|
|||
} else if (i == 0) {
|
||||
expectEqual(ones, c);
|
||||
} else {
|
||||
expectEqual(u16(0), c);
|
||||
expectEqual(@as(u16, 0), c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2036,7 +2036,7 @@ test "init 0,0" {
|
|||
vga.initTest();
|
||||
defer vga.freeTest();
|
||||
|
||||
vga.addTestParams("getCursor", u16(0));
|
||||
vga.addTestParams("getCursor", @as(u16, 0));
|
||||
|
||||
vga.addRepeatFunction("entryColour", vga.orig_entryColour);
|
||||
vga.addRepeatFunction("entry", vga.orig_entry);
|
||||
|
@ -2153,7 +2153,7 @@ fn rt_printString() void {
|
|||
print(text);
|
||||
|
||||
// Check the video memory
|
||||
var counter = u32(0);
|
||||
var counter: u32 = 0;
|
||||
for (video_buffer) |buf| {
|
||||
if (counter < text.len and buf == vga.entry(text[counter], colour)) {
|
||||
counter += 1;
|
||||
|
|
|
@ -186,7 +186,7 @@ inline fn getPortData(index: u8) u8 {
|
|||
/// Both combined into 1 byte for the colour to be displayed.
|
||||
///
|
||||
pub fn entryColour(fg: u4, bg: u4) u8 {
|
||||
return u8(fg) | u8(bg) << 4;
|
||||
return fg | @as(u8, bg) << 4;
|
||||
}
|
||||
|
||||
///
|
||||
|
@ -201,7 +201,7 @@ pub fn entryColour(fg: u4, bg: u4) u8 {
|
|||
/// A VGA entry.
|
||||
///
|
||||
pub fn entry(char: u8, colour: u8) u16 {
|
||||
return u16(char) | u16(colour) << 8;
|
||||
return char | @as(u16, colour) << 8;
|
||||
}
|
||||
|
||||
///
|
||||
|
@ -237,10 +237,10 @@ pub fn updateCursor(x: u16, y: u16) void {
|
|||
/// The linear cursor position.
|
||||
///
|
||||
pub fn getCursor() u16 {
|
||||
var cursor = u16(0);
|
||||
var cursor: u16 = 0;
|
||||
|
||||
cursor |= u16(getPortData(REG_CURSOR_LOCATION_LOW));
|
||||
cursor |= u16(getPortData(REG_CURSOR_LOCATION_HIGH)) << 8;
|
||||
cursor |= getPortData(REG_CURSOR_LOCATION_LOW);
|
||||
cursor |= @as(u16, getPortData(REG_CURSOR_LOCATION_HIGH)) << 8;
|
||||
|
||||
return cursor;
|
||||
}
|
||||
|
@ -303,34 +303,34 @@ test "entryColour" {
|
|||
var fg = COLOUR_BLACK;
|
||||
var bg = COLOUR_BLACK;
|
||||
var res = entryColour(fg, bg);
|
||||
expectEqual(u8(0x00), res);
|
||||
expectEqual(@as(u8, 0x00), res);
|
||||
|
||||
fg = COLOUR_LIGHT_GREEN;
|
||||
bg = COLOUR_BLACK;
|
||||
res = entryColour(fg, bg);
|
||||
expectEqual(u8(0x0A), res);
|
||||
expectEqual(@as(u8, 0x0A), res);
|
||||
|
||||
fg = COLOUR_BLACK;
|
||||
bg = COLOUR_LIGHT_GREEN;
|
||||
res = entryColour(fg, bg);
|
||||
expectEqual(u8(0xA0), res);
|
||||
expectEqual(@as(u8, 0xA0), res);
|
||||
|
||||
fg = COLOUR_BROWN;
|
||||
bg = COLOUR_LIGHT_GREEN;
|
||||
res = entryColour(fg, bg);
|
||||
expectEqual(u8(0xA6), res);
|
||||
expectEqual(@as(u8, 0xA6), res);
|
||||
}
|
||||
|
||||
test "entry" {
|
||||
const colour = entryColour(COLOUR_BROWN, COLOUR_LIGHT_GREEN);
|
||||
expectEqual(u8(0xA6), colour);
|
||||
expectEqual(@as(u8, 0xA6), colour);
|
||||
|
||||
// Character '0' is 0x30
|
||||
var video_entry = entry('0', colour);
|
||||
expectEqual(u16(0xA630), video_entry);
|
||||
expectEqual(@as(u16, 0xA630), video_entry);
|
||||
|
||||
video_entry = entry(0x55, colour);
|
||||
expectEqual(u16(0xA655), video_entry);
|
||||
expectEqual(@as(u16, 0xA655), video_entry);
|
||||
}
|
||||
|
||||
test "updateCursor width out of bounds" {
|
||||
|
@ -419,8 +419,8 @@ test "updateCursor width and height-1 out of bounds" {
|
|||
}
|
||||
|
||||
test "updateCursor in bounds" {
|
||||
var x = u8(0x0A);
|
||||
var y = u8(0x0A);
|
||||
var x: u8 = 0x0A;
|
||||
var y: u8 = 0x0A;
|
||||
const expected = y * WIDTH + x;
|
||||
|
||||
var expected_upper = @truncate(u8, (expected >> 8) & 0x00FF);
|
||||
|
@ -435,32 +435,32 @@ test "updateCursor in bounds" {
|
|||
}
|
||||
|
||||
test "getCursor 1: 10" {
|
||||
const expect = u16(10);
|
||||
const expect: u16 = 10;
|
||||
|
||||
// Mocking out the arch.outb and arch.inb calls for getting the hardware cursor:
|
||||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", PORT_ADDRESS, REG_CURSOR_LOCATION_LOW);
|
||||
arch.addTestParams("inb", PORT_DATA, u8(10));
|
||||
arch.addTestParams("inb", PORT_DATA, @as(u8, 10));
|
||||
arch.addTestParams("outb", PORT_ADDRESS, REG_CURSOR_LOCATION_HIGH);
|
||||
arch.addTestParams("inb", PORT_DATA, u8(0));
|
||||
arch.addTestParams("inb", PORT_DATA, @as(u8, 0));
|
||||
|
||||
const actual = getCursor();
|
||||
expectEqual(expect, actual);
|
||||
}
|
||||
|
||||
test "getCursor 2: 0xBEEF" {
|
||||
const expect = u16(0xBEEF);
|
||||
const expect: u16 = 0xBEEF;
|
||||
|
||||
// Mocking out the arch.outb and arch.inb calls for getting the hardware cursor:
|
||||
arch.initTest();
|
||||
defer arch.freeTest();
|
||||
|
||||
arch.addTestParams("outb", PORT_ADDRESS, REG_CURSOR_LOCATION_LOW);
|
||||
arch.addTestParams("inb", PORT_DATA, u8(0xEF));
|
||||
arch.addTestParams("inb", PORT_DATA, @as(u8, 0xEF));
|
||||
arch.addTestParams("outb", PORT_ADDRESS, REG_CURSOR_LOCATION_HIGH);
|
||||
arch.addTestParams("inb", PORT_DATA, u8(0xBE));
|
||||
arch.addTestParams("inb", PORT_DATA, @as(u8, 0xBE));
|
||||
|
||||
const actual = getCursor();
|
||||
expectEqual(expect, actual);
|
||||
|
@ -563,8 +563,8 @@ fn rt_correctCursorShape() void {
|
|||
///
|
||||
fn rt_setCursorGetCursor() void {
|
||||
// The known locations
|
||||
const x = u16(10);
|
||||
const y = u16(20);
|
||||
const x: u16 = 10;
|
||||
const y: u16 = 20;
|
||||
|
||||
// Save the previous location
|
||||
const prev_linear_loc = getCursor();
|
||||
|
|
|
@ -293,7 +293,7 @@ fn Mock() type {
|
|||
|
||||
// Test that the types match
|
||||
const expect_type = comptime getDataElementType(ExpectedType);
|
||||
expectEqual(expect_type, DataElementType(elem));
|
||||
expectEqual(expect_type, @as(DataElementType, elem));
|
||||
|
||||
// Types match, so can use the expected type to get the actual data
|
||||
const actual_value = getDataValue(ExpectedType, elem);
|
||||
|
@ -323,7 +323,7 @@ fn Mock() type {
|
|||
|
||||
const ret = getDataValue(DataType, action.data);
|
||||
|
||||
expectEqual(DataElementType(action.data), expect_type);
|
||||
expectEqual(@as(DataElementType, action.data), expect_type);
|
||||
|
||||
// Free the node
|
||||
action_list.*.destroyNode(action_node, GlobalAllocator);
|
||||
|
@ -429,7 +429,7 @@ fn Mock() type {
|
|||
const expect_type = comptime getDataElementType(expected_function);
|
||||
|
||||
// Test that the types match
|
||||
expectEqual(expect_type, DataElementType(test_element));
|
||||
expectEqual(expect_type, @as(DataElementType, test_element));
|
||||
|
||||
// Types match, so can use the expected type to get the actual data
|
||||
const actual_function = getDataValue(expected_function, test_element);
|
||||
|
@ -462,7 +462,7 @@ fn Mock() type {
|
|||
const expect_type = comptime getDataElementType(expected_function);
|
||||
|
||||
// Test that the types match
|
||||
expectEqual(expect_type, DataElementType(test_element));
|
||||
expectEqual(expect_type, @as(DataElementType, test_element));
|
||||
|
||||
// Types match, so can use the expected type to get the actual data
|
||||
const actual_function = getDataValue(expected_function, test_element);
|
||||
|
@ -520,7 +520,7 @@ fn Mock() type {
|
|||
switch (action.action) {
|
||||
ActionType.TestValue, ActionType.ConsumeFunctionCall => {
|
||||
// These need to be all consumed
|
||||
std.debug.panic("Unused testing value: Type: {}, value: {} for function '{}'\n", action.action, DataElementType(action.data), next.key);
|
||||
std.debug.panic("Unused testing value: Type: {}, value: {} for function '{}'\n", action.action, @as(DataElementType, action.data), next.key);
|
||||
},
|
||||
ActionType.RepeatFunctionCall => {
|
||||
// As this is a repeat action, the function will still be here
|
||||
|
|
|
@ -70,11 +70,11 @@ pub fn init() void {
|
|||
// User defined mocked functions
|
||||
|
||||
pub fn orig_entryColour(fg: u4, bg: u4) u8 {
|
||||
return u8(fg) | u8(bg) << 4;
|
||||
return fg | @as(u8, bg) << 4;
|
||||
}
|
||||
|
||||
pub fn orig_entry(uc: u8, c: u8) u16 {
|
||||
return u16(uc) | u16(c) << 8;
|
||||
return uc | @as(u16, c) << 8;
|
||||
}
|
||||
|
||||
pub fn mock_updateCursor(x: u16, y: u16) void {
|
||||
|
|
Loading…
Reference in a new issue