Ep 12. - bad design: well, mapped memory area was small on a PC (19-bit), when VGA came along. Other platforms already had 24-bit or 32-bit address buses. This and the (in)famous I/O ports make things look bad. It was a cheap solution for an already established architecture, which had to remain backwards compatible (to things like EGA and CGA). - some many ports, this is because it was an "array of chips", all with their own port (vector graphics array) - case 0<<2: return (uint8_t*)0x00000; -> I read docu A0000 - strange bar at the bottom of the screen (in qemu), it seems, the fill-rectangle stops before reaching the bottom. Timing issue in emulators (bochs and qemu), happens with tcc/gcc, not with clang (optimizations?) - Some more links on VGA programming without a BIOS http://bos.asmhackers.net/docs/vga_without_bios/docs/ Ep. 13: - Don't agree with "everything implement as pixel"! See osdev comments on that. At least a note on, yes we do it here for educational reasons the same way we are using 320x200x8 and not something multi-planar would be an idea. - Why color as property of a widget? - Why not call the base method in composite widget getFocus? - Colors shouldn't theybe 0000aa instead of 0000a8? Ep. 14: - I would actually do a console doing serial/VGA text and then later VGA graphics console (like xconsole), mentioned at the end of the video. good. - the mouse cursor gets reddrawn? I would actually introduce the concept of sprites and memory to VGA masking for fonts and the mouse cursor - Readrawing the whole desktop when the mouse cursor moves? - Do not test in putpixel, make it fatal, make sure the mouse drawing routine protects against writting outisde of the screen. I don't think automatically cutting of drawing areas is the way to go, especially if partial redraws must be implemented later. - Z-buffers would be nice to introduce, but as there is no memory manager yet we cannot allocate 320x200=64k yet. Could we implement an alloca? Or just a fixed buffer in the video driver? - window move doesn't cover borders and corner cases like when the mouse leaves the area of the window while dragging (thusly requiring us to disable dragging) - should a desktop paint the mouse cursor and implement a mouse handler? This also means the interrupt handler directly calls GUI routines, this cannot be good. A realistic design would implement an event queue here.. Ep. 15 - eflags 0x202, magic?! what does it mean? Also iret should be explained once more in order to understand the packed structure CPUState - we cannot get back to the main stack, we should have a schedule_stop, so we can go back into the main thread and terminate the kernel properly - not very obvious this is IRQ 0: if(interrupt == hardwareInterruptOffset) better explicit Ep. 16 - how to get a good place for the heap maybe it's part of the multiboot grub structure? or we need to ask the bios for the memory layout? Ep. 17 - did another network driver RTL8137, deviating heavily from tutorial, also answering QEMU ARP requests first (in user network mode) - malloc -> memalign or aligned_alloc instead of playing with +16 &0f and stuff like that - garbage descriptors, yes, it is weird, but in hardware there are usually reasons, why it is done like this. Ep. 18 - qemu and a user network with -netdev user,id=net0,net=10.0.0.0/24,host=10.0.0.2,dhcpstart=10.0.0.16,hostfwd=tcp::8080-:80,hostfwd=udp::8081-:81 gives us very fast access to sort of a pre-configured network This gives the ARP on the first UDP/TCP packet Ep. A01 - why 65535 handlers? So many?, a for all uint16_t possible types of ethernet types, this means wasting 128 for a really sparse switch. -> I would do a hash from protocols to slots, from slots to handlers - wireshark and tcpdump for debugging Ep.20 - user space, Oberon has none. syscalls are there to sanitize values and calls from user processes