10VersionNo=11 20OsByte = &FFF4 30OsWord = &FFF1 40DIM Rom &1000 50FOR Pass = 4 TO 6 STEP 2 60P%=&8000:O%=Rom 70[OPT Pass 80.RomStart 90 NOP:NOP:NOP 100 Jmp Service 110 EQUB &82 120 EQUB CopyR-RomStart 130 EQUB VersionNo 140 EQUS "ALARM" 150 EQUB 0 160 EQUS "Version 0.0."+STR$(VersionNo) 170.CopyR 180 EQUB 0 190 EQUS "(C) Edinburgh Software Products 1987" 200 EQUB 0 210.Service 220 Php 230 Cmp #&27 240 Beq StartUp 250 Cmp #&15 \ Is this a timer poll? 260 Beq CheckTime 270 Cmp #&04 280 Beq CheckCommand 290 Plp 300 Rts 310 320.StartUp 330 Pha:Phx:Phy 340 Lda #22:Jsr OsByte 350 Ply:Plx:Pla 360 Plp 370 Rts 380 390 400.CheckTime 410 \ Decrement time, and check clock time every few seconds 420 Pha:Phx:Phy 430 Inc Sema 440 Lda Sema: Bne NotThisOne 450 Lda buzzed:Beq NotThisOne 460 Lda cSec 470 Clc:Adc #1 480 And #63 490 Sta cSec 500 Cmp #0: Bne NotThisOne 510 Ldx #0:Ldy #1 \ -> &100 520 Lda #0 530 Sta &100 540 Lda #&0E 550 Jsr OsWord 560 Ldy #25 570.lp 580 Lda &100,Y: Sta Date,Y 590 Dey 600 Bpl lp 610 620 Ldy #7 630.lp2 640 Lda Then,Y: Cmp Now,Y 650 Bne NotThisOne 660 Dey 670 Bpl lp2 680 690 700 710 720 Jsr Buzzer 730 Lda #0:Sta buzzed 740 750.NotThisOne 760 770 Dec Sema 780 Ply:Plx:Pla 790 Plp 800 Rts 810 820.buzzed 830 EQUB 1 840 850.Sema 860 EQUB &FF 870 880.cSec 890 EQUB 0 900 910.CheckCommand 920 \ Check command line at (&F2),Y for *ALARM hh:\mm:\ss 930 Pha:Phx:Phy 940 Ldx #0 950.TestComm 960 Lda LcStr,X 970 Cmp #13:Beq DoAlarm 980 Lda (&F2),Y 990 Cmp #ASC("."): Beq DoAlarm 1000 Cmp LcStr,X: Beq NextLet 1010 Cmp UcStr,X: Beq NextLet 1020 Bra NotClaimed 1030.NextLet 1040 Inx: Iny: Bra TestComm 1050 1060.UcStr EQUS "alarm": EQUB 13 1070.LcStr EQUS "ALARM": EQUB 13 1080 1090.DoAlarm 1100 \ Set up alarm time in private workspace 1110 Ldx #0 1120.copytime 1130 Iny 1140 Lda (&F2),Y 1150 Cmp #13: Beq stored 1160 Cmp #ASC(" "): Beq copytime 1170 Sta Then,X 1180 Inx 1190 Bra copytime 1200.stored 1210 1220 Lda #1:Sta buzzed 1230 1240 1250 1260.Claimed 1270 Ply:Plx:Pla 1280 Lda #0 1290 Plp 1300 Rts 1310 1320.NotClaimed 1330 Ply:Plx:Pla 1340 Plp 1350 Rts 1360 1370.Buzzer 1380 Ldx #envblk MOD 256: Ldy #envblk DIV 256 1390 Lda #&08 1400 Jsr OsWord 1410 1420 Ldx #soundblk MOD 256: Ldy #soundblk DIV 256 1430 Lda #&07 1440 Jsr OsWord 1450 Rts 1460 1470.soundblk EQUW &11:EQUW 1:EQUW 50:EQUW &FFFF 1480 1490.envblk EQUB 1:EQUB 1:EQUB 1:EQUB 0:EQUB 0 1500 EQUB 72:EQUB 0:EQUB 0:EQUB &FD: EQUB 0 1510 EQUB &FF:EQUB 1:EQUB 126:EQUB 126 1520 1530.Then EQUS "12:00:00 " 1540.Date EQUS "Fri,07 Feb 1987." 1550.Now EQUS "12:00:00 " 1560] 1570NEXT Pass 1580OSCLI("SAVE AlaROM "+STR$~(Rom)+" +1000 8000 8000") 1590END