home *** CD-ROM | disk | FTP | other *** search
- /*
- DTR control program. Called from Shell or Desktop. Rename to DTR.PRG
- if placed in AUTO folder.
- Call:
- DTR {"on"|"off"}
- Assumes "off" if no argument.
-
- Written by Bruce D. Nelson 1/18/87 Megamax C.
- */
-
- #include <osbind.h>
- #include <string.h>
-
- extern giaccess();
- extern rdbt();
- extern dtron();
- extern dtroff();
- extern setbt();
- extern clrbt();
-
-
- asm{
-
- giaccess:
- move.w SR,-(A7) /* save status */
- ori.w #0x700,SR /* IPL 7, disable ints */
- movem.l D1-D2/A0,-(A7) /* Save regs */
- lea 0xFFFF8800,A0 /* Adr of Sound Chip */
- move.b D1,D2 /* Get reg # */
- and.b #15,D1 /* reg 0-15 */
- move.b D1,(A0) /* select reg */
- asl.b #1,D2 /* test read/write bit */
- bcc rdbt(PC) /* go read */
- move.b D0,2(A0) /* write data to sound chip register */
- rdbt: moveq #0,D0
- move.b (A0),D0 /* read byte from sound chip register */
- movem.l (A7)+,D1-D2/A0 /* restore registers */
- move.w (A7)+,SR /* restore status */
- rts
-
- dtroff:
- moveq #16,D2 /* set dtr bit */
- bra setbt(PC) /* go set bit */
-
- dtron:
- moveq #-17,D2 /* clear dtr bit */
- bra clrbt(PC) /* go clear bit */
-
- setbt:
- movem.l D0-D2,-(A7) /* Save registers */
- move.w SR,-(A7) /* Save status */
- ori.w #0x700,SR /* IPL 7, disable ints */
- moveq #14,D1 /* port A */
- move.l D2,-(A7) /* save bit # */
- bsr giaccess(PC) /* Select port A */
- move.l (A7)+,D2 /* bit # back */
- or.b D2,D0 /* Set bits */
- moveq #0x8E,D1 /* Write to port A */
- bsr giaccess(PC) /* write new value */
- move.w (A7)+,SR /* Restore status */
- movem.l (A7)+,D0-D2 /* restore regs */
- rts
-
- clrbt:
- movem.l D0-D2,-(A7) /* Save registers */
- move.w SR,-(A7) /* Save status */
- ori.w #0x700,SR /* IPL 7, disable ints */
- moveq #14,D1 /* port A */
- move.l D2,-(A7) /* save bit # */
- bsr giaccess(PC) /* Select port A */
- move.l (A7)+,D2 /* bit # back */
- and.b D2,D0 /* Set bits */
- moveq #0x8E,D1 /* Write to port A */
- bsr giaccess(PC) /* write new value */
- move.w (A7)+,SR /* Restore status */
- movem.l (A7)+,D0-D2 /* restore regs */
- rts
- }
-
- /* main - Determine if argument is "on" or "off". Assume "off" if no arg.
- Process DTR accordingly. */
-
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- if(argc > 1 && strcmp(argv[1],"on")==0){
- Supexec(&dtron);
- printf ("DTR has been turned on\n");
- }
- else{
- Supexec(&dtroff);
- printf ("DTR has been turned off\n");
- }
-
- }
-
-
-