home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Set of Apple II Hard Drive Images
/
eric.hdv
/
ANNMIDI:BACKOUT
/
MKBCLOCK.SRC.txt
< prev
Wrap
Text File
|
2020-08-13
|
4KB
|
170 lines
; MOCKINGBOARD TIMER INTERRUPT HANDLER
; MOCKINGBOARD MUST BE IN SLOT 4
;
ORG $9200
;
JMP ALLOCINT ;ALLOCATE PRODOS MLI INTERRUPT HANDLER
JMP STARTCLK ;START THE CLOCK RUNNING
JMP STOPCLK ;STOP THE CLOCK
JMP ZEROCNT ;ZERO THE CLOCK'S COUNTER
JMP CALCALRM ;ADDS DELTA TO CURRENT COUNTER AND SETS ALARM
JMP ADD2ALRM ;ADDS DELTA TO CURRENT ALARM AND SETS ALARM
JMP WAITALRM ;WAITS UNTIL ALARM FLAG BECOMES 0
BRK
;
TEMPOLO DFB $00 ;USER STORES CLOCK TEMPO HERE
TEMPOHI DFB $40
;
COUNTLO DFB $00 ;THE INTERRUPT INCREMENTS THIS 4 BYTE VALUE
COUNTML DFB $00
COUNTMH DFB $00
COUNTHI DFB $00
;
DELTALO DFB $00 ;THE USER STORES INTERVAL FROM NOW (DELTA TIME)
DELTAML DFB $00 ;FOR ALARM TO GO OFF AND CALLS
DELTAMH DFB $00 ;CALCALRM
DELTAHI DFB $00
;
ALARMLO DFB $00 ;THE USER STORES TIME FOR ALARM TO GO OFF
ALARMML DFB $00
ALARMMH DFB $00
ALARMHI DFB $00
ALARMFL DFB $00 ;THIS FLAG WILL BE ZEROED WHEN ALARM GOES OFF
;
JMP DEALLOC
;
ALLOCPRM DFB $02 ;MLI PARAMETER LIST FOR ALLOCATING INTERRUPT
ALLPRTY DFB $01
DW INTHAND
;
DEALLPRM DFB $01
DEALPRTY DFB $01
;
ALLOCINT JSR $BF00 ;CALL MLI
DFB $40 ;ALLOCATE INTERRUPT
DW ALLOCPRM ;ADRS OF PARM LIST
BCC ALLOCOK ;IF CARRY CLEAR, NO ERROR
JSR $FDDA ;ELSE PRINT ERROR CODE
BRK
ALLOCOK LDA ALLPRTY
STA DEALPRTY
RTS
;
DEALLOC JSR $BF00 ;CALL MLI
DFB $41 ;DEALLOCATE INTERRUPT
DW DEALLPRM ;ADRS OF PARM LIST
BCC DEALLOK ;IF CARRY CLEAR, NO ERROR
JSR $FDDA ;ELSE PRINT ERROR CODE
BRK
DEALLOK RTS
;----------------------------
STARTCLK SEI
LDA #$40
STA $C40B
LDA #$C0
STA $C40D
STA $C40E
LDA TEMPOLO
STA $C404
LDA TEMPOHI
CMP #$03 ;PREVENT TEMPO FROM GOING TOO FAST
BCS STORTMPH
LDA #$00
STA TEMPOLO
STA $C404
LDA #$03
STA TEMPOHI
STORTMPH STA $C405
CLI
RTS
;----------------------------
STOPCLK LDA #$00
STA $C40B
CLI
RTS
;----------------------------
ZEROCNT LDA #$00
STA COUNTLO
STA COUNTML
STA COUNTMH
STA COUNTHI
RTS
;----------------------------
CALCALRM CLC
LDA COUNTLO
ADC DELTALO
STA ALARMLO
LDA COUNTML
ADC DELTAML
STA ALARMML
LDA COUNTMH
ADC DELTAMH
STA ALARMMH
LDA COUNTHI
ADC DELTAHI
STA ALARMHI
LDA #$01
STA ALARMFL
RTS
;----------------------------
ADD2ALRM CLC
LDA ALARMLO
ADC DELTALO
STA ALARMLO
LDA ALARMML
ADC DELTAML
STA ALARMML
LDA ALARMMH
ADC DELTAMH
STA ALARMMH
LDA ALARMHI
ADC DELTAHI
STA ALARMHI
LDA #$01
STA ALARMFL
RTS
;----------------------------
WAITALRM LDA ALARMFL
BNE WAITALRM
RTS
;----------------------------
INTHAND CLD
SEI
LDA #$C0
STA $C40D
;
INC COUNTLO ;INCREMENT 4 BYTE COUNTER
BNE CNTDONE
INC COUNTML
BNE CNTDONE
INC COUNTMH
BNE CNTDONE
INC COUNTHI
BNE CNTDONE
;
CNTDONE LDA ALARMFL ;CHECK IF USER WAITING FOR AN ALARM
BEQ NOALARM
;
LDA COUNTHI ;IF SO, COMPARE COUNTER TO ALARM VALUE
CMP ALARMHI
BCC NOALARM
BNE SIGALARM
LDA COUNTMH
CMP ALARMMH
BCC NOALARM
BNE SIGALARM
LDA COUNTML
CMP ALARMML
BCC NOALARM
BNE SIGALARM
LDA COUNTLO
CMP ALARMLO
BCC NOALARM
SIGALARM LDA #0 ;SIGNAL ALARM BY ZEROING ALARM FLAG
STA ALARMFL
;
NOALARM CLI
CLC
RTS
;