home *** CD-ROM | disk | FTP | other *** search
- ;/* Disk.asm - Disk assembler support routines */
-
- ;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- ;/* |_o_o|\\ Copyright (c) 1987 The Software Distillery. All Rights Reserved */
- ;/* |. o.| || This program may not be distributed without the permission of */
- ;/* | . | || the author. BBS: */
- ;/* | o | || John Toebes Dave Baker (919)-471-6436 */
- ;/* | . |// */
- ;/* ====== */
- ;/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- SECTION section
-
- XDEF _DskChngIntA
- XDEF _MakeDateStamp
- XREF _DskChngInt
- XREF _LinkerDB
-
- ; Provides for the C calling conventions
- ; for the Disk Change Interrupt Function
-
- _DskChngIntA:
- move.l a4,-(SP)
- lea _LinkerDB,A4
- move.l a1,-(sp) ; put A1 (*global) onto the stack
- jsr _DskChngInt ; call C routine
- addq.w #4,SP ; fix up the stack
- move.l (SP)+,A4 ; Restore destroyed registers
- rts ; now that was painless wasn't it
-
- ; This code was conceived and written by Steve Beats at Commodore.
- ; Quite nice and elegant for such a complex operation.
- _MakeDateStamp:
- movem.l 4(SP),A0/A1 ; Get address of incoming time information
- movem.l d2-d4,-(SP) ; and preserve the registers we destroy
- movem.l (a0),d0/d1 ; get the incoming time information
- moveq.l #0,d2 ; days = 0
- moveq.l #0,d3 ; mins = 0
- moveq.l #0,d4 ; ticks = 0
- divu.w #43200,d0 ; half days = secs/43200
- move.w d0,d2 ; d2 = #half days
- clr.w d0
- swap d0
- lsr.w #1,d2 ; d2 = days
- bcc.s l1 ; no extra half day
- addi.l #43200,d0 ; d0 = remaining seconds
- l1: divu.w #60,d0 ; mins = secs/60
- move.w d0,d3 ; d3 = mins
- swap d0 ; d0 = remaining seconds
- divu.w #20000,d1 ; d1 = odd ticks
- move.w d1,d4
- mulu.w #50,d0 ; convert seconds to ticks
- add.l d0,d4 ; d4 = total ticks
- movem.l d2/d3/d4,(a0) ; save days,mins,ticks
- movem.l (sp)+,d2-d4 ; Clean up the mess we made of the registers
- rts
-
- end
-