;APS00000000000000000000000000000000000000000000000000000000000000000000000000000000 *************************************** * * har lige lant fra system takeover code`en * * * *************************************** init: MOVEM.L D0-D7/A0-A6,-(SP) BSR HLA_MultiTaskingOFF BSR HLA_TakeCiaaResource BSR HLA_TakeCiabResource bsr getvbr ; far fat i VBR`eren move.l 4.w,a1 cmp.b #60,$213(a1) ;PowerSupplyFrequency beq.b NTSC ** her bor du tag hojet for om det er pal eller ntsc, da cia timerens ** hastighed afhanger af netfrequencen men da forskelden her er langt ** mindre end som ved vblank timingen burte det ikke give nogen problemer ForcePAL move.l #1773447,d0 ;PAL bra.b setcia NTSC move.l #1789773,d0 ;NTSC setcia BSR setint BSR HLA_MultiTaskingON ** venter pa at venstre muse knap bliver pandet en` waitrotte: btst #$06,$bfe001 bne.s waitrotte BSR HLA_MultiTaskingOFF BSR resetint exit: BSR HLA_ReleaseCiabResource BSR HLA_ReleaseCiaaResource BSR HLA_MultiTaskingON MOVEM.L (sp)+,D0-D7/A0-A6 rts resettimer: and.b #$7e,$bfdf00 ;alarm mode off,stop timer move.b #$00,$bfda00 ;timer back on 0 move.b #$00,$bfd900 move.b #$00,$bfd800 or.b #$81,$bfdf00 ;alarm mode cia b 1,start rts setalarm: or.b #$80,$bfdf00 ;alarm mode stop move.b #$00,$bfda00 ;timer start when lsb has been writtem move.b #$00,$bfd900 ; move.b #$0F,$bfd800 ;2604.16 baud... move.b #$84,$bfdd00 ;alarm mask set cia b interr. move.b #$81,$bfdf00 ;alarmmode,start rts setint: move.w $dff01c,intstat ; status save int-enable move.w #$7fff,$dff09a ;interrupts off move.l vectorbase,a0 ; henter vbr move.l $78(a0),intvek ;sav intvek bsr.s resettimer ;reset alam bsr.s setalarm ;set timer move.l #interrupt,$78 ;new intvektor ciab int p6 move.w #$e000,$dff09a ;cia b interrupt enable rts resetint: move.w #$4000,$dff09a ;interrupts off move.l vectorbase,a0 move.l intvek,$78(a0) ;old vector back move.w intstat,d0 ;old enable status back or.w #$c000,d0 move.w d0,$dff09a rts interrupt: move.l d0,-(sp) move.w #$2000,$dff09c ;clear request cia b move.b $bfdd00,d0 and.b #$04,d0 ;cia b alarm ?? bne .ud move.l #$0f00,$dff180 move.l #$0fff,$dff182 bsr.L resettimer .ud move.l (sp)+,d0 rte **************************************** HLA_MultiTaskingOFF: MOVE.L 4.w,A6 JSR -132(A6) ;EXEC Forbid JSR -120(A6) ;EXEC Disable RTS **************************************** HLA_MultiTaskingON: MOVE.L 4.w,A6 JSR -126(A6) ;EXEC Enable JSR -138(A6) ;EXEC Permit RTS **************************************** **************************************** HLA_TakeCiaaResource: MOVEQ #0,D0 ;no version LEA HLA_CiaaResName(PC),A1 MOVE.L 4.w,A6 JSR -498(A6) ;EXEC OpenResource LEA HLA_CiaaResBase(PC),A0 MOVE.L D0,(A0) LEA HLA_CiaaResOpened(PC),A0 ST.B (A0) ;Problems opening CiaaRes ?? BEQ.W .exit MOVE.L D0,A6 MOVEQ #0,D0 JSR -24(A6) ;CIAA SetICR LEA HLA_CiaaICR_REQ(PC),A0 MOVE.B D0,(A0) MOVEQ #0,D0 JSR -18(A6) ;CIAA AbleICR LEA HLA_CiaaICR_ENA(PC),A0 MOVE.B D0,(A0) .exit RTS EVEN **************************************** HLA_TakeCiabResource: MOVEQ #0,D0 ;no version LEA HLA_CiabResName(PC),A1 MOVE.L 4.w,A6 JSR -498(A6) ;EXEC OpenResource LEA HLA_CiabResBase(PC),A0 MOVE.L D0,(A0) LEA HLA_CiabResOpened(PC),A0 ST.B (A0) ;Problems opening CiabRes ?? BEQ.W .exit MOVE.L D0,A6 MOVEQ #0,D0 JSR -24(A6) ;CIAB SetICR LEA HLA_CiabICR_REQ(PC),A0 MOVE.B D0,(A0) MOVEQ #0,D0 JSR -18(A6) ;CIAB AbleICR LEA HLA_CiabICR_ENA(PC),A0 MOVE.B D0,(A0) .exit RTS EVEN **************************************** HLA_ReleaseCiaaResource: MOVE.L HLA_CiaaResBase(PC),A6 MOVE.B #$7F,D0 JSR -24(A6) MOVE.B HLA_CiaaICR_REQ(PC),D0 BSET #7,D0 JSR -24(A6) ;CIAA SetICR MOVE.B #$7F,D0 JSR -18(A6) MOVE.B HLA_CiaaICR_ENA(PC),D0 BSET #7,D0 JSR -18(A6) ;CIAA AbleICR ..exit RTS **************************************** HLA_ReleaseCiabResource: MOVE.L HLA_CiabResBase(PC),A6 MOVE.B #$7F,D0 JSR -24(A6) MOVE.B HLA_CiabICR_REQ(PC),D0 BSET #7,D0 JSR -24(A6) ;CIAB SetICR MOVE.B #$7F,D0 JSR -18(A6) MOVE.B HLA_CiabICR_ENA(PC),D0 BSET #7,D0 JSR -18(A6) ;CIAB AbleICR ..exit RTS **************************************** *********************************************************** * inputs: none * output: d0 contains vbr. getvbr: move.l a5,-(sp) ; save it. moveq #0,d0 ; clear movea.l 4.w,a6 ; exec base btst.b #0,296+1(a6) ; are we at least a 68010? beq.b .1 ; nope. lea.l vbr_exception(pc),a5 ; addr of function to get vbr jsr -30(a6) .1: move.l (sp)+,a5 ; restore it. rts ; return vbr_exception: dc.w $4e7a,$0801 rte ; back to user state code *********************************************************** vectorbase: ds.l 1 ; pointer to the vector base HLA_CiaaResBase DC.L 0 HLA_CiaaResName DC.B "ciaa.resource",0 HLA_CiaaICR_REQ DC.B 0 HLA_CiaaICR_ENA DC.B 0 HLA_CiaaResOpened DC.B 0 HLA_CiabResBase DC.L 0 HLA_CiabResName DC.B "ciab.resource",0 HLA_CiabICR_REQ DC.B 0 HLA_CiabICR_ENA DC.B 0 HLA_CiabResOpened DC.B 0 intflag: dc.b 0 intvek: dc.l 0 intstat: dc.w 0 .