amos-professional/extensions/Misc-1.0/Misc_Extension.asm
2020-04-26 02:58:13 +02:00

304 lines
9.3 KiB
NASM

* AMOS Professional Misc Extension
* This file is fully public domain.
* Feel free to make a new version!
* Read the manual for more infos.
* Written with DevPac 2 by
* Frank Otto
* Grelckstr. 27
* 22529 Hamburg
* Germany
* E-Mail: FRANK@ZINOCAVE.wind.dbn.sub.org
; half english, half german, that's europe!
ExecBase=4
supervisor = -30
Version MACRO
dc.b "1.0"
ENDM
ExtNb equ 23-1
Include "|AMOS_Includes.s"
DLea MACRO
Move.l Extadr+Extnb*16(a5),\2
add.w #\1-MB,\2
ENDM
DLoad MACRO
move.l Extadr+Extnb*16(a5),\1
ENDM
Start dc.l C_Tk-C_Off
dc.l C_Lib-C_Tk
dc.l C_Title-C_Lib
dc.l C_End-C_Title
dc.w 0
* Offsets der Befehle
C_Off dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2
dc.w (L5-L4)/2,(L6-L5)/2,(L7-L6)/2,(L8-L7)/2
dc.w (L9-L8)/2,(L10-L9)/2,(L11-L10)/2,(L12-L11)/2
dc.w (L13-L12)/2,(L14-L13)/2,(L15-L14)/2
* Befehlsnamen
C_Tk dc.w 1,0
dc.b $80,-1
dc.w L_DLedOn,-1
dc.b "dled o",$80+"n","I",-1 ;Fertig
dc.w L_DLedOff,-1
dc.b "dled of",$80+"f","I",-1 ;Fertig
dc.w L_DisplayOn,-1
dc.b "display o",$80+"n","I",-1 ;Fertig
dc.w L_DisplayOff,-1
dc.b "display of",$80+"f","I",-1 ;Fertig
dc.w L_MultiOff,-1
dc.b "multi of",$80+"f","I",-1 ;Fertig
dc.w L_MultiOn,-1
dc.b "multi o",$80+"n","I",-1 ;Fertig
dc.w L_MouseOff,-1
dc.b "mouse of",$80+"f","I",-1 ;Fertig
dc.w L_Reset,-1
dc.b "rese",$80+"t","I",-1 ;Fertig
dc.w L_ClearRam,-1
dc.b "clear ra",$80+"m","I",-1 ;Fertig
dc.w L_DiskWait,-1
dc.b "disk wai",$80+"t","I",-1 ;Fertig
dc.w L_PalOn,-1
dc.b "pal o",$80+"n","I",-1
dc.w L_Fire,-1
dc.b "firewai",$80+"t","I",-1
dc.w 0
******************************************************************
* Start of library
C_Lib
******************************************************************
* COLD START
L0 moveq #ExtNb,d0
rts
******************************************************************
*
L1
******************************************************************
*
L2
******************************************************************
L_DisplayOff equ 3
L3 move.w #$01a0,$dff096 * Monitor aus
move.w #0,$dff180
rts
******************************************************************
L_DisplayOn equ 4
L4 move.w #$81a0,$dff096 * Monitor an
rts
******************************************************************
L_MultiOff equ 5
L5 movem.l a3-a6,-(sp) * Multitasking aus
move.l 4,a6
jsr -132(a6)
movem.l (sp)+,a3-a6
rts
******************************************************************
L_MultiOn equ 6
L6 movem.l a3-a6,-(sp) * Multitasking an
move.l 4,a6
jsr -138(a6)
movem.l (sp)+,a3-a6
rts
******************************************************************
L_DLedOn equ 7
L7 move.b #127,$bfd100 ; Laufwerk-LED an
move.b #119,$bfd100
move.b #0,$bfd100+512
rts
******************************************************************
L_DLedOff equ 8
L8 move.b #127,$bfd100 ; Laufwerk-LED aus
move.b #119,$bfd100
move.b #255,$bfd100+512
rts
******************************************************************
L_MouseOff equ 9
L9 move.w #$20,$dff096 ; Mouse aus
rts
******************************************************************
CuCuOff dc.b 27,"C0",0
even
******************************************************************
L_Reset equ 10
L10 MOVEA.L 4.W,A6
JSR -$0096(A6)
JSR -$0078(A6) ; Reset
CLR.L 4.W
LEA $00FC0000.L,A0
RESET
JMP (A0)
DC.B 'Nq'
rts
******************************************************************
L_ClearRam equ 11
L11 movem.l a6,-(sp) ; No Drivers
move.l 4,a6
moveq #0,d1
move.l #99999999,d0
jsr -198(a6)
move.l d0,a0
beq.s glbl
jsr -210(a6)
glbl movem.l (sp)+,a6
rts
******************************************************************
L_Fire equ 12
L12 btst #07,$bfe001
bne L12
rts
*****************************************************************
L_DiskWait equ 13
L13
dc: move.b $bfe001,d0 ; Diskchange
and.b #16,d0
bne dc
movem.l a6,-(sp)
movea.l 4,a6
Wait move.l #500,d1
Wait2 bsr tests
sub.l #1,d1
bne Wait2
jsr -120(a6)
lea $196(a6),a0
lea Validate,a1
jsr -276(a6)
move.l d0,d2
bne Check
lea $1a4(a6),a0
lea Validate,a1
jsr -276(a6)
move.l d0,d2
Check jsr -126(a6)
tst.l d2
bne Wait
movem.l (sp)+,a6
rts
tests movem.l a0-a6/d0-d7,-(sp)
movem.l (sp)+,a0-a6/d0-d7
rts
Validate:
dc.b 'Validator',0
even
**********************************************************************
L_PalOn equ 14
L14
Flag_60Hz RS.B 1
Flag_Color RS.B 1
Flag_OverScan RS.B 1
Flag_Enable RS.B 1
Flag_FatAgnus RS.B 1
Flag_Resident RS.B 1
gb_DisplayFlags EQU 206 ;graphics
gb_DisplayRows EQU 212
gb_NormalDisplayRows EQU 216
VBlankFrequency EQU 530
_LVOCloseLibraryP EQU -414
_LVOSumLibraryP EQU -426
_LVOOpenLibraryP EQU -552
Exebas EQU $4
LIBF_CHANGED EQU 2
LIB_FLAGS EQU 14
BEAMCON0 EQU $1DC
CUSTOM EQU $DFF000
CALL MACRO
IFC 'EXEC','\1'
MOVEA.L (Exebas).W,A6
ENDC
IFNC 'EXEC','\1'
MOVEA.L \1Base,A6
ENDC
JSR _LVO\2(A6)
ENDM
OPENLIB MACRO
LEA \1Name(PC),A1
CLR.L D0
CALL EXEC,OpenLibraryP
MOVE.L D0,\1Base
BEQ \2
ENDM
CLOSELIB MACRO
MOVEA.L \1Base,A1
CALL EXEC,CloseLibraryP
ENDM
Go60 tst.b Flag_FatAgnus(a0) ;put system in NTSC mode
beq.s .NoFatty
move.w #$0000,BEAMCON0!CUSTOM ;to NTSC please
bra.s .Go60
.NoFatty move.w #$0000,BEAMCON0!CUSTOM
bne.s .Error ;not available
.Go60 lea GFXName(PC),a1 ;modify graphics.library
clr.l d0
CALL EXEC,OpenLibraryP
move.l d0,a1
move.w gb_DisplayFlags(a1),d0
and.b #%11111011,d0
or.b #%00000001,d0
move.w d0,gb_DisplayFlags(a1)
move.w #200,gb_NormalDisplayRows(a1)
move.w #262,gb_DisplayRows(a1)
or.b #LIBF_CHANGED,LIB_FLAGS(a1)
movea.l a1,a2
CALL EXEC,SumLibraryP
movea.l a2,a1
CALL EXEC,CloseLibraryP
move.b #60,VBlankFrequency(a6)
or.b #LIBF_CHANGED,LIB_FLAGS(a6)
CALL EXEC,SumLibraryP
lea Flags(pc),a0
st Flag_Enable(a0) ;start it
moveq #0,d0
rts
.Error lea Flags(pc),a0
st Flag_60Hz(a0)
sf Flag_Enable(a0) ;stop it
moveq #-1,d0
rts
GFXName DC.B "graphics.library",$0
EVEN
Flags DCB.B 8
rts
************************************************
L15
* Welcome message ;"
C_Title:
dc.b "AMOSPro Misc Extension V"
Version
dc.b " by Frank Otto (1995)"
dc.b 0,"$VER: "
Version
dc.b 0
Even
***********************************************************
C_End: dc.w 0
even