mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
173 lines
11 KiB
Plaintext
173 lines
11 KiB
Plaintext
C P / M 6 8 0 0 0 A s s e m b l e r Revision 02.03 Page 1
|
||
Source File: bdosif.s
|
||
|
||
1
|
||
2 *****************************************************************
|
||
3 * *
|
||
4 * CP/M-68K Basic Disk Operating System interface module *
|
||
5 * For "C" version of CP/M-68K *
|
||
6 * *
|
||
7 * Copyright (c) 1982 Digital Research, Inc. *
|
||
8 * *
|
||
9 * Version 0.2 -- September 22, 1982 *
|
||
10 * *
|
||
11 *****************************************************************
|
||
12
|
||
13 * Declare Public Routines
|
||
14
|
||
15 .globl _bios1 * 6 BIOS entry points from BDOS
|
||
16 .globl _bios2
|
||
17 .globl _bios3
|
||
18 .globl _bios4
|
||
19 .globl _bios5
|
||
20 .globl _bios6
|
||
21 .globl _traphnd * trap #2 handler
|
||
22 .globl _swap * byte swapper
|
||
23 .globl _udiv * unsigned divide routine
|
||
24
|
||
25 * Declare external routines
|
||
26 .globl __bdos * BDOS entry point in bdosmain
|
||
27
|
||
28 * The following external references were put in just to make sure that all
|
||
29 * the BDOS modules were referenced, so we could put them in a library
|
||
30 .globl _constat * references conbdos.o
|
||
31 .globl _dirscan * references dskutil.o
|
||
32 .globl _create * references fileio.o
|
||
33 .globl _bdosrw * references bdosrw.o
|
||
34
|
||
35 biosf = 50
|
||
36 setsupf = 62
|
||
37
|
||
38 _traphnd:
|
||
39 *
|
||
40 * first save the registers and
|
||
41 * check for functions handled by assembly language routines
|
||
42 *
|
||
43 00000000 0C40003E cmpi #setsupf,d0
|
||
44 00000004 672C beq setsup
|
||
45 00000006 48E77FFE movem.l d1-d7/a0-a6,-(sp)
|
||
46 0000000A 0C400032 cmpi #biosf,d0
|
||
47 0000000E 6716 beq bioscall
|
||
48 *
|
||
49 * function number is passed in D0
|
||
50 * byte and word pararmeters are passed in D1.W
|
||
51 * address parameters are passed in D1.L
|
||
52 *
|
||
53 00000010 2F01 move.l d1,-(a7)
|
||
54 00000012 3F01 move.w d1,-(a7)
|
||
55 00000014 3F00 move.w d0,-(a7)
|
||
C P / M 6 8 0 0 0 A s s e m b l e r Revision 02.03 Page 2
|
||
Source File: bdosif.s
|
||
|
||
56 00000016 4EB900000000 jsr __bdos * call BDOS
|
||
57 *
|
||
58 * now restore the regs
|
||
59 *
|
||
60 0000001C 48C0 ext.l d0
|
||
61 0000001E 504F addq #8,sp * fix up the stack
|
||
62 bdone:
|
||
63 00000020 4CDF7FFE movem.l (sp)+,a0-a6/d1-d7
|
||
64 00000024 4E73 rte * return from trap call
|
||
65
|
||
66 *
|
||
67 * direct BIOS call function
|
||
68 *
|
||
69 bioscall:
|
||
70 00000026 2041 move.l d1,a0 * get address of CPB
|
||
71 00000028 3018 move.w (a0)+,d0
|
||
72 0000002A 4CD80006 movem.l (a0)+,d1-d2
|
||
73 0000002E 4E43 trap #3
|
||
74 00000030 60EE bra bdone
|
||
75
|
||
76 *
|
||
77 * Set supervisor mode procedure
|
||
78 *
|
||
79 setsup:
|
||
80 00000032 00572000 ori #$2000,(sp) * turn on supervisor bit in SR
|
||
81 00000036 4E73 rte
|
||
82
|
||
83 *
|
||
84 * BIOS Interface Routines
|
||
85 *
|
||
86 *
|
||
87 * Note - there are 6 BIOS entry points from the BDOS, labelled BIOS1 -
|
||
88 * BIOS6, depending on the parameters passed.
|
||
89
|
||
90 _bios5:
|
||
91 * For BIOS functions sectran and set exception vector
|
||
92 * Has function number and 2 parameters, a word followed by a long word
|
||
93 00000038 242F0008 move.l 8(sp),d2 * get 2nd parameter (long word)
|
||
94 0000003C 600C bra _bios2 * join common routine
|
||
95
|
||
96 _bios4:
|
||
97 * For BIOS function seldsk
|
||
98 * Has function number followed by 2 word parameters
|
||
99 0000003E 342F0008 move.w 8(sp),d2 * get 2nd parameter (word)
|
||
100 00000042 6006 bra _bios2 * join common routine
|
||
101
|
||
102 _bios3:
|
||
103 * For BIOS function set dma
|
||
104 * Has function number followed by 1 long parameter
|
||
105 00000044 222F0006 move.l 6(sp),d1 * get long word parameter
|
||
106 00000048 6004 bra _bios1 * join common routine
|
||
107
|
||
108 _bios2:
|
||
109 * For all BIOS functions with a word parameter
|
||
110 * Word parameter follows function number
|
||
C P / M 6 8 0 0 0 A s s e m b l e r Revision 02.03 Page 3
|
||
Source File: bdosif.s
|
||
|
||
111 0000004A 322F0006 move.w 6(sp),d1 * get 1st parameter (word)
|
||
112
|
||
113 _bios6:
|
||
114 _bios1:
|
||
115 * For all BIOS functions that have no parameter other than function number
|
||
116 0000004E 302F0004 move.w 4(sp),d0 * get function number
|
||
117 00000052 48E71F1E movem.l d3-d7/a3-a6,-(sp)
|
||
118 * * save C register variables
|
||
119 00000056 4E43 trap #3 * do BIOS call
|
||
120 * * returns value in d0
|
||
121 00000058 4CDF78F8 movem.l (sp)+,d3-d7/a3-a6
|
||
122 0000005C 4E75 rts
|
||
123
|
||
124 *
|
||
125 * Utility Subroutines
|
||
126 *
|
||
127
|
||
128 _swap:
|
||
129 * Swap bytes of a word, return swapped value in d0
|
||
130 0000005E 102F0005 move.b 5(sp),d0
|
||
131 00000062 E148 lsl #8,d0
|
||
132 00000064 102F0004 move.b 4(sp),d0
|
||
133 00000068 4E75 rts
|
||
134
|
||
135 _udiv:
|
||
136 * Unsigned divide routine
|
||
137 * returns unsigned quotient in D0.W
|
||
138
|
||
139 * UWORD udiv( divisor, dividend, remp )
|
||
140 *
|
||
141 * REG LONG divisor;
|
||
142 * UWORD dividend;
|
||
143 * UWORD *remp /* pointer to remainder (returned) */
|
||
144
|
||
145 0000006A 202F0004 move.l 4(sp), d0 * get dividend
|
||
146 0000006E 80EF0008 divu 8(sp), d0 * do the divide
|
||
147 00000072 206F000A movea.l 10(sp),a0
|
||
148 00000076 4840 swap d0
|
||
149 00000078 3080 move.w d0, (a0) * store remainder
|
||
150 0000007A 4240 clr.w d0
|
||
151 0000007C 4840 swap d0 * word quotient in d0
|
||
152 0000007E 4E75 rts
|
||
153
|
||
154 00000080 .end
|
||
C P / M 6 8 0 0 0 A s s e m b l e r Revision 02.03 Page 4
|
||
Source File: bdosif.s
|
||
|
||
S y m b o l T a b l e
|
||
|
||
__bdos ******** EXT _bdosrw ******** EXT _bios1 0000004E TEXT _bios2 0000004A TEXT
|
||
_bios3 00000044 TEXT _bios4 0000003E TEXT _bios5 00000038 TEXT _bios6 0000004E TEXT
|
||
_constat ******** EXT _create ******** EXT _dirscan ******** EXT _swap 0000005E TEXT
|
||
_traphnd 00000000 TEXT _udiv 0000006A TEXT bdone 00000020 TEXT bioscall 00000026 TEXT
|
||
biosf 00000032 ABS setsup 00000032 TEXT setsupf 0000003E ABS |