mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-22 16:04:18 +00:00
97 lines
2.5 KiB
ArmAsm
97 lines
2.5 KiB
ArmAsm
|
||
*****************************************************************
|
||
* *
|
||
* CP/M-68K Interface Module for the Loader BDOS *
|
||
* For "C" version of CP/M-68K *
|
||
* *
|
||
* Copyright (c) 1982 Digital Research, Inc. *
|
||
* *
|
||
* Version 0.1 -- September 22, 1982 *
|
||
* *
|
||
*****************************************************************
|
||
|
||
* Declare Public Routines
|
||
|
||
.globl _bios1 * 5 BIOS entry points from BDOS
|
||
.globl _bios2
|
||
.globl _bios3
|
||
.globl _bios4
|
||
.globl _bios5
|
||
.globl _swap * byte swapper
|
||
.globl _udiv * unsigned divide routine
|
||
|
||
* External Routine
|
||
|
||
.globl _bios
|
||
|
||
*
|
||
* BIOS Interface Routines
|
||
*
|
||
*
|
||
* Note - there are 5 BIOS entry points from the BDOS, labelled BIOS1 -
|
||
* BIOS5, depending on the parameters passed.
|
||
|
||
_bios5:
|
||
* For BIOS functions sectran and set exception vector
|
||
* Has function number and 2 parameters, a word followed by a long word
|
||
move.l 8(sp),d2 * get 2nd parameter (long word)
|
||
bra _bios2 * join common routine
|
||
|
||
_bios4:
|
||
* For BIOS function seldsk
|
||
* Has function number followed by 2 word parameters
|
||
move.w 8(sp),d2 * get 2nd parameter (word)
|
||
bra _bios2 * join common routine
|
||
|
||
_bios3:
|
||
* For BIOS function set dma
|
||
* Has function number followed by 1 long parameter
|
||
move.l 6(sp),d1 * get long word parameter
|
||
bra _bios1 * join common routine
|
||
|
||
_bios2:
|
||
* For all BIOS functions with a word parameter
|
||
* Word parameter follows function number
|
||
move.w 6(sp),d1 * get 1st parameter (word)
|
||
|
||
_bios1:
|
||
* For all BIOS functions that have no parameter other than function number
|
||
move.w 4(sp),d0 * get function number
|
||
movem.l d3-d7/a3-a6,-(sp)
|
||
jsr _bios * do BIOS call
|
||
movem.l (sp)+,d3-d7/a3-a6
|
||
* * returns value in d0
|
||
rts
|
||
|
||
*
|
||
* Utility Subroutines
|
||
*
|
||
|
||
_swap:
|
||
* Swap bytes of a word, return swapped value in d0
|
||
move.b 5(sp),d0
|
||
lsl #8,d0
|
||
move.b 4(sp),d0
|
||
rts
|
||
|
||
_udiv:
|
||
* Unsigned divide.
|
||
* Inputs: Long dividend, unsigned word divisor, address of return structure
|
||
* Return: In structure passed, unsigned word quotient, unsigned word remainder
|
||
move.l a0, -(sp) * save a0
|
||
move.l 14(sp), a0 * get address of return structure
|
||
move.l 8(sp), d0 * get dividend
|
||
divu 12(sp), d0 * do the divide
|
||
move.w d0, (a0)+ * store quotient
|
||
swap d0
|
||
move.w d0, (a0) * store remainder
|
||
move.l (sp)+, a0 * restore a0
|
||
rts
|
||
|
||
.end
|
||
|
||
|