|
|
1.1 root 1: ; vi:set ts=8:
2:
3: ; nono
4: ; Copyright (C) 2025 nono project
5: ;
6: ; Redistribution and use in source and binary forms, with or without
7: ; modification, are permitted provided that the following conditions
8: ; are met:
9: ; 1. Redistributions of source code must retain the above copyright
10: ; notice, this list of conditions and the following disclaimer.
11: ; 2. Redistributions in binary form must reproduce the above copyright
12: ; notice, this list of conditions and the following disclaimer in the
13: ; documentation and/or other materials provided with the distribution.
14: ;
15: ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16: ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17: ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18: ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19: ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
20: ; BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21: ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
22: ; AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23: ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24: ; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25: ; SUCH DAMAGE.
26:
27: ; CAS.[BWL] Dc,Du,<ea>
28: ;
29: ; cc := *(ea) - Dc
30: ; If (Z), *(ea) := Du
31: ; Else Dc := *(ea)
32:
33: .xref hexstr_long
34: .include doscall.mac
35: .list
36: .cpu 68030
37:
38: PRINT .macro msg
39: pea.l msg
40: DOS _PRINT
41: addq.l #4,sp
42: .endm
43:
44: .offset 0
45: o_initea: .ds.l 1
46: o_exp_dc: .ds.l 1
47: o_exp_du: .ds.l 1
48: o_exp_ac: .ds.l 1
49: o_exp_au: .ds.l 1
50: o_exp_ea: .ds.l 1
51: o_inst: .ds.w 3
52: o_msg: .ds.b 0
53:
54: .text
55: .even
56:
57: ; d0-d1 汎用
58: ; d2-d3 Dc,Du 用
59: ; d4 <ea> 入出力用
60: ; d7 テスト番号
61: ; a2-a3 Ac,Au 用
62: ; a4 <ea>
63: ; a5 テストデータ
64:
65: start:
66: lea.l data(pc),a4
67:
68: moveq.l #0,d7
69: loop:
70: bsr do_test
71: addq.l #1,d7
72: cmpi.l #8,d7
73: bne loop
74:
75: DOS _EXIT
76:
77: do_test:
78: lea.l testdata,a5
79: move.l (a5,d7.l*4),a5
80: PRINT o_msg(a5)
81: ; Exec
82: movem.l initial(pc),d2-d3/a2-a3
83: move.l o_initea(a5),(a4)
84: jsr o_inst(a5)
85: check:
86: check_dc:
87: move.l o_exp_dc(a5),d1
88: cmp.l d1,d2
89: beq @f
90: pea.l msg_dc(pc)
91: move.l d1,-(sp)
92: move.l d2,-(sp)
93: bsr fail
94: lea.l 12(sp),sp
95: @@:
96: check_du:
97: move.l o_exp_du(a5),d1
98: cmp.l d1,d3
99: beq @f
100: pea.l msg_du(pc)
101: move.l d1,-(sp)
102: move.l d3,-(sp)
103: bsr fail
104: lea.l 12(sp),sp
105: @@:
106: check_ac:
107: move.l o_exp_ac(a5),d1
108: cmpa.l d1,a2
109: beq @f
110: pea.l msg_ac(pc)
111: move.l d1,-(sp)
112: move.l a2,-(sp)
113: bsr fail
114: lea.l 12(sp),sp
115: @@:
116: check_au:
117: move.l o_exp_au(a5),d1
118: cmpa.l d1,a3
119: beq @f
120: pea.l msg_au(pc)
121: move.l d1,-(sp)
122: move.l a3,-(sp)
123: bsr fail
124: lea.l 12(sp),sp
125: @@:
126: check_ea:
127: move.l o_exp_ea(a5),d1
128: cmp.l (a4),d1
129: beq @f
130: pea.l msg_ea(pc)
131: move.l d1,-(sp)
132: move.l (a4),-(sp)
133: bsr fail
134: lea.l 12(sp),sp
135: @@:
136: check_done:
137: rts
138:
139: ; arg: +$4.l actual
140: ; +$8.l expected
141: ; +$c.l name
142: fail:
143: PRINT msg_fail(pc)
144: move.l $c(sp),-(sp)
145: DOS _PRINT
146: addq.l #4,sp
147: PRINT msg_expects(pc)
148: move.l $8(sp),d0
149: lea.l hexbuf(pc),a0
150: bsr hexstr_long
151: PRINT hexbuf(pc)
152: PRINT msg_but(pc)
153: move.l $4(sp),d0
154: lea.l hexbuf(pc),a0
155: bsr hexstr_long
156: PRINT hexbuf(pc)
157: PRINT msg_crlf(pc)
158: rts
159:
160: ; d2-d3/a2-a3 の初期値
161: initial:
162: .dc.l 1, 2, 3, 4
163:
164: testdata:
165: .dc.l testdata0
166: .dc.l testdata1
167: .dc.l testdata2
168: .dc.l testdata3
169: .dc.l testdata4
170: .dc.l testdata5
171: .dc.l testdata6
172: .dc.l testdata7
173:
174: ; <ea> の初期値
175: ; Dc, Du, Ac, Au, <ea> の期待値
176: ; 実行する命令; rts
177: ; 表示するテスト名
178:
179: testdata0:
180: .dc.l 1
181: .dc.l 1, 2, 3, 4, 2
182: cas.l d2,d3,(a4)
183: rts
184: .dc.b "CAS Dc,Du,<ea> (EQ)",$d,$a,0
185: .even
186: testdata1:
187: .dc.l 0
188: .dc.l 0, 2, 3, 4, 0
189: cas.l d2,d3,(a4)
190: rts
191: .dc.b "CAS Dc,Du,<ea> (NE)",$d,$a,0
192: .even
193: testdata2:
194: .dc.l 1
195: .dc.l 1, 2, 3, 4, 2
196: .dc.w $0ed4, $2+($b<<6) ; cas.l d2,a3,(a4)
197: rts
198: .dc.b "CAS Dc,Au,<ea> (EQ)",$d,$a,0
199: .even
200: testdata3:
201: .dc.l 0
202: .dc.l 0, 2, 3, 4, 0
203: .dc.w $0ed4, $2+($b<<6) ; cas.l d2,a3,(a4)
204: rts
205: .dc.b "CAS Dc,Au,<ea> (NE)",$d,$a,0
206: .even
207: testdata4:
208: .dc.l 3
209: .dc.l 1, 2, 3, 4, 2
210: .dc.w $0ed4, $a+($3<<6) ; cas.l a2,d3,(a4)
211: rts
212: .dc.b "CAS Ac,Du,<ea> (EQ)",$d,$a,0
213: .even
214: testdata5:
215: .dc.l 0
216: .dc.l 1, 2, 0, 4, 0
217: .dc.w $0ed4, $a+($3<<6) ; cas.l a2,d3,(a4)
218: rts
219: .dc.b "CAS Ac,Du,<ea> (NE)",$d,$a,0
220: .even
221: testdata6:
222: .dc.l 3
223: .dc.l 1, 2, 3, 4, 4
224: .dc.w $0ed4, $a+($b<<6) ; cas.l a2,a3,(a4)
225: rts
226: .dc.b "CAS Ac,Au,<ea> (EQ)",$d,$a,0
227: .even
228: testdata7:
229: .dc.l 0
230: .dc.l 1, 2, 0, 4, 0
231: .dc.w $0ed4, $a+($b<<6) ; cas.l a2,a3,(a4)
232: rts
233: .dc.b "CAS Ac,Au,<ea> (NE)",$d,$a,0
234: .even
235:
236: msg_dc: .dc.b "Dc",0
237: msg_du: .dc.b "Du",0
238: msg_ac: .dc.b "Ac",0
239: msg_au: .dc.b "Au",0
240: msg_ea: .dc.b "<ea>",0
241: msg_crlf:
242: .dc.b $d,$a,0
243: msg_fail:
244: .dc.b $9,"*** ",0
245: msg_expects:
246: .dc.b " expects ",0
247: msg_but:
248: .dc.b " but got ",0
249:
250: .bss
251: data:
252: .ds.l 1
253: hexbuf:
254: .ds.b 16
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.