1/*  *********************************************************************
2    *  Broadcom Common Firmware Environment (CFE)
3    *
4    *  PromICE debug routines			File: promice.S
5    *
6    *  Some stackless, memoryless routines for writing debug messages
7    *  to the PromICE AI2 port
8    *
9    *  Author:  Mitch Lichtenberg
10    *
11    *********************************************************************
12    *
13    *  Copyright 2000,2001,2003
14    *  Broadcom Corporation. All rights reserved.
15    *
16    *  This software is furnished under license and may be used and
17    *  copied only in accordance with the following terms and
18    *  conditions.  Subject to these conditions, you may download,
19    *  copy, install, use, modify and distribute modified or unmodified
20    *  copies of this software in source and/or binary form.  No title
21    *  or ownership is transferred hereby.
22    *
23    *  1) Any source code used, modified or distributed must reproduce
24    *     and retain this copyright notice and list of conditions
25    *     as they appear in the source file.
26    *
27    *  2) No right is granted to use any trade name, trademark, or
28    *     logo of Broadcom Corporation.  The "Broadcom Corporation"
29    *     name may not be used to endorse or promote products derived
30    *     from this software without the prior written permission of
31    *     Broadcom Corporation.
32    *
33    *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
34    *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
35    *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
36    *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
37    *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
38    *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
39    *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
40    *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
41    *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
42    *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
43    *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
44    *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
45    *     THE POSSIBILITY OF SUCH DAMAGE.
46    ********************************************************************* */
47
48#include "promice.h"
49
50		.text
51
52#ifdef _PROMICE_AI2_
53
54#define ZERO_OFFSET	(0)
55#define ONE_OFFSET	(1)
56#define DATA_OFFSET	(2)
57#define STATUS_OFFSET	(3)
58#define TDA 0x01 	/* Target data available */
59#define HDA 0x02 	/* Host data available */
60#define OVR 0x04 	/* Host data overflow */
61
62/*
63 * Trashes: ESI, AX
64 */
65
66		.section .pminit_text,"xr"
67
68/*  *********************************************************************
69    *  AI2_OUTSTR
70    *
71    *  Write a string to the PromICE serial port.  We use this
72    *  routine in assembly code before the memory is working
73    *  so it really, really tries to conserve registers.
74    *  In particular, the null-terminated string it reads
75    *  is placed at the return address of this routine!
76    *  So: in memory you will see:
77    *
78    *               movl $message,%esi
79    *               jmp  ai2_outstr
80    *  message:     .asciz "your message goes here"
81    *
82    *               more code goes here.
83    *
84    *  AI2_OUTSTR jumps to the byte immediately following the
85    *  null byte in the string.
86    *
87    *  Input parameters:
88    *  	   ESI - points to message to display
89    *
90    *  Return value:
91    *  	   nothing (ESI will contain return address)
92    *
93    *  Registers used:
94    *  	   ESI - modified
95    *  	   AX
96    ********************************************************************* */
97
98
99		.globl	ai2_outstr
100ai2_outstr:
101
102wait1:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
103		movb	(PROMICE_LOC+STATUS_OFFSET),%al
104		movb	(PROMICE_LOC+STATUS_OFFSET),%al
105
106		test	$TDA,%al
107		jnz	wait1
108
109		movb	(%esi),%ah
110		inc	%esi
111		or	%ah,%ah
112		jz	ai2_outdone
113
114		movb	(PROMICE_LOC+ONE_OFFSET),%al
115
116		rcr	$1,%ah
117		jc	2f
118		movb	(PROMICE_LOC+ZERO_OFFSET),%al
119		jmp	1f
1202:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1211:
122
123		rcr	$1,%ah
124		jc	2f
125		movb	(PROMICE_LOC+ZERO_OFFSET),%al
126		jmp	1f
1272:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1281:
129
130		rcr	$1,%ah
131		jc	2f
132		movb	(PROMICE_LOC+ZERO_OFFSET),%al
133		jmp	1f
1342:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1351:
136
137		rcr	$1,%ah
138		jc	2f
139		movb	(PROMICE_LOC+ZERO_OFFSET),%al
140		jmp	1f
1412:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1421:
143
144		rcr	$1,%ah
145		jc	2f
146		movb	(PROMICE_LOC+ZERO_OFFSET),%al
147		jmp	1f
1482:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1491:
150
151		rcr	$1,%ah
152		jc	2f
153		movb	(PROMICE_LOC+ZERO_OFFSET),%al
154		jmp	1f
1552:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1561:
157
158		rcr	$1,%ah
159		jc	2f
160		movb	(PROMICE_LOC+ZERO_OFFSET),%al
161		jmp	1f
1622:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1631:
164
165		rcr	$1,%ah
166		jc	2f
167		movb	(PROMICE_LOC+ZERO_OFFSET),%al
168		jmp	1f
1692:		movb	(PROMICE_LOC+ONE_OFFSET),%al
1701:
171
172		movb	(PROMICE_LOC+ONE_OFFSET),%al
173
174		jmp	wait1
175
176
177ai2_outdone:	jmp	*%esi
178
179
180
181/*  *********************************************************************
182    *  AI2_OUTWORD
183    *
184    *  Writes an 8-digit hex number to the AI2 port.  This routine
185    *  is used when memory is not available, so it's ugly.
186    *
187    *  Input parameters:
188    *  	   EDX - number to display
189    *      EBX - return address (routine jumps here when done)
190    *
191    *  Return value:
192    *  	   nothing
193    *
194    *  Registers used:
195    *  	   EDX
196    *  	   EAX
197    ********************************************************************* */
198
199
200		.globl	ai2_outword
201ai2_outword:
202
203
204		rol	$4,%edx
205		movl	%edx,%eax
206		andl	$0x0F,%eax
207		add	$0x30,%al
208		cmpb	$0x39,%al
209		jbe	2f
210		add	$7,%al
2112:		movb	%al,%ah
212
213
2141:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
215		movb	(PROMICE_LOC+STATUS_OFFSET),%al
216		movb	(PROMICE_LOC+STATUS_OFFSET),%al
217
218		test	$TDA,%al
219		jnz	1b
220
221		movb	(PROMICE_LOC+ONE_OFFSET),%al
222
223		rcr	$1,%ah
224		jc	2f
225		movb	(PROMICE_LOC+ZERO_OFFSET),%al
226		jmp	1f
2272:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2281:
229
230		rcr	$1,%ah
231		jc	2f
232		movb	(PROMICE_LOC+ZERO_OFFSET),%al
233		jmp	1f
2342:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2351:
236
237		rcr	$1,%ah
238		jc	2f
239		movb	(PROMICE_LOC+ZERO_OFFSET),%al
240		jmp	1f
2412:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2421:
243
244		rcr	$1,%ah
245		jc	2f
246		movb	(PROMICE_LOC+ZERO_OFFSET),%al
247		jmp	1f
2482:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2491:
250
251		rcr	$1,%ah
252		jc	2f
253		movb	(PROMICE_LOC+ZERO_OFFSET),%al
254		jmp	1f
2552:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2561:
257
258		rcr	$1,%ah
259		jc	2f
260		movb	(PROMICE_LOC+ZERO_OFFSET),%al
261		jmp	1f
2622:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2631:
264
265		rcr	$1,%ah
266		jc	2f
267		movb	(PROMICE_LOC+ZERO_OFFSET),%al
268		jmp	1f
2692:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2701:
271
272		rcr	$1,%ah
273		jc	2f
274		movb	(PROMICE_LOC+ZERO_OFFSET),%al
275		jmp	1f
2762:		movb	(PROMICE_LOC+ONE_OFFSET),%al
2771:
278
279		movb	(PROMICE_LOC+ONE_OFFSET),%al
280
281/* ---------------------------------------------- */
282
283
284		rol	$4,%edx
285		movl	%edx,%eax
286		andl	$0x0F,%eax
287		add	$0x30,%al
288		cmpb	$0x39,%al
289		jbe	2f
290		add	$7,%al
2912:		movb	%al,%ah
292
293
2941:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
295		movb	(PROMICE_LOC+STATUS_OFFSET),%al
296		movb	(PROMICE_LOC+STATUS_OFFSET),%al
297
298		test	$TDA,%al
299		jnz	1b
300
301		movb	(PROMICE_LOC+ONE_OFFSET),%al
302
303		rcr	$1,%ah
304		jc	2f
305		movb	(PROMICE_LOC+ZERO_OFFSET),%al
306		jmp	1f
3072:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3081:
309
310		rcr	$1,%ah
311		jc	2f
312		movb	(PROMICE_LOC+ZERO_OFFSET),%al
313		jmp	1f
3142:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3151:
316
317		rcr	$1,%ah
318		jc	2f
319		movb	(PROMICE_LOC+ZERO_OFFSET),%al
320		jmp	1f
3212:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3221:
323
324		rcr	$1,%ah
325		jc	2f
326		movb	(PROMICE_LOC+ZERO_OFFSET),%al
327		jmp	1f
3282:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3291:
330
331		rcr	$1,%ah
332		jc	2f
333		movb	(PROMICE_LOC+ZERO_OFFSET),%al
334		jmp	1f
3352:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3361:
337
338		rcr	$1,%ah
339		jc	2f
340		movb	(PROMICE_LOC+ZERO_OFFSET),%al
341		jmp	1f
3422:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3431:
344
345		rcr	$1,%ah
346		jc	2f
347		movb	(PROMICE_LOC+ZERO_OFFSET),%al
348		jmp	1f
3492:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3501:
351
352		rcr	$1,%ah
353		jc	2f
354		movb	(PROMICE_LOC+ZERO_OFFSET),%al
355		jmp	1f
3562:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3571:
358
359		movb	(PROMICE_LOC+ONE_OFFSET),%al
360
361/* ---------------------------------------------- */
362
363
364		rol	$4,%edx
365		movl	%edx,%eax
366		andl	$0x0F,%eax
367		add	$0x30,%al
368		cmpb	$0x39,%al
369		jbe	2f
370		add	$7,%al
3712:		movb	%al,%ah
372
373
3741:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
375		movb	(PROMICE_LOC+STATUS_OFFSET),%al
376		movb	(PROMICE_LOC+STATUS_OFFSET),%al
377
378		test	$TDA,%al
379		jnz	1b
380
381		movb	(PROMICE_LOC+ONE_OFFSET),%al
382
383		rcr	$1,%ah
384		jc	2f
385		movb	(PROMICE_LOC+ZERO_OFFSET),%al
386		jmp	1f
3872:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3881:
389
390		rcr	$1,%ah
391		jc	2f
392		movb	(PROMICE_LOC+ZERO_OFFSET),%al
393		jmp	1f
3942:		movb	(PROMICE_LOC+ONE_OFFSET),%al
3951:
396
397		rcr	$1,%ah
398		jc	2f
399		movb	(PROMICE_LOC+ZERO_OFFSET),%al
400		jmp	1f
4012:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4021:
403
404		rcr	$1,%ah
405		jc	2f
406		movb	(PROMICE_LOC+ZERO_OFFSET),%al
407		jmp	1f
4082:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4091:
410
411		rcr	$1,%ah
412		jc	2f
413		movb	(PROMICE_LOC+ZERO_OFFSET),%al
414		jmp	1f
4152:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4161:
417
418		rcr	$1,%ah
419		jc	2f
420		movb	(PROMICE_LOC+ZERO_OFFSET),%al
421		jmp	1f
4222:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4231:
424
425		rcr	$1,%ah
426		jc	2f
427		movb	(PROMICE_LOC+ZERO_OFFSET),%al
428		jmp	1f
4292:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4301:
431
432		rcr	$1,%ah
433		jc	2f
434		movb	(PROMICE_LOC+ZERO_OFFSET),%al
435		jmp	1f
4362:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4371:
438
439		movb	(PROMICE_LOC+ONE_OFFSET),%al
440
441/* ---------------------------------------------- */
442
443
444		rol	$4,%edx
445		movl	%edx,%eax
446		andl	$0x0F,%eax
447		add	$0x30,%al
448		cmpb	$0x39,%al
449		jbe	2f
450		add	$7,%al
4512:		movb	%al,%ah
452
453
4541:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
455		movb	(PROMICE_LOC+STATUS_OFFSET),%al
456		movb	(PROMICE_LOC+STATUS_OFFSET),%al
457
458		test	$TDA,%al
459		jnz	1b
460
461		movb	(PROMICE_LOC+ONE_OFFSET),%al
462
463		rcr	$1,%ah
464		jc	2f
465		movb	(PROMICE_LOC+ZERO_OFFSET),%al
466		jmp	1f
4672:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4681:
469
470		rcr	$1,%ah
471		jc	2f
472		movb	(PROMICE_LOC+ZERO_OFFSET),%al
473		jmp	1f
4742:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4751:
476
477		rcr	$1,%ah
478		jc	2f
479		movb	(PROMICE_LOC+ZERO_OFFSET),%al
480		jmp	1f
4812:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4821:
483
484		rcr	$1,%ah
485		jc	2f
486		movb	(PROMICE_LOC+ZERO_OFFSET),%al
487		jmp	1f
4882:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4891:
490
491		rcr	$1,%ah
492		jc	2f
493		movb	(PROMICE_LOC+ZERO_OFFSET),%al
494		jmp	1f
4952:		movb	(PROMICE_LOC+ONE_OFFSET),%al
4961:
497
498		rcr	$1,%ah
499		jc	2f
500		movb	(PROMICE_LOC+ZERO_OFFSET),%al
501		jmp	1f
5022:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5031:
504
505		rcr	$1,%ah
506		jc	2f
507		movb	(PROMICE_LOC+ZERO_OFFSET),%al
508		jmp	1f
5092:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5101:
511
512		rcr	$1,%ah
513		jc	2f
514		movb	(PROMICE_LOC+ZERO_OFFSET),%al
515		jmp	1f
5162:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5171:
518
519		movb	(PROMICE_LOC+ONE_OFFSET),%al
520
521/* ---------------------------------------------- */
522
523
524		rol	$4,%edx
525		movl	%edx,%eax
526		andl	$0x0F,%eax
527		add	$0x30,%al
528		cmpb	$0x39,%al
529		jbe	2f
530		add	$7,%al
5312:		movb	%al,%ah
532
533
5341:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
535		movb	(PROMICE_LOC+STATUS_OFFSET),%al
536		movb	(PROMICE_LOC+STATUS_OFFSET),%al
537
538		test	$TDA,%al
539		jnz	1b
540
541		movb	(PROMICE_LOC+ONE_OFFSET),%al
542
543		rcr	$1,%ah
544		jc	2f
545		movb	(PROMICE_LOC+ZERO_OFFSET),%al
546		jmp	1f
5472:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5481:
549
550		rcr	$1,%ah
551		jc	2f
552		movb	(PROMICE_LOC+ZERO_OFFSET),%al
553		jmp	1f
5542:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5551:
556
557		rcr	$1,%ah
558		jc	2f
559		movb	(PROMICE_LOC+ZERO_OFFSET),%al
560		jmp	1f
5612:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5621:
563
564		rcr	$1,%ah
565		jc	2f
566		movb	(PROMICE_LOC+ZERO_OFFSET),%al
567		jmp	1f
5682:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5691:
570
571		rcr	$1,%ah
572		jc	2f
573		movb	(PROMICE_LOC+ZERO_OFFSET),%al
574		jmp	1f
5752:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5761:
577
578		rcr	$1,%ah
579		jc	2f
580		movb	(PROMICE_LOC+ZERO_OFFSET),%al
581		jmp	1f
5822:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5831:
584
585		rcr	$1,%ah
586		jc	2f
587		movb	(PROMICE_LOC+ZERO_OFFSET),%al
588		jmp	1f
5892:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5901:
591
592		rcr	$1,%ah
593		jc	2f
594		movb	(PROMICE_LOC+ZERO_OFFSET),%al
595		jmp	1f
5962:		movb	(PROMICE_LOC+ONE_OFFSET),%al
5971:
598
599		movb	(PROMICE_LOC+ONE_OFFSET),%al
600
601/* ---------------------------------------------- */
602
603
604		rol	$4,%edx
605		movl	%edx,%eax
606		andl	$0x0F,%eax
607		add	$0x30,%al
608		cmpb	$0x39,%al
609		jbe	2f
610		add	$7,%al
6112:		movb	%al,%ah
612
613
6141:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
615		movb	(PROMICE_LOC+STATUS_OFFSET),%al
616		movb	(PROMICE_LOC+STATUS_OFFSET),%al
617
618		test	$TDA,%al
619		jnz	1b
620
621		movb	(PROMICE_LOC+ONE_OFFSET),%al
622
623		rcr	$1,%ah
624		jc	2f
625		movb	(PROMICE_LOC+ZERO_OFFSET),%al
626		jmp	1f
6272:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6281:
629
630		rcr	$1,%ah
631		jc	2f
632		movb	(PROMICE_LOC+ZERO_OFFSET),%al
633		jmp	1f
6342:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6351:
636
637		rcr	$1,%ah
638		jc	2f
639		movb	(PROMICE_LOC+ZERO_OFFSET),%al
640		jmp	1f
6412:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6421:
643
644		rcr	$1,%ah
645		jc	2f
646		movb	(PROMICE_LOC+ZERO_OFFSET),%al
647		jmp	1f
6482:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6491:
650
651		rcr	$1,%ah
652		jc	2f
653		movb	(PROMICE_LOC+ZERO_OFFSET),%al
654		jmp	1f
6552:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6561:
657
658		rcr	$1,%ah
659		jc	2f
660		movb	(PROMICE_LOC+ZERO_OFFSET),%al
661		jmp	1f
6622:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6631:
664
665		rcr	$1,%ah
666		jc	2f
667		movb	(PROMICE_LOC+ZERO_OFFSET),%al
668		jmp	1f
6692:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6701:
671
672		rcr	$1,%ah
673		jc	2f
674		movb	(PROMICE_LOC+ZERO_OFFSET),%al
675		jmp	1f
6762:		movb	(PROMICE_LOC+ONE_OFFSET),%al
6771:
678
679		movb	(PROMICE_LOC+ONE_OFFSET),%al
680
681/* ---------------------------------------------- */
682
683
684		rol	$4,%edx
685		movl	%edx,%eax
686		andl	$0x0F,%eax
687		add	$0x30,%al
688		cmpb	$0x39,%al
689		jbe	2f
690		add	$7,%al
6912:		movb	%al,%ah
692
693
6941:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
695		movb	(PROMICE_LOC+STATUS_OFFSET),%al
696		movb	(PROMICE_LOC+STATUS_OFFSET),%al
697
698		test	$TDA,%al
699		jnz	1b
700
701		movb	(PROMICE_LOC+ONE_OFFSET),%al
702
703		rcr	$1,%ah
704		jc	2f
705		movb	(PROMICE_LOC+ZERO_OFFSET),%al
706		jmp	1f
7072:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7081:
709
710		rcr	$1,%ah
711		jc	2f
712		movb	(PROMICE_LOC+ZERO_OFFSET),%al
713		jmp	1f
7142:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7151:
716
717		rcr	$1,%ah
718		jc	2f
719		movb	(PROMICE_LOC+ZERO_OFFSET),%al
720		jmp	1f
7212:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7221:
723
724		rcr	$1,%ah
725		jc	2f
726		movb	(PROMICE_LOC+ZERO_OFFSET),%al
727		jmp	1f
7282:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7291:
730
731		rcr	$1,%ah
732		jc	2f
733		movb	(PROMICE_LOC+ZERO_OFFSET),%al
734		jmp	1f
7352:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7361:
737
738		rcr	$1,%ah
739		jc	2f
740		movb	(PROMICE_LOC+ZERO_OFFSET),%al
741		jmp	1f
7422:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7431:
744
745		rcr	$1,%ah
746		jc	2f
747		movb	(PROMICE_LOC+ZERO_OFFSET),%al
748		jmp	1f
7492:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7501:
751
752		rcr	$1,%ah
753		jc	2f
754		movb	(PROMICE_LOC+ZERO_OFFSET),%al
755		jmp	1f
7562:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7571:
758
759		movb	(PROMICE_LOC+ONE_OFFSET),%al
760
761/* ---------------------------------------------- */
762
763
764		rol	$4,%edx
765		movl	%edx,%eax
766		andl	$0x0F,%eax
767		add	$0x30,%al
768		cmpb	$0x39,%al
769		jbe	2f
770		add	$7,%al
7712:		movb	%al,%ah
772
773
7741:		movb	(PROMICE_LOC+STATUS_OFFSET),%al
775		movb	(PROMICE_LOC+STATUS_OFFSET),%al
776		movb	(PROMICE_LOC+STATUS_OFFSET),%al
777
778		test	$TDA,%al
779		jnz	1b
780
781		movb	(PROMICE_LOC+ONE_OFFSET),%al
782
783		rcr	$1,%ah
784		jc	2f
785		movb	(PROMICE_LOC+ZERO_OFFSET),%al
786		jmp	1f
7872:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7881:
789
790		rcr	$1,%ah
791		jc	2f
792		movb	(PROMICE_LOC+ZERO_OFFSET),%al
793		jmp	1f
7942:		movb	(PROMICE_LOC+ONE_OFFSET),%al
7951:
796
797		rcr	$1,%ah
798		jc	2f
799		movb	(PROMICE_LOC+ZERO_OFFSET),%al
800		jmp	1f
8012:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8021:
803
804		rcr	$1,%ah
805		jc	2f
806		movb	(PROMICE_LOC+ZERO_OFFSET),%al
807		jmp	1f
8082:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8091:
810
811		rcr	$1,%ah
812		jc	2f
813		movb	(PROMICE_LOC+ZERO_OFFSET),%al
814		jmp	1f
8152:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8161:
817
818		rcr	$1,%ah
819		jc	2f
820		movb	(PROMICE_LOC+ZERO_OFFSET),%al
821		jmp	1f
8222:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8231:
824
825		rcr	$1,%ah
826		jc	2f
827		movb	(PROMICE_LOC+ZERO_OFFSET),%al
828		jmp	1f
8292:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8301:
831
832		rcr	$1,%ah
833		jc	2f
834		movb	(PROMICE_LOC+ZERO_OFFSET),%al
835		jmp	1f
8362:		movb	(PROMICE_LOC+ONE_OFFSET),%al
8371:
838
839		movb	(PROMICE_LOC+ONE_OFFSET),%al
840
841/* ---------------------------------------------- */
842
843
844
845		jmp	*%ebx
846#endif
847