************************************************ * * * $70 interrupt test by Jedi from Sector One * * * ************************************************ header move cs,a move a,ds bsr installISR * Comment the following line if you want to kill that nasty demo after * having pressed a key bra.s resid xor a,a trap #$16 bsr uninstallISR move #$4c00,a trap #$21 resid move #@end,d move #$3100,a trap #$21 * readRTC : ax = index readRTC pushf intoff or.b #$80,a out.b a,$70 bra.s *+2 in.b $71,a push a bra.s *+2 move.b #$d,a out.b a,$70 bra.s *+2 in.b $71,a pop a popf rts * setRTC : ax = index ; dl = value setRTC pushf push a intoff or.b #$80,a out.b a,$70 bra.s *+2 move.b d,a out.b a,$71 bra.s *+2 move.b #$d,a out.b a,$70 bra.s *+2 in.b $71,a pop a popf rts installISR move #$3570,a trap #$21 cs:move b,old70int cs:move es,old70int+2 move #int70proc,d push ds move cs,a move a,ds move #$2570,a trap #$21 pop ds move #$b,a bsr readRTC or.b #$40,a move a,d move #$b,a bsr setRTC move #$c,a bsr readRTC move #$a,a bsr readRTC and.b #$f0,a or.b #8,a move a,d move #$ah,a bsr setRTC intoff in.b $a1,a and.b #$fe,a bra.s *+2 out.b a,$a1 inton rts uninstallISR move #$b,a bsr readRTC and.b #$bf,a move.b a,d move #$b,a bsr setRTC move #$a,a bsr readRTC and.b #$f0,a or.b #6,a move a,d move #$a,a bsr setRTC push ds move #$2570,a cs:lds old70int,d trap #$21 pop ds rts * Here is the routine called periodically int70proc push a push d push es move #$3c8,d xor.b a,a out.b a,d inc d out.b a,d out.b a,d jerky move.b #127,a out.b a,d cs:inc.b jerky+1 move #$c,a bsr readRTC intoff move.b #$20,a out.b a,$a0 out.b a,$20 pop es pop d pop a rti old70int dc.l 0 segment ds.l $400 stack segment end