1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
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
|