about summary refs log tree commit diff stats
path: root/apps/survey.subx
Commit message (Expand)AuthorAgeFilesLines
* 6014Kartik Agaram2020-02-171-2/+2
* 5924Kartik Agaram2020-01-271-52/+52
* 5897 - rename comparison instructionsKartik Agaram2020-01-161-37/+37
* 5883 - drop the `ref` keywordKartik Agaram2020-01-121-23/+23
* 5876 - address -> addrKartik Agaram2020-01-031-28/+28
* 5804Kartik Agaram2019-12-081-71/+71
* 5794Kartik Agaram2019-12-061-43/+43
* 5790Kartik Agaram2019-12-051-26/+26
* 5782 - fix a widespread bug with Heap-sizeKartik Agaram2019-11-301-1/+1
* 5765Kartik Agaram2019-11-261-3/+3
* 5715Kartik Agaram2019-10-261-22/+17
* 5714Kartik Agaram2019-10-251-80/+26
* 5700Kartik Agaram2019-10-171-1/+1
* 5698Kartik Agaram2019-10-151-69/+69
* 5675 - move helpers from subx-common into layersKartik Agaram2019-09-191-20/+20
* 5668 - start reorg to permit syntax sugar in layersKartik Agaram2019-09-191-8/+8
* 5661Kartik Agaram2019-09-151-2/+2
* 5607Kartik Agaram2019-09-011-2/+2
* 5600Kartik Agaram2019-08-311-10/+12
* 5592 - switch register names to lowercaseKartik Agaram2019-08-261-1304/+1304
* 5590Kartik Agaram2019-08-251-1/+1
* 5589Kartik Agaram2019-08-251-1/+1
* parsing *(reg+disp)Kartik Agaram2019-08-241-0/+1
* get desugar working on the commandlineKartik Agaram2019-08-131-1/+0
* better error message when get abortsKartik Agaram2019-08-121-8/+11
* 5499Kartik Agaram2019-07-311-1/+1
* 5485 - promote SubX to top-levelKartik Agaram2019-07-271-0/+4787
itter Kartik Agaram <vc@akkartik.com> 2020-12-26 16:38:01 -0800 7408' href='/akkartik/mu/commit/baremetal/README.md?h=hlt&id=55bdc910ec9ee41d4fef4d4ebf40e51d35e2ac25'>55bdc910 ^
88d2df2f ^

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

                                                                               
                                                   


                                                                            
 
                                         
                                                                         



                                                                             



                                           
                            
                                            
 
                                                                          
                                                     
 







                                                                           
 
                                                                         


                                                                      
 
                                                                                                          

                                                                      
Some apps written in SubX and Mu. Where the rest of this repo relies on a few
Linux syscalls, the apps in this subdirectory interface directly with hardware.
We still need the top-level and apps to build them.

I'd like to eventually test these programs on real hardware, and to that end
they are extremely parsimonious in the hardware they assume:

  0. Lots (more than 640KB/1MB[1]) of RAM
  1. Pure-graphics video mode (1024x768 pixels) in 256-color mode. At 8x8
     pixels per grapheme, this will give us 160x128 graphemes. But it's still
     an open question if it's reasonably widely supported by modern hardware.
     If it isn't, I'll downsize.
  2. Keyboard. Just a partial US keyboard for now.

That's it:
  * No wifi, no networking
  * No multitouch, no touchscreen, no mouse
  * No graphics acceleration
  * No virtual memory, no memory reclamation

Just your processor, gigabytes of RAM[1], a moderately-sized monitor and a
keyboard. (The mouse should also be easy to provide.)

We can't yet read from or write to disk, except for the initial load of the
program. Enabling access to lots of RAM gives up access to BIOS helpers for
the disk.

These programs don't convert to formats like ELF that can load on other
operating systems. There's also currently no code/data segment separation,
just labels and bytes. I promise not to write self-modifying code. Security
and sandboxing is still an open question.

Most programs here assume `main` starts at address 0x9000 (7KB or 14 disk
sectors past the BIOS entrypoint). See baremetal/boot.hex for details.

So far the programs have only been tested in Qemu and Bochs emulators.

[1] Though we might need to start thinking of [the PC memory map](https://wiki.osdev.org/Memory_Map_(x86))
as our programs grow past the first 512KB of memory. Writing to random
locations can damage hardware or corrupt storage devices.