Change bare "5" to more descriptive "recording_frame_duration_hundredths".
Create APPLE2Einterface events that allow interface to limit main loop speed.
Implement rate limiting on start_record and release limiting on stop_record.
During recording, simulation will not run at clock rate.
If the drag-and-dropped filename has no leading "/", assume it is
drag-and-dropped text. This matches the behavior of Chrome on Ubuntu,
for which dragging selected text onto GLFW is passed to the file drop
callback.
If the dragged selected text starts with "/", the drop callback will
still attempt to open it as a filename.
Introduce GLEW for GL extension management
Fix warnings about "&" used in logical-AND with precedence likely not matching programmer's intent
Fix a GL shader type incompatibility uint vs int in lores shader
Add Makefile.linux
Change every get_min_dimensions to return "width_height", which is
hopefully obviously a pair containing a width and height.
Change tuples in the writes map to "address_auxpage", which is
maybe a more descriptive type of a pair containing an address and an
aux page.
Inspired by http://maintainablecode.logdown.com/posts/158531-stdpair-considered-harmful
I kind of cheated - I used std::pairs but gave them descriptive typedefs.
Rename initialize_texture to initialize_texture_integer.
New function initialize_texture that loads a GL_RED texture, and
use it for hires and image shaders.
Don't scale texture values back to 0.0-1.0 in image and hires shaders.
Rename "texture" to "opengl_texture" for a touch more readability
and less ambiguity.
Switch hires and image textures to "opengl_texture".
Use coordinate scale for image textures and hires textures in shaders
and pass in as Uniforms
Change initialize_texture to return an object containing width and
height, since the GUI uses textport textures of various sizes.
Add scale factors to text, text80, and lores shaders and set them as Uniforms.
Make new texture function for making 2D textures instead of RECTANGLE
textures.
Pass in scale factor from texel coordinates to UV coordinates.
Change text and text80 fragment shaders to scale texel coordinates
to UV for sampler for font_texture.
Use sampler2D instead of sampler2DRect for font_texture
Move all libao operation into interface.cpp
This should have the result of removing all AV and GUI code from apple2e.cpp
OS code remaining in apple2e.cpp should basically be only file I/O, console I/O, and chrono.
Store all text and hgr writes in write() in a map.
Later, in apply_writes(), actually download all writes from the map.
This has the effect of downloading only the most recent write.
After implementation, this has the effect in FAST mode on my Mac of only reducing writes by between 0% and 4% in both QUADRADOODLE and LodeRunner. So probably not worth it. But maybe worth an interation on this which would mark rows and try to coalesce adjacent writes in X and Y to single texture updates.
Catch ALTCHAR but do nothing about it
Catch VID80 (80VID)
Add aux pages to interface.cpp
Plumb aux pages through apple2e.cpp display_write functions
Implement 80-column text shader using aux page
On cold-start, force Button0/OpenApple on for a short period
This is how cold-start (disk boot) is differentiated from plain RESET
Add padding widget that pads another widget on all sides
Add drag-and-drop functionality to widgets and manage through GLFW
Honor current time through all widget methods
Fix character encoding in text_widget (especially for ' ')
Add floppy_icon widget that manages drag-and-drop and drive motor (activity) light
Later move to vector graphic or bitmap
Add floppy eject and insert notification from APPLE2Einterface
Add activity notification through APPLE2Einterface
Optimize with -O2
Mouse/Trackpad drag across the screen emulates paddles
Click on the screen emulates button 0
Ignore reads from C020 (tape out)
Add BRA instruction for 65C02 (maybe not necessary)
Disable audio in FAST mode
Throttle a little better when audio is enabled - stopped stutter
Widget for Apple 2 screen (graphics and textport)
Make box be vertical or horizontal
Add spacer widget
Fix calls to draw, click, drag, release to reflect whole screen being a widget
Fix#16
GLFW doesn't pass through Mac CAPS lock key for some reason.
CAPS button in GUI works, though.
Implement more instructions, mostly for ChopLifter
DEC abs, X
INC abs, X
AND (ind), Y
AND abs, X
ROR abs
Now ChopLifter needs unimplemented SED! Probably uses decimal mode while printing score.
Set "then" at end of CPU loop to try to throttle better. Not sure it helps.