-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathTODO.txt
182 lines (112 loc) · 6.09 KB
/
TODO.txt
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
HARDWARE:
* SD Cards: Writing.
* SD Cards: Replace SPI access by native access and by doing so, achieve
a 100% compatible and reliable system for SD, SDHC, SDCX.
* Think about advantages/disadvantages of removing ROM and replacing it by
prefilled RAM (could lead to very hard to debug effects, if some renegade
program overwrites "operating system" areas). On the other hand, we could
do it in a way, that after a RESET, the Monitor RAM area is re-filled from
a ROM.
* PS/2: Refactor scancode conversion to be more table/ROM like and less
like a huge array of multiplexers
* Refactor TIL and TIL Mask to support 8 digits / 32 bits
NEXYS4DDR HARDWARE:
* Add support for Ethernet, e.g. LOAD/SAVE of files.
DE10-Nano HARDWARE:
* Port QNICE-FPGA to the DE10-Nano
MEGA65 HARDWARE:
* Support newer board revisions than MEGA65R2
* Improve keyboard: Remove key doubling glitches
* Support both SD card slots. In a step one, we could implement a similar
smart switching mechanism than the MEGA65, so it would be a hardware-only
feature. Later, we could support two SD cards simultaneously, but this would
need a Monitor enhancement.
* Support somehow this mega cool floppy drive
* Create a small open hardware project: Serial-to-USB via FTDI using one of
the two joystick ports
MONITOR:
* Get rid of the hardcoded keyboard locale
ASSEMBLER STANDARD LIBs (WITHIN MONITOR):
* Add writing to SD card support / FAT32 support
* Finalize 32 bit arithmetic (muls32, divs32)
* String libraries: Switchable locales? UTF8 support?
(Or - as an alternative to this fully fledged solution: Can we implement a
workaround that kind of works most of the time? E.g. a translation mechanism
that checks STDIN/STDOUT and acts accordingly, e.g.
if STDIN=UART and BS is pressed, then assume UTF-8, but if STDIN=USB and
BS is pressed, then assume 8859-15? And similar behaviour for
non-ASCII chars like "ä"? Mapping depending on STDIN/STDOUT combinations?
And always storing single-byte characters? That would mean, that we e.g.
translate some selected chars from UTF-8 to 8859-15 while entering them
via STDIN=UART. More thoughts to be invested here.)
* Floating point support (in software? or in hardware? or only in the C lib
and not at all on the monitor's level?)
EMULATOR:
* Test, if compilation and running works under Windows
* WASM: Ability to upload .out files (directly fill them into RAM?) and
ability to mount FAT32 file systems via upload
* Emulate all VGA register commands
* WASM: Investigate if switching the WebGL context to high performance mode
makes sense; currently we run on the low performance mode on most browsers,
which means on Mac Books that the low performance GPU is used. Currently it
looks like this works absolutely well enough, but nevertheless investigating
this topic might be worth a try.
+ Reference Emscripten Changelog.md: 1.39.9 searcch for #10505
+ https://www.khronos.org/registry/webgl/specs/latest/1.0/
and search for "powerPreference"
* macOS only: Make file option for creating a installable/clickable Mac
executable (learn how to do that first and also how to sign). Maybe the
demo disk image from qnice-fpga.com should also be mounted there by default
(but still other images should be mountable, too)
* U.S. keyboard support
* Homogeneous code style like vaxmans original style
(pointers, indentation, etc.) => try to find and use a coding style
modification tool and throughly check that no bugs are introduced
* Better support for window resizing: offer some presets incl. aspect ratios
(see above) using Q> commands and maybe additionally also using ALT+<key>
combinations or a small "windowed menu" building on the speed regulator
window "system" . Optionally, as a bonus: Research menu items in SDL and
offer this via menus (seems to need very platformm specific code;
plugins/open source available?)
* Improve the Full Screen mode by allowing various aspect ratios such as
1.8:1 which is optimal for Q-TRIS, or standards like 4:3 and 16:9.
* Support High-DPI Mode (needs to be signed on Mac?)
NATIVE TOOLCHAIN: ASSEMBLER:
* Get rid of hardcoded gcc in the assembler/asm script for precompiling.
Use tools/detect.include. But this needs thorough testing, if for example
the precompiler invokation works the same in clang vs. gcc.
VBCC TOOLCHAIN: C COMPILER:
* Update to newer version
* Fix or obtain bugfix for -opt-speed (see doc/best-practices.md)
* Check/validate correct register bank usage
* Function entry points: remove superflous register MOVEs
* Optimization: Correct "costs", so that e.g. in -O3 constants are
loaded in to registers in a loop instead of e.g doing SUB 1, @R1++
* Code generation for 16bit multiplication: EAE wait code as soon as necessary
(currently no wait code is being generated, maybe this becomes necessary
when we switch to 100 MHz)
VBCC TOOLCHAIN: C STANDARD LIB:
* Add support for float and double
* Enhance mul32_div32.c by testing much more cases for the 32bit
multiplication, because the new _lmul.s has not been thoroughly tested,
yet. Also test signed and unsigned.
* Replace more 32bit math functions (div, mod, shl, shr) by faster assembler
versions. When doing div and mod, optimize by using static variables
that check the latest parameters and optimize mod (because the 32bit
div routine generates also the mode). But this would not be threadsafe.
VBCC TOOLCHAIN: MONITOR-LIB:
* Rewrite in pure assembler to avoid overhead.
* Add all meaningful monitor functions.
DEMOS:
* Basic Interpreter
* Forth Interpreter
* VGA Textmode games: BreakOut, Snake, Pac Man, 2048
* VGA games: Q-Chess
* HyperRAM: Finalize "The Matrix Demo" or create something similar
DOCUMENTATION:
* Improve the overall documentation. Start with improving doc/README.md:
Nearly each bullet point in the "Basics" section would deserve one or
more own chapters. Then we need more documentation on how to program in
Assembler and in C. Possibly also the dist_kit folder needs some explanation
of how to use the folder, how to use the include files, etc.
* Add the PDF or HTML documentation version of the VBCC toolchain.