annotate boot/sega.s @ 21:bb7dfb42b320

Small refactor to object placement. Add spawn point object
author Michael Pavone <pavone@retrodev.com>
date Sun, 12 Jan 2014 23:53:18 -0800
parents 826a1cb3f873
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 .text
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 *-------------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 * Sega startup code for the GNU Assembler
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 * Translated from:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 * Sega startup code for the Sozobon C compiler
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8 * Written by Paul W. Lee
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 * Modified by Charles Coty
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 * Modified by Stephane Dallongeville
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 *-------------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 .org 0x00000000
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 _Start_Of_Rom:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 _Vecteurs_68K:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18 dc.l 0x00FFFE00 /* Stack address */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 dc.l _Entry_Point /* Program start address */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 dc.l _Bus_Error
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 dc.l _Address_Error
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 dc.l _Illegal_Instruction
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23 dc.l _Zero_Divide
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 dc.l _Chk_Instruction
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 dc.l _Trapv_Instruction
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 dc.l _Privilege_Violation
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 dc.l _Trace
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 dc.l _Line_1010_Emulation
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 dc.l _Line_1111_Emulation
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 dc.l _Error_Exception, _Error_Exception, _Error_Exception, _Error_Exception
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 dc.l _Error_Exception, _INT, _EXTINT, _INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 dc.l _HINT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 dc.l _INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 dc.l _VINT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 dc.l _INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 dc.l _INT,_INT,_INT,_INT,_INT,_INT,_INT,_INT
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 .incbin "boot/rom_head.bin", 0x10, 0x100
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 _Entry_Point:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 move #0x2700,%sr
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 tst.l 0xa10008
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 bne.s SkipJoyDetect
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49 tst.w 0xa1000c
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 SkipJoyDetect:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 bne.s SkipSetup
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53 lea Table,%a5
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 movem.w (%a5)+,%d5-%d7
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 movem.l (%a5)+,%a0-%a4
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 * Check Version Number
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 move.b -0x10ff(%a1),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 andi.b #0x0f,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 beq.s WrongVersion
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 * Sega Security Code (SEGA)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61 move.l #0x53454741,0x2f00(%a1)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 WrongVersion:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 move.w (%a4),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 moveq #0x00,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 movea.l %d0,%a6
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 move %a6,%usp
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 move.w %d7,(%a1)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 move.w %d7,(%a2)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 jmp Continue
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 Table:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72 dc.w 0x8000,0x3fff,0x0100
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 dc.l 0xA00000,0xA11100,0xA11200,0xC00000,0xC00004
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75 SkipSetup:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 move.w #0,%a7
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77 jmp _reset_entry
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 Continue:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 * clear Genesis RAM
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 lea 0xff0000,%a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 moveq #0,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 move.w #0x3FFF,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86 ClearRam:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 move.l %d0,(%a0)+
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 dbra %d1,ClearRam
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 * copy initialized variables from ROM to Work RAM
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 lea _stext,%a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 lea 0xFF0000,%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93 move.l #_sdata,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 lsr.l #1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 beq NoCopy
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 subq.w #1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98 CopyVar:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 move.w (%a0)+,(%a1)+
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 dbra %d0,CopyVar
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102 NoCopy:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104 * Jump to initialisation process...
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 move.w #0,%a7
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 jmp _start_entry
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 *------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 * interrupt functions
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 *------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 _Bus_Error:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 move.l busErrorCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 _Address_Error:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 move.l addressErrorCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 _Illegal_Instruction:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 move.l illegalInstCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 _Zero_Divide:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 move.l zeroDivideCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 _Chk_Instruction:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 move.l chkInstCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 _Trapv_Instruction:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 move.l trapvInstCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 _Privilege_Violation:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 move.l privilegeViolationCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 _Trace:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 move.l traceCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 _Line_1010_Emulation:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 _Line_1111_Emulation:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 move.l line1x1xCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
178 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180 _Error_Exception:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
182 move.l errorExceptionCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 _INT:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
188 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 move.l intCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
191 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
192 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
193
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
194 _EXTINT:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
195 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
196 move.l internalExtIntCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
197 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
198 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
201 _HINT:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203 move.l internalHIntCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
208 _VINT:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
209 movem.l %d0-%d1/%a0-%a1,-(%sp)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210 move.l internalVIntCB, %a0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 jsr (%a0)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
212 movem.l (%sp)+,%d0-%d1/%a0-%a1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 rte
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 *------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 * Copyright (c) 1988 by Sozobon, Limited. Author: Johann Ruegg
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 * Permission is granted to anyone to use this software for any purpose
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
220 * on any computer system, and to redistribute it freely, with the
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
221 * following restrictions:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
222 * 1) No charge may be made other than reasonable charges for reproduction.
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
223 * 2) Modified versions must be clearly marked as such.
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
224 * 3) The authors are not responsible for any harmful consequences
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
225 * of using this software, even if they result from defects in it.
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
226 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
227 *------------------------------------------------
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
228
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
229 ldiv:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
230 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
231 bpl ld1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
232 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
233 ld1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
234 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
235 bpl ld2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
236 neg.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
237 eor.b #0x80,4(%a7)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
238 ld2:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
239 bsr i_ldiv /* d0 = d0/d1 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
240 tst.b 4(%a7)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
241 bpl ld3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
243 ld3:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
244 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
245
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
246 lmul:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
247 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 bpl lm1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250 lm1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 bpl lm2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 neg.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 eor.b #0x80,4(%a7)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 lm2:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 bsr i_lmul /* d0 = d0*d1 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257 tst.b 4(%a7)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258 bpl lm3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
260 lm3:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
263 lrem:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
264 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 bpl lr1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
266 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
267 lr1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
268 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
269 bpl lr2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 neg.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 lr2:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 bsr i_ldiv /* d1 = d0%d1 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 move.l %d1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
274 tst.b 4(%a7)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 bpl lr3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276 neg.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
277 lr3:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 ldivu:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
281 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
282 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
283 bsr i_ldiv
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
284 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
285
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 lmulu:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 bsr i_lmul
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
290 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
291
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
292 lremu:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293 move.l 4(%a7),%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294 move.l 8(%a7),%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 bsr i_ldiv
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 move.l %d1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 * A in d0, B in d1, return A*B in d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301 i_lmul:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
302 move.l %d3,%a2 /* save d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
303 move.w %d1,%d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
304 mulu %d0,%d2 /* d2 = Al * Bl */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
305
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
306 move.l %d1,%d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
307 swap %d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
308 mulu %d0,%d3 /* d3 = Al * Bh */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
309
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
310 swap %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
311 mulu %d1,%d0 /* d0 = Ah * Bl */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
312
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
313 add.l %d3,%d0 /* d0 = (Ah*Bl + Al*Bh) */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
314 swap %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
315 clr.w %d0 /* d0 = (Ah*Bl + Al*Bh) << 16 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
316
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
317 add.l %d2,%d0 /* d0 = A*B */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
318 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
319 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
320 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
321 *A in d0, B in d1, return A/B in d0, A%B in d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
322 *
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
323 i_ldiv:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
324 tst.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
325 bne nz1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
326
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
327 * divide by zero
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
328 * divu #0,%d0 /* cause trap */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
329 move.l #0x80000000,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
330 move.l %d0,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
331 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
332 nz1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
333 move.l %d3,%a2 /* save d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
334 cmp.l %d1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
335 bhi norm
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
336 beq is1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
337 * A<B, so ret 0, rem A
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
338 move.l %d0,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
339 clr.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
340 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
341 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
342 * A==B, so ret 1, rem 0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
343 is1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
344 moveq.l #1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
345 clr.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
346 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
347 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
348 * A>B and B is not 0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
349 norm:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
350 cmp.l #1,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
351 bne not1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
352 * B==1, so ret A, rem 0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
353 clr.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
354 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
355 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
356 * check for A short (implies B short also)
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
357 not1:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
358 cmp.l #0xffff,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
359 bhi slow
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
360 * A short and B short -- use 'divu'
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
361 divu %d1,%d0 /* d0 = REM:ANS */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
362 swap %d0 /* d0 = ANS:REM */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
363 clr.l %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
364 move.w %d0,%d1 /* d1 = REM */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
365 clr.w %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
366 swap %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
367 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
368 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
369 * check for B short
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
370 slow:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
371 cmp.l #0xffff,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
372 bhi slower
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
373 * A long and B short -- use special stuff from gnu
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
374 move.l %d0,%d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
375 clr.w %d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
376 swap %d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
377 divu %d1,%d2 /* d2 = REM:ANS of Ahi/B */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
378 clr.l %d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
379 move.w %d2,%d3 /* d3 = Ahi/B */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
380 swap %d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
381
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
382 move.w %d0,%d2 /* d2 = REM << 16 + Alo */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
383 divu %d1,%d2 /* d2 = REM:ANS of stuff/B */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
384
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
385 move.l %d2,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
386 clr.w %d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
387 swap %d1 /* d1 = REM */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
388
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
389 clr.l %d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
390 move.w %d2,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
391 add.l %d3,%d0 /* d0 = ANS */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
392 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
393 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
394 * A>B, B > 1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
395 slower:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
396 move.l #1,%d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
397 clr.l %d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
398 moreadj:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
399 cmp.l %d0,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
400 bhs adj
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
401 add.l %d2,%d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
402 add.l %d1,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
403 bpl moreadj
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
404 * we shifted B until its >A or sign bit set
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
405 * we shifted #1 (d2) along with it
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
406 adj:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
407 cmp.l %d0,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
408 bhi ltuns
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
409 or.l %d2,%d3
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
410 sub.l %d1,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
411 ltuns:
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
412 lsr.l #1,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
413 lsr.l #1,%d2
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
414 bne adj
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
415 * d3=answer, d0=rem
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
416 move.l %d0,%d1
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
417 move.l %d3,%d0
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
418 move.l %a2,%d3 /* restore d3 */
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
419 rts
826a1cb3f873 Copied SGDK project skeleton
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
420