95b395ff8401ba24f4d1579746aaeeca651276c6
[fifth.git] / emulator / charput.inc
1 ; part of virtual processor, emulator for FIFTH\r
2 \r
3 xcharput:\r
4         mov     eax, [es:edi]   ; chary\r
5         mov     [chary], eax\r
6         mov     ecx, [es:edi+4] ; charx\r
7         mov     eax, [es:edi+8] ; addrdest\r
8         add     eax, [xms_addr]\r
9         mov     ebx, [es:eax]\r
10         mov     [sizex], ebx\r
11         add     eax, 8\r
12         add     eax, ecx\r
13         push    eax\r
14         sub     edx, edx\r
15         mov     eax, [chary]\r
16         mul     dword [sizex]\r
17         pop     ebx\r
18         add     eax, ebx\r
19         mov     [addrdst], eax\r
20         mov     eax, [es:edi+12]\r
21         add     eax, [xms_addr]\r
22         mov     [addrsrc], eax\r
23         mov     al, [es:edi+16]\r
24         mov     [colorbg], al\r
25         mov     al, [es:edi+20]\r
26         mov     [colorfg], al\r
27         add     edi, 24\r
28 \r
29         mov     [linenum], 8\r
30 charl1:\r
31         mov     eax, [addrsrc]\r
32         mov     bx, [es:eax]\r
33         mov     edx, [addrdst]\r
34         mov     cx, 8\r
35 charl2:\r
36         dec     cx\r
37         bt      bx, cx\r
38         jnc     charl3\r
39         mov     al, [colorfg]\r
40         jmp     charl4\r
41 charl3:\r
42         mov     al, [colorbg]\r
43 charl4:\r
44         mov     [es:edx], al\r
45         inc     edx\r
46         cmp     cx, 0\r
47         jne      charl2\r
48 \r
49         mov     eax, [sizex]\r
50         add     [addrdst], eax\r
51         inc     [addrsrc]\r
52         dec     [linenum]\r
53         mov     al, [linenum]\r
54         cmp     al, 0\r
55         jne     charl1\r
56 \r
57         jmp     emu\r
58 \r
59 colorfg db 0\r
60 colorbg db 0\r
61 charx   dd 0\r
62 chary   dd 0\r
63 addrsrc dd 0\r
64 addrdst dd 0\r
65 sizex   dd 0\r
66 linenum db 0\r