]> 4ch.mooo.com Git - 16.git/blob - 16/lib/x/MODEX.DEF
modified: 16/error.txt
[16.git] / 16 / lib / x / MODEX.DEF
1 ;------------------------------------------------------------\r
2 ;\r
3 ; MODEX.DEF - Include file\r
4 ; Copyright (c) 1993-1994 by Alessandro Scotti\r
5 ;\r
6 ;JUMPS\r
7 ;LOCALS
8 .model huge,c\r
9 \r
10 TRUE            EQU     1       ; Boolean constants\r
11 FALSE           EQU     0\r
12 \r
13 USE286  = FALSE                  ; TRUE enables 80286 instructions\r
14 USE386  = FALSE                  ; TRUE enables 80386 (and 80286) instructions\r
15 \r
16 IF USE286 EQ TRUE\r
17         P286\r
18 ENDIF\r
19 \r
20 IF USE386 EQ TRUE\r
21         P386\r
22         USE286  = TRUE\r
23 ENDIF\r
24 \r
25 MXVERSION       EQU     0128h   ; Library version (1.40)\r
26 \r
27 ;------------------------------------------------------------\r
28 ;\r
29 ; VGA definitions\r
30 ;\r
31 MISC    EQU     3C2h            ; Miscellaneous output\r
32 TS      EQU     3C4h            ; Timing Sequencer index register\r
33 GDC     EQU     3CEh            ; Graphics Data Controller index register\r
34 CRTC    EQU     3D4h            ; CRTC index register\r
35 STATUS  EQU     3DAh            ; Input Status register one\r
36 \r
37 ;------------------------------------------------------------\r
38 ;\r
39 ; Raster operators\r
40 ;\r
41 OP_SET          EQU     0\r
42 OP_MOVE         EQU     0       ; Same as OP_SET\r
43 OP_AND          EQU     1\r
44 OP_OR           EQU     2\r
45 OP_XOR          EQU     3\r
46 OP_TRANS        EQU     4\r
47 OP_ADD          EQU     5       ; Must be last op\r
48 \r
49 ;------------------------------------------------------------\r
50 ;\r
51 ; Polygon fill functions\r
52 ;\r
53 POLYSCANBUFSIZE EQU     4*1024\r
54 \r
55 ;------------------------------------------------------------\r
56 ; Macro to push registers, variables or flags onto the stack\r
57 ; Usage: .push "loc16"[,"loc16"...]\r
58 ; where "loc16" is a 16-bit register, a word-sized variable or the\r
59 ; keyword "FLAGS".\r
60 ; Exmpl: .push ax, flags, var1\r
61 ;        .pop  ax, flags, var1\r
62 ;\r
63 .push   MACRO   r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10\r
64     IFNB <r10>\r
65         .ERROR <.PUSH has more than 10 arguments>\r
66     ENDIF\r
67     IRP $reg, <r0, r1, r2, r3, r4, r5, r6, r7, r8, r9>\r
68         IFB <$reg>                      ;; Is argument blank?\r
69             EXITM                       ;; Yes, exit\r
70         ELSEIFIDNI <$reg>, <FLAGS>      ;; Is argument the keyword "FLAGS"?\r
71             pushf                       ;; Yes, push flags\r
72         ELSE\r
73             push    $reg                ;; Push argument\r
74         ENDIF\r
75     ENDM\r
76 ENDM\r
77 \r
78 ;------------------------------------------------------------\r
79 ; Macro to pop registers, variables or flags from the stack\r
80 ; Usage: .pop "loc16"[,"loc16"...]\r
81 ; where "loc16" is a 16-bit register, a word-sized variable or the\r
82 ; keyword "FLAGS".\r
83 ; Exmpl: .push ax, flags, var1\r
84 ;        .pop  ax, flags, var1\r
85 ;\r
86 .pop    MACRO   r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10\r
87     IFNB <r10>\r
88         .ERROR <.POP has more than 10 arguments>\r
89     ENDIF\r
90     IRP $reg, <r9, r8, r7, r6, r5, r4, r3, r2, r1, r0>\r
91         IFNB <$reg>                     ;; Is argument non-blank?\r
92             IFIDNI <$reg>, <FLAGS>      ;; Yes, is it the keyword "FLAGS"?\r
93                 popf                    ;; Yes, pop flags\r
94             ELSE\r
95                 pop     $reg            ;; Pop argument\r
96             ENDIF\r
97         ENDIF\r
98     ENDM\r
99 ENDM\r
100 \r
101 ;------------------------------------------------------------\r
102 ;\r
103 .enter  MACRO   localsize\r
104     IF USE286 EQ TRUE\r
105         enter   localsize, 0\r
106     ELSE\r
107         push    bp\r
108         mov     bp, sp\r
109         sub     sp, localsize\r
110     ENDIF\r
111 ENDM\r
112 \r
113 ;------------------------------------------------------------\r
114 ;\r
115 .leave  MACRO   argsize\r
116     IF USE286 EQ TRUE\r
117         leave\r
118     ELSE\r
119         mov     sp, bp\r
120         pop     bp\r
121     ENDIF\r
122     IFNB <argspace>\r
123         ret     argsize\r
124     ELSE\r
125         ret\r
126     ENDIF\r
127 ENDM\r
128 \r
129 ;------------------------------------------------------------\r
130 ;\r
131 .shr    MACRO   arg, count\r
132     IF USE286 EQ TRUE\r
133         shr     arg, count\r
134     ELSE\r
135         $temp = count\r
136         WHILE $temp GT 0\r
137             shr arg, 1\r
138             $temp = $temp-1\r
139         ENDM\r
140     ENDIF\r
141 ENDM\r
142 \r
143 ;------------------------------------------------------------\r
144 ;\r
145 .shl    MACRO   arg, count\r
146     IF USE286 EQ TRUE\r
147         shl     arg, count\r
148     ELSE\r
149         $temp = count\r
150         WHILE $temp GT 0\r
151             shl arg, 1\r
152             $temp = $temp-1\r
153         ENDM\r
154     ENDIF\r
155 ENDM\r
156 \r
157 ;------------------------------------------------------------\r
158 ;\r
159 ;.chk386 MACRO   name, jump\r
160 ;    IF USE386 EQ FALSE\r
161 ;        .OUT    "Warning: ", <name>, " needs a 386 or better to run!"\r
162 ;        jmp     @@jump\r
163 ;    ENDIF\r
164 ;ENDM\r
165 END\r