******************************************************************************* * exec.library.S Written by Readysoft. * Copyright 1993,1994 RS. All rights reserved. 1993.03.06.-1994.05.18. * v1.0. ******************************************************************************* ******************************************************************************* * Macros ******************************************************************************* ;------------------------------------------------------------------------------ ; ExecName Macro ;------------------------------------------------------------------------------ EXE.NAM MACRO DC.B 'exec.library',0 EVEN ENDM ;------------------------------------------------------------------------------ ; LibDesc Macro ;------------------------------------------------------------------------------ EXE.LD MACRO DC.L \1 LibBase EXE.S SET * DC.B \2 Name EXE.E SET * IF [EXE.E-EXE.S]<28 BLK.B 28-[EXE.E-EXE.S],0 ELSE PRINTT 'EXE.LD error !' ENDC ENDM ;------------------------------------------------------------------------------ ; DevDesc Macro ;------------------------------------------------------------------------------ EXE.DD MACRO DC.L \1 DevBase EXE.S SET * DC.B \2 Name EXE.E SET * IF [EXE.E-EXE.S]<28 BLK.B 28-[EXE.E-EXE.S],0 ELSE PRINTT 'EXE.DD error !' ENDC ENDM ******************************************************************************* * LIB Macro ******************************************************************************* EXE.LIB MACRO ******************************************************************************* * Constant Definitions ******************************************************************************* ;------------------------------------------------------------------------------ ; Base Address ;------------------------------------------------------------------------------ exe.Null EQU $100 exe.Base EQU $104 ;------------------------------------------------------------------------------ ; LibDesc Structure ;------------------------------------------------------------------------------ RSRESET exe_ld_LibBase RS.L 1 exe_ld_LibName RS.B 28 exe_ld_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; DevDesc Structure ;------------------------------------------------------------------------------ RSRESET exe_dd_DevBase RS.L 1 exe_dd_DevName RS.B 28 exe_dd_SizeOf RS.B 0 ;------------------------------------------------------------------------------ ; Error Codes ;------------------------------------------------------------------------------ exe_er_OK EQU $00000000 all right exe_er_UnDef EQU $8080ffff undefined error ******************************************************************************* * Varibles ******************************************************************************* RSRESET exe_RomExecBase RS.B 34 exe_SoftVer RS.W 1 exe_ChkSum RS.W 1 exe_ChkBase RS.L 1 exe_ColdCapt RS.L 1 Reset routine exe_CoolCapt RS.L 1 not used exe_WarmCapt RS.L 1 not used exe_NotUsed RS.B 30 not used exe_System RS.L 1 system start address exe_SizeOf RS.B 0 ******************************************************************************* * Routine Offsets ******************************************************************************* RSRESET RS.B -6 exe_Init RS.B -6 exe_InitReset RS.B -6 exe_OpenDev RS.B -6 exe_OpenLib RS.B -6 ******************************************************************************* * Code ******************************************************************************* jmp exe.OpenLib jmp exe.OpenDev jmp exe.InitReset jmp exe.Init exec.lib BLK.B exe_SizeOf,0 EVEN ;------------------------------------------------------------------------------ ; Init NoOp ;------------------------------------------------------------------------------ exe.Init movem.l d0/a0/a5,-(a7) lea exec.lib(pc),a5 move.l a5,a0 clear varible area move.w #exe_SizeOf-1,d0 .Clear clr.b (a0)+ dbf d0,.Clear lea exe.Reset(pc),a0 bsr exe.InitReset move.l #SYSTEM,exe_System(a5) clr.l exe.Null move.l a5,exe.Base movem.l (a7)+,d0/a0/a5 rts ;------------------------------------------------------------------------------ ; InitReset ResetRoutine(a0) ;------------------------------------------------------------------------------ exe.InitReset movem.l d0-d1/a0/a5,-(a7) lea exec.lib(pc),a5 move.l #-1,d0 sub.l a5,d0 move.l d0,exe_ChkBase(a5) move.l a0,exe_ColdCapt(a5) moveq #0,d1 lea exe_SoftVer(a5),a0 moveq #24,d0 .ChkSum add.w (a0)+,d1 dbf d0,.ChkSum not.w d1 move.w d1,exe_ChkSum(a5) movem.l (a7)+,d0-d1/a0/a5 rts ;------------------------------------------------------------------------------ ; OpenLib LibName(a1) --> LibBase(d0) ;------------------------------------------------------------------------------ exe.OpenLib movem.l a0-a3,-(a7) lea exe.da.Libs(pc),a0 list of libraries .Loop tst.l exe_ld_LibBase(a0) beq.s .NotFound lea exe_ld_LibName(a0),a2 move.l a1,a3 .Compare move.b (a2)+,d0 cmp.b (a3)+,d0 bne.s .Next tst.b d0 bne.s .Compare bra.s .Found .Next lea exe_ld_SizeOf(a0),a0 bra.s .Loop .Found move.l exe_ld_LibBase(a0),d0 bra.s .Exit .NotFound moveq #0,d0 no library found .Exit movem.l (a7)+,a0-a3 rts ;------------------------------------------------------------------------------ ; OpenDev DevName(a1) --> DevBase(d0) ;------------------------------------------------------------------------------ exe.OpenDev movem.l a0-a3,-(a7) lea exe.da.Devs(pc),a0 list of devices .Loop tst.l exe_dd_DevBase(a0) beq.s .NotFound lea exe_dd_DevName(a0),a2 move.l a1,a3 .Compare move.b (a2)+,d0 cmp.b (a3)+,d0 bne.s .Next tst.b d0 bne.s .Compare bra.s .Found .Next lea exe_dd_SizeOf(a0),a0 bra.s .Loop .Found move.l exe_dd_DevBase(a0),d0 bra.s .Exit .NotFound moveq #0,d0 no device found .Exit movem.l (a7)+,a0-a3 rts ******************************************************************************* * Private Routines ******************************************************************************* ;------------------------------------------------------------------------------ ; Reset NoOp ;------------------------------------------------------------------------------ exe.Reset addq.w #1,d0 move.w d0,$dff180 btst #6,$bfe001 bne.s exe.Reset jmp $fc0002 ******************************************************************************* * DataArea ******************************************************************************* exe.da.Libs EXE.LD exec.lib,'exec.library' EXE.LD intuition.lib,'intuition.library' EXE.LD font.lib,'font.library' EXE.LD sprite.lib,'sprite.library' EXE.LD sound.lib,'sound.library' EXE.LD dos.lib,'dos.library' EXE.LD 0,0 exe.da.Devs EXE.DD custom.dev,'custom.device' EXE.DD cia.dev,'cia.device' EXE.DD interrupt.dev,'interrupt.device' EXE.DD memory.dev,'memory.device' EXE.DD copper.dev,'copper.device' EXE.DD keyboard.dev,'keyboard.device' EXE.DD gameport.dev,'gameport.device' EXE.DD trackdisk.dev,'trackdisk.device' EXE.DD 0,0 ENDM