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