Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102/cross/cpm/biosa.s
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

95 lines
1.8 KiB
ArmAsm

.text
*
* Global Code addresses
*
.globl _init
.globl _biosinit
.globl _flush
.globl _wboot
.globl _cbios
.globl _dskia
.globl _dskic
.globl _setimask
.globl _ccp
.globl cpm * Lowest addr of CP/M
.globl _end * Highest addr of CP/M
*
* Global data addresses
*
.globl _memtab * memory region table
.globl _dpb3 * RAM disk dpb address
.globl _memdsk * -> First memory disk location
*
* Vector Addresses
*
dskint: .equ $3fc * UDC Interrupt vector
trap3: .equ $8c * Trap 3 vector
buserr: .equ $8 * Bus error vector
*
*
_init: lea entry,a0
move.l a0,trap3
lea _dskia,a0
move.l a0,dskint
*
* Auto-Size TPA
*
lea _memtab,a0 * a0 -> Memory region table
move.w #1,(a0)+ * 1 region
move.l #$400,(a0)+ * TPA starts at 400
move.l #cpm-$408,(a0)+ * Ends where CP/M begins
*
* Auto-Size RAM disk
*
move.l buserr,-(sp) * Push bus err vector
lea _end,a0 * a0 -> Last location in CP/M
add.l #cpm,a0 * Linker doesn't reloc this!!
move.l a0,_memdsk * -> first location in RAM disk
move.l #quit,buserr * set up vector -> ourselves
loop:
tst.w (a0)+ * Find
bra loop * End of memory
quit:
add.l #14,a7 * Clear buserr gorp
move.l (a7)+,buserr * Pop buserr vector
sub.l #_end,a0 * a0 = # bytes in RAM disk
sub.l #cpm,a0 * Relocation bug
move.l a0,d0 * Into D reg for shift
move.l #11,d1 * Load shift count
lsr.l d1,d0 * Divide by 2048
move.w d0,_dpb3+6 * Load DRM field of dpb
move #$2000,sr
jsr _biosinit
clr.l d0
rts
*
_wboot: clr.l d0
jmp _ccp
*
entry: move.l d2,-(a7)
move.l d1,-(a7)
move.w d0,-(a7)
jsr _cbios
add #10,a7
rte
*
_dskia: link a6,#0
movem.l d0-d7/a0-a5,-(a7)
jsr _dskic
movem.l (a7)+,d0-d7/a0-a5
unlk a6
rte
*
_setimask: move sr,d0
lsr #8,d0
and.l #7,d0
move sr,d1
ror.w #8,d1
and.w #$fff8,d1
add.w 4(a7),d1
ror.w #8,d1
move d1,sr
rts
.end