about summary refs log tree commit diff stats
path: root/baremetal/101screen.subx
blob: 225efeec76babe6676f5ed41b1f253463c150ab0 (plain) (blame)
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
# Primitives for screen control.

== code

pixel:  # screen: (addr screen), x: int, y: int, color: int
    # . prologue
    55/push-ebp
    89/<- %ebp 4/r32/esp
    # . save registers
    50/push-eax
    51/push-ecx
    # ecx = screen
    8b/-> *(ebp+8) 1/r32/ecx
    81 7/subop/compare %ecx 0/imm32
    {
      75/jump-if-!= break/disp8
      # bounds checks
      8b/-> *(ebp+0xc) 0/r32/eax
      3d/compare-eax-and 0/imm32
      7c/jump-if-< $pixel:end/disp8
      3d/compare-eax-and 0x400/imm32/1024
      7d/jump-if->= $pixel:end/disp8
      8b/-> *(ebp+0x10) 0/r32/eax
      3d/compare-eax-and 0/imm32
      7c/jump-if-< $pixel:end/disp8
      3d/compare-eax-and 0x300/imm32/768
      7d/jump-if->= $pixel:end/disp8
      # eax = y*1024 + x
      8b/-> *(ebp+0x10) 0/r32/eax
      c1/shift 4/subop/left %eax 0xa/imm8
      03/add-> *(ebp+0xc) 0/r32/eax
      # eax += location of frame buffer
      03/add-> *0x7f28 0/r32/eax
      # *eax = color
      8b/-> *(ebp+0x14) 1/r32/ecx
      88/byte<- *eax 1/r32/CL
      # return
      eb $pixel:end/disp8
    }
    # TODO: fake screen
$pixel:end:
    # . restore registers
    59/pop-to-ecx
    58/pop-to-eax
    # . epilogue
    89/<- %esp 5/r32/ebp
    5d/pop-to-ebp
    c3/return
="w"> python DOCDIR ?= doc/pydoc PREFIX ?= /usr/local PYTHONOPTIMIZE ?= 2 CWD = $(shell pwd) EDITOR ?= vim DEST ?= $(shell $(PYTHON) -c 'import sys; sys.stdout.write( \ [p for p in sys.path if "site" in p][0])' 2> /dev/null)/ranger .PHONY: all compile clean doc cleandoc edit push test commit \ install uninstall info snapshot minimal_snapshot info: @echo 'This makefile provides shortcuts for common tasks.' @echo 'make clean: Remove all unnecessary files (.pyc, .pyo)' @echo 'make cleandoc: Remove the pydoc documentation' @echo 'make doc: Create the pydoc documentation' @echo 'make install: Install ranger' @echo 'make snapshot: Create a tar.gz of the current git revision' @echo @echo 'For developers:' @echo 'make commit: Test and commit the changes' @echo 'make test: Run all unittests.' @echo 'make push: push the changes via git' @echo 'make edit: open all relevant files in your editor' all: test install compile: clean @echo 'Compiling...' python -m compileall -q ranger PYTHONOPTIMIZE=$(PYTHONOPTIMIZE) python -m compileall -q ranger doc: cleandoc mkdir -p $(DOCDIR) cd $(DOCDIR); \ $(PYTHON) -c 'import pydoc, sys; \ sys.path[0] = "$(CWD)"; \ pydoc.writedocs("$(CWD)")' uninstall: @echo 'To uninstall ranger, please remove these files:' @echo $(DEST)'/*' @echo $(PREFIX)'/bin/ranger' @echo 'and optionally the config files at:' @echo '~/.ranger' install: compile @if [ '$(DEST)' == '/ranger' ]; then \ echo 'Cannot find a suitable destination for the files.'; \ false; \ fi @echo "Installing..." cp ranger.py $(PREFIX)/bin/ranger cp -ruT ranger $(DEST) chmod 755 $(PREFIX)/bin/ranger chmod -R +rX $(DEST) @echo '--------------------------------------' @echo 'Finished.' @echo 'If you use BASH or ZSH, you can activate an extra feature now:' @echo 'When you exit ranger, the directory of the current shell can be' @echo 'changed to the last visited directory in ranger. To do so, add' @echo 'this alias to your shell rc file (like ~/.bashrc):' @echo 'alias rng="source ranger ranger"' @echo 'And run ranger by typing rng.' cleandoc: test -d $(DOCDIR) && rm -f -- $(DOCDIR)/*.html clean: find . -regex [^\ ]\*.py[co]$ | xargs rm -f -- test: ./all_tests.py 1 edit: @$(EDITOR) ranger.py Makefile README COPYING HACKING INSTALL $(shell find ranger test -regex .\*py$ ) push: @for repo in $(shell git remote); do \ echo "Pushing to $$repo..."; \ git push $$repo master; \ done commit: test @git citool snapshot: git archive HEAD | gzip > $(NAME)-$(VERSION)-$(shell git rev-list HEAD | head -n 1 | cut -b 1-8).tar.gz minimal_snapshot: @echo 'This is not quite working well. I will abort now' && false git checkout -b no_help git rm -rf doc git rm -rf test git rm all_tests.py git rm TODO git commit -a -m'removed documentation' git archive HEAD | gzip > $(NAME)-$(VERSION)-$(shell git rev-list HEAD | head -n 1 | cut -b 1-8).tar.gz git reset --hard no_help^ git branch -D no_help