SOURCE MERLIN.S
FILE INFORMATION
FILENAME(S): SOURCE MERLIN.S
FILE TYPE(S): PRG
FILE SIZE: 4.2K
FIRST SEEN: 2025-11-30 21:15:14
APPEARS ON: 1 disk(s)
FILE HASH
b33d6103449d924015b39b46461a23a94c558380f2519856a13380d576f6ffde
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| TRANSACTOR DISK | SOURCE MERLIN.S | PRG | DuncanTwain | 7 | 9 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 00 0A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |..**************| 00000010: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D |***************.| 00000020: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 00000030: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 |............*.*.| 00000040: A0 A0 74 68 69 73 A0 72 6F 75 74 69 6E 65 A0 69 |..this.routine.i| 00000050: 73 A0 61 64 64 65 64 A0 A0 A0 2A 0D 2A A0 A0 A0 |s.added...*.*...| 00000060: 74 6F A0 74 68 65 A0 6E 6F 72 6D 61 6C A0 69 72 |to.the.normal.ir| 00000070: 71 A0 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 74 6F |q.......*.*...to| 00000080: A0 72 65 73 65 74 A0 74 68 65 A0 73 79 73 74 65 |.reset.the.syste| 00000090: 6D A0 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 63 6C 6F 63 |m.....*.*...cloc| 000000A0: 6B A0 28 74 69 A0 61 6E 64 A0 74 69 24 29 A0 74 |k.(ti.and.ti$).t| 000000B0: 6F A0 A0 A0 2A 0D 2A A0 A0 A0 74 68 65 A0 74 69 |o...*.*...the.ti| 000000C0: 6D 65 2D 6F 66 2D 64 61 79 A0 63 6C 6F 63 6B A0 |me-of-day.clock.| 000000D0: A0 A0 2A 0D 2A A0 A0 A0 69 6E A0 63 69 61 A0 23 |..*.*...in.cia.#| 000000E0: 31 2E A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |1...............| 000000F0: 2A 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*.*.............| 00000100: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 2A 0D |..............*.| 00000110: 2A A0 A0 A0 74 68 65 A0 74 69 2F 74 69 24 A0 63 |*...the.ti/ti$.c| 00000120: 6C 6F 63 6B A0 69 73 A0 A0 A0 A0 A0 2A 0D 2A A0 |lock.is.....*.*.| 00000130: A0 A0 73 75 62 6A 65 63 74 A0 74 6F A0 61 63 63 |..subject.to.acc| 00000140: 75 6D 75 6C 61 74 65 64 A0 A0 2A 0D 2A A0 A0 A0 |umulated..*.*...| 00000150: 65 72 72 6F 72 73 2C A0 65 73 70 65 63 69 61 6C |errors,.especial| 00000160: 6C 79 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 64 75 |ly......*.*...du| 00000170: 72 69 6E 67 A0 64 69 73 6B A0 61 6E 64 A0 74 61 |ring.disk.and.ta| 00000180: 70 65 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 61 63 63 65 |pe....*.*...acce| 00000190: 73 73 2E A0 A0 74 68 65 A0 74 6F 64 A0 63 6C 6F |ss...the.tod.clo| 000001A0: 63 6B A0 A0 2A 0D 2A A0 A0 A0 61 63 63 75 72 61 |ck..*.*...accura| 000001B0: 63 79 A0 69 73 A0 6D 61 69 6E 74 61 69 6E 65 64 |cy.is.maintained| 000001C0: A0 A0 2A 0D 2A A0 A0 A0 62 79 A0 74 68 65 A0 70 |..*.*...by.the.p| 000001D0: 6F 77 65 72 A0 6C 69 6E 65 A0 A0 A0 A0 A0 A0 A0 |ower.line.......| 000001E0: 2A 0D 2A A0 A0 A0 66 72 65 71 75 65 6E 63 79 2E |*.*...frequency.| 000001F0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 2A 0D |..............*.| 00000200: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 00000210: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 2A 0D 2A A0 |............*.*.| 00000220: A0 A0 74 68 69 73 A0 72 6F 75 74 69 6E 65 A0 73 |..this.routine.s| 00000230: 65 74 73 A0 74 68 65 A0 A0 A0 2A 0D 2A A0 A0 A0 |ets.the...*.*...| 00000240: 74 69 2F 74 69 24 A0 63 6C 6F 63 6B A0 3D A0 74 |ti/ti$.clock.=.t| 00000250: 6F A0 74 68 65 A0 A0 A0 2A 0D 2A A0 A0 A0 74 6F |o.the...*.*...to| 00000260: 64 A0 63 6C 6F 63 6B A0 6F 6E A0 74 68 65 A0 74 |d.clock.on.the.t| 00000270: 6F 64 A0 A0 A0 A0 2A 0D 2A A0 A0 A0 68 6F 75 72 |od....*.*...hour| 00000280: A0 28 6D 69 6E 75 74 65 73 A0 61 6E 64 A0 A0 A0 |.(minutes.and...| 00000290: A0 A0 A0 A0 2A 0D 2A A0 A0 A0 73 65 63 6F 6E 64 |....*.*...second| 000002A0: 73 A0 61 6C 6C A0 3D A0 7A 65 72 6F 29 2E A0 A0 |s.all.=.zero)...| 000002B0: A0 A0 2A 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |..*.*...........| 000002C0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 000002D0: 2A 0D 2A A0 A0 A0 6E 6F 65 6C A0 6E 79 6D 61 6E |*.*...noel.nyman| 000002E0: A0 A0 A0 38 2F 38 37 A0 A0 A0 A0 A0 A0 A0 2A 0D |...8/87.......*.| 000002F0: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 00000300: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 2A 0D 2A 2A |............*.**| 00000310: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000320: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 0D 0D 0D 74 |***********....t| 00000330: 69 20 3D 20 24 61 30 20 3B 66 69 72 73 74 A0 62 |i = $a0 ;first.b| 00000340: 79 74 65 A0 6F 66 A0 74 69 0D 0D 74 65 6D 70 31 |yte.of.ti..temp1| 00000350: 20 3D 20 24 66 62 20 3B 74 65 6D 70 6F 72 61 72 | = $fb ;temporar| 00000360: 79 A0 73 74 6F 72 61 67 65 2C A0 6F 72 69 67 69 |y.storage,.origi| 00000370: 6E 61 6C A0 76 61 6C 75 65 A0 75 6E 63 68 61 6E |nal.value.unchan| 00000380: 67 65 64 0D 74 65 6D 70 32 20 3D 20 24 66 63 20 |ged.temp2 = $fc | 00000390: 3B 74 65 6D 70 6F 72 61 72 79 A0 73 74 6F 72 61 |;temporary.stora| 000003A0: 67 65 2C A0 6F 72 69 67 69 6E 61 6C A0 76 61 6C |ge,.original.val| 000003B0: 75 65 A0 75 6E 63 68 61 6E 67 65 64 0D 0D 69 72 |ue.unchanged..ir| 000003C0: 71 76 65 63 20 3D 20 24 30 33 31 34 20 3B 61 64 |qvec = $0314 ;ad| 000003D0: 64 72 65 73 73 A0 6F 66 A0 69 72 71 A0 76 65 63 |dress.of.irq.vec| 000003E0: 74 6F 72 0D 0D 68 6F 75 72 73 20 3D 20 24 64 63 |tor..hours = $dc| 000003F0: 30 62 20 3B 63 69 61 A0 23 31 A0 68 6F 75 72 73 |0b ;cia.#1.hours| 00000400: A0 72 65 67 69 73 74 65 72 0D 6D 69 6E 75 74 65 |.register.minute| 00000410: 73 20 3D 20 24 64 63 30 61 20 3B 63 69 61 A0 23 |s = $dc0a ;cia.#| 00000420: 31 A0 6D 69 6E 75 74 65 73 A0 72 65 67 69 73 74 |1.minutes.regist| 00000430: 65 72 0D 73 65 63 6F 6E 64 73 20 3D 20 24 64 63 |er.seconds = $dc| 00000440: 30 39 20 3B 63 69 61 A0 23 31 A0 73 65 63 6F 6E |09 ;cia.#1.secon| 00000450: 64 73 A0 72 65 67 69 73 74 65 72 0D 74 65 6E 74 |ds.register.tent| 00000460: 68 73 20 3D 20 24 64 63 30 38 20 3B 63 69 61 A0 |hs = $dc08 ;cia.| 00000470: 23 31 A0 74 65 6E 74 68 73 A0 73 65 63 A0 72 65 |#1.tenths.sec.re| 00000480: 67 69 73 74 65 72 0D 0D 2A A0 72 6F 75 74 69 6E |gister..*.routin| 00000490: 65 A0 63 61 6E A0 62 65 A0 70 6C 61 63 65 64 A0 |e.can.be.placed.| 000004A0: 61 74 A0 61 6E 79 A0 63 6F 6E 76 65 6E 69 65 6E |at.any.convenien| 000004B0: 74 0D 2A A0 6C 6F 63 61 74 69 6F 6E 2E 0D 0D 20 |t.*.location... | 000004C0: 6F 72 67 20 24 63 30 30 30 0D 0D 2A A0 67 65 74 |org $c000..*.get| 000004D0: A0 74 68 65 A0 63 75 72 72 65 6E 74 A0 69 72 71 |.the.current.irq| 000004E0: A0 76 65 63 74 6F 72 A0 61 6E 64 A0 73 74 6F 72 |.vector.and.stor| 000004F0: 65 A0 69 74 A0 69 6E 0D 2A A0 27 68 6F 6C 64 69 |e.it.in.*.'holdi| 00000500: 72 71 2E 27 A0 A0 70 6C 61 63 65 A0 74 68 65 A0 |rq.'..place.the.| 00000510: 76 65 63 74 6F 72 A0 74 6F A0 74 68 65 A0 61 64 |vector.to.the.ad| 00000520: 64 65 64 0D 2A A0 63 6F 64 65 A0 61 74 A0 74 68 |ded.*.code.at.th| 00000530: 65 A0 69 72 71 A0 76 65 63 74 6F 72 A0 61 64 64 |e.irq.vector.add| 00000540: 72 65 73 73 2E 0D 0D 73 74 61 72 74 20 73 65 69 |ress...start sei| 00000550: 0D 20 6C 64 61 20 69 72 71 76 65 63 0D 20 73 74 |. lda irqvec. st| 00000560: 61 20 68 6F 6C 64 69 72 71 0D 20 6C 64 61 20 69 |a holdirq. lda i| 00000570: 72 71 76 65 63 2B 31 0D 20 73 74 61 20 68 6F 6C |rqvec+1. sta hol| 00000580: 64 69 72 71 2B 31 0D 20 6C 64 61 20 23 3C 6E 65 |dirq+1. lda #<ne| 00000590: 77 69 72 71 0D 20 73 74 61 20 69 72 71 76 65 63 |wirq. sta irqvec| 000005A0: 0D 20 6C 64 61 20 23 3E 6E 65 77 69 72 71 0D 20 |. lda #>newirq. | 000005B0: 73 74 61 20 69 72 71 76 65 63 2B 31 0D 20 63 6C |sta irqvec+1. cl| 000005C0: 69 0D 20 72 74 73 0D 0D 0D 68 6F 6C 64 69 72 71 |i. rts...holdirq| 000005D0: 20 68 65 78 20 30 30 2C 30 30 0D 0D 3B 63 6F 64 | hex 00,00..;cod| 000005E0: 65 A0 61 64 64 65 64 A0 74 6F A0 69 72 71 A0 72 |e.added.to.irq.r| 000005F0: 6F 75 74 69 6E 65 0D 3B 73 74 61 72 74 73 A0 68 |outine.;starts.h| 00000600: 65 72 65 0D 0D 6E 65 77 69 72 71 20 6C 64 61 20 |ere..newirq lda | 00000610: 74 65 6D 70 31 20 3B 73 74 6F 72 65 A0 63 75 72 |temp1 ;store.cur| 00000620: 72 65 6E 74 A0 76 61 6C 75 65 73 A0 6F 66 0D 20 |rent.values.of. | 00000630: 70 68 61 20 20 3B 74 65 6D 70 31 A0 61 6E 64 A0 |pha ;temp1.and.| 00000640: 74 65 6D 70 32 A0 6F 6E A0 73 74 61 63 6B 0D 20 |temp2.on.stack. | 00000650: 6C 64 61 20 74 65 6D 70 32 20 3B 73 6F A0 77 65 |lda temp2 ;so.we| 00000660: A0 63 61 6E A0 72 65 73 74 6F 72 65 A0 74 68 65 |.can.restore.the| 00000670: 6D A0 69 6E A0 63 61 73 65 0D 20 70 68 61 20 20 |m.in.case. pha | 00000680: 3B 74 68 65 A0 69 6E 74 65 72 72 75 70 74 65 64 |;the.interrupted| 00000690: A0 61 70 70 6C 69 63 61 74 69 6F 6E A0 75 73 65 |.application.use| 000006A0: 73 A0 74 68 65 6D 0D 0D 0D 20 6C 64 61 20 68 6F |s.them... lda ho| 000006B0: 75 72 73 20 3B 72 65 61 64 69 6E 67 A0 74 68 65 |urs ;reading.the| 000006C0: A0 68 6F 75 72 73 A0 72 65 67 69 73 74 65 72 0D |.hours.register.| 000006D0: 20 73 74 61 20 74 65 6D 70 31 20 3B 68 61 6C 74 | sta temp1 ;halt| 000006E0: 73 A0 74 68 65 A0 63 6C 6F 63 6B 2C A0 77 65 A0 |s.the.clock,.we.| 000006F0: 73 74 6F 72 65 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 |store.*.........| 00000700: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000710: 3B 74 68 65 A0 76 61 6C 75 65 A0 69 6E A0 74 65 |;the.value.in.te| 00000720: 6D 70 31 2C A0 6A 75 73 74 0D 2A A0 A0 A0 A0 A0 |mp1,.just.*.....| 00000730: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000740: A0 A0 A0 A0 3B 69 6E A0 63 61 73 65 A0 69 74 27 |....;in.case.it'| 00000750: 73 A0 74 69 6D 65 A0 74 6F 0D 2A A0 A0 A0 A0 A0 |s.time.to.*.....| 00000760: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000770: A0 A0 A0 A0 3B 75 73 65 A0 69 74 0D 0D 20 6C 64 |....;use.it.. ld| 00000780: 61 20 6D 69 6E 75 74 65 73 20 3B 63 68 65 63 6B |a minutes ;check| 00000790: A0 66 6F 72 A0 6D 69 6E 75 74 65 73 A0 3D A0 7A |.for.minutes.=.z| 000007A0: 65 72 6F 0D 20 62 6E 65 20 65 78 69 74 20 3B 69 |ero. bne exit ;i| 000007B0: 66 A0 6E 6F 74 A0 7A 65 72 6F 2C A0 6E 6F 74 A0 |f.not.zero,.not.| 000007C0: 74 69 6D 65 A0 74 6F A0 75 70 64 61 74 65 0D 0D |time.to.update..| 000007D0: 20 6C 64 61 20 73 65 63 6F 6E 64 73 20 3B 63 68 | lda seconds ;ch| 000007E0: 65 63 6B A0 66 6F 72 A0 7A 65 72 6F A0 73 65 63 |eck.for.zero.sec| 000007F0: 6F 6E 64 73 0D 20 62 6E 65 20 65 78 69 74 20 3B |onds. bne exit ;| 00000800: 61 6E 64 A0 73 6B 69 70 A0 75 70 64 61 74 65 A0 |and.skip.update.| 00000810: 69 66 A0 6E 6F 74 A0 7A 65 72 6F 0D 0D 20 6C 64 |if.not.zero.. ld| 00000820: 61 20 74 65 6E 74 68 73 20 3B 63 68 65 63 6B A0 |a tenths ;check.| 00000830: 66 6F 72 A0 7A 65 72 6F A0 74 65 6E 74 68 73 A0 |for.zero.tenths.| 00000840: 6F 66 A0 61 A0 73 65 63 6F 6E 64 0D 20 62 6E 65 |of.a.second. bne| 00000850: 20 65 78 69 74 20 3B 61 6E 64 A0 73 6B 69 70 A0 | exit ;and.skip.| 00000860: 75 70 64 61 74 65 A0 6F 66 A0 6E 6F 74 A0 7A 65 |update.of.not.ze| 00000870: 72 6F 0D 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |ro..*...........| 00000880: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 74 |..............;t| 00000890: 68 65 A0 75 70 64 61 74 65 A0 72 6F 75 74 69 6E |he.update.routin| 000008A0: 65 A0 63 6F 6E 76 65 72 74 73 A0 74 68 65 0D 2A |e.converts.the.*| 000008B0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 000008C0: A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 76 61 6C 75 65 A0 |.........;value.| 000008D0: 69 6E A0 74 68 65 A0 68 6F 75 72 73 A0 72 65 67 |in.the.hours.reg| 000008E0: 69 73 74 65 72 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 |ister.*.........| 000008F0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000900: 3B 66 72 6F 6D A0 62 63 64 2F 61 6D 2D 70 6D A0 |;from.bcd/am-pm.| 00000910: 66 6F 72 6D 61 74 A0 69 6E 74 6F 0D 2A A0 A0 A0 |format.into.*...| 00000920: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000930: A0 A0 A0 A0 A0 A0 3B 61 A0 62 69 6E 61 72 79 A0 |......;a.binary.| 00000940: 6E 75 6D 62 65 72 A0 69 6E A0 74 68 65 A0 72 61 |number.in.the.ra| 00000950: 6E 67 65 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |nge.*...........| 00000960: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 30 |..............;0| 00000970: 2D 32 35 2C A0 77 68 65 72 65 A0 30 A0 6F 72 A0 |-25,.where.0.or.| 00000980: 31 32 A0 65 71 75 61 6C 73 A0 31 32 61 6D 2C 0D |12.equals.12am,.| 00000990: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 000009A0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 31 3D 31 61 6D |..........;1=1am| 000009B0: 2C A0 31 33 3D 31 70 6D 2C A0 61 6E 64 A0 32 35 |,.13=1pm,.and.25| 000009C0: 3D 6E 6F 6F 6E 2E 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 |=noon..*........| 000009D0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 000009E0: A0 3B 74 68 65 A0 63 6F 6E 76 65 72 74 65 64 A0 |.;the.converted.| 000009F0: 6E 75 6D 62 65 72 A0 69 73 A0 75 73 65 64 A0 61 |number.is.used.a| 00000A00: 73 A0 61 6E 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |s.an.*..........| 00000A10: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B |...............;| 00000A20: 69 6E 64 65 78 A0 74 6F A0 61 A0 74 61 62 6C 65 |index.to.a.table| 00000A30: A0 74 6F A0 73 74 6F 72 65 A0 74 68 65 0D 2A A0 |.to.store.the.*.| 00000A40: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000A50: A0 A0 A0 A0 A0 A0 A0 A0 3B 70 72 6F 70 65 72 A0 |........;proper.| 00000A60: 76 61 6C 75 65 73 A0 69 6E A0 74 68 65 A0 74 68 |values.in.the.th| 00000A70: 72 65 65 A0 62 79 74 65 73 0D 2A A0 A0 A0 A0 A0 |ree.bytes.*.....| 00000A80: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000A90: A0 A0 A0 A0 3B 6F 66 A0 74 69 2E 0D 0D 0D 20 6C |....;of.ti.... l| 00000AA0: 64 61 20 74 65 6D 70 31 20 3B 68 6F 75 72 73 A0 |da temp1 ;hours.| 00000AB0: 72 65 67 69 73 74 65 72 A0 76 61 6C 75 65 0D 20 |register.value. | 00000AC0: 61 6E 64 20 23 24 30 66 20 3B 6D 61 73 6B A0 6F |and #$0f ;mask.o| 00000AD0: 75 74 A0 75 70 70 65 72 A0 62 63 64 A0 64 69 67 |ut.upper.bcd.dig| 00000AE0: 69 74 2C A0 61 6D 2D 70 6D 0D 20 73 74 61 20 74 |it,.am-pm. sta t| 00000AF0: 65 6D 70 32 20 3B 73 74 6F 72 65 A0 6C 6F 77 65 |emp2 ;store.lowe| 00000B00: 72 A0 68 6F 75 72 73 A0 64 69 67 69 74 0D 20 6C |r.hours.digit. l| 00000B10: 64 61 20 74 65 6D 70 31 20 3B 67 65 74 A0 68 6F |da temp1 ;get.ho| 00000B20: 75 72 73 A0 76 61 6C 75 65 A0 61 67 61 69 6E 0D |urs.value.again.| 00000B30: 20 61 6E 64 20 23 24 31 30 20 3B 6D 61 73 6B A0 | and #$10 ;mask.| 00000B40: 6F 75 74 A0 61 6C 6C A0 62 75 74 A0 74 68 65 A0 |out.all.but.the.| 00000B50: 75 70 70 65 72 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 |upper.*.........| 00000B60: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000B70: 3B 62 63 64 A0 64 69 67 69 74 2E A0 A0 74 68 69 |;bcd.digit...thi| 00000B80: 73 A0 63 61 6E A0 6F 6E 6C 79 A0 62 65 0D 2A A0 |s.can.only.be.*.| 00000B90: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000BA0: A0 A0 A0 A0 A0 A0 A0 A0 3B 7A 65 72 6F A0 6F 72 |........;zero.or| 00000BB0: A0 6F 6E 65 2E 0D 20 62 65 71 20 73 6B 69 70 74 |.one.. beq skipt| 00000BC0: 65 6E 20 3B 69 66 A0 7A 65 72 6F 2C A0 64 6F 6E |en ;if.zero,.don| 00000BD0: 27 74 A0 61 64 64 A0 31 30 A0 74 6F A0 74 65 6D |'t.add.10.to.tem| 00000BE0: 70 32 0D 20 63 6C 63 0D 20 6C 64 61 20 23 24 30 |p2. clc. lda #$0| 00000BF0: 61 20 3B 69 66 A0 68 69 67 68 A0 68 6F 75 72 73 |a ;if.high.hours| 00000C00: A0 64 69 67 69 74 A0 77 61 73 A0 6F 6E 65 2C 0D |.digit.was.one,.| 00000C10: 20 61 64 63 20 74 65 6D 70 32 20 3B 61 64 64 A0 | adc temp2 ;add.| 00000C20: 31 30 A0 74 6F A0 74 65 6D 70 32 0D 20 73 74 61 |10.to.temp2. sta| 00000C30: 20 74 65 6D 70 32 0D 0D 73 6B 69 70 74 65 6E 20 | temp2..skipten | 00000C40: 6C 64 61 20 74 65 6D 70 31 20 3B 67 65 74 A0 68 |lda temp1 ;get.h| 00000C50: 6F 75 72 73 A0 76 61 6C 75 65 A0 61 67 61 69 6E |ours.value.again| 00000C60: 0D 20 62 70 6C 20 73 6B 69 70 61 70 20 3B 69 66 |. bpl skipap ;if| 00000C70: A0 68 69 67 68 A0 62 69 74 A0 63 6C 65 61 72 0D |.high.bit.clear.| 00000C80: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 00000C90: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 74 69 6D 65 A0 |..........;time.| 00000CA0: 69 73 A0 61 6D 2C A0 73 6B 69 70 A0 74 68 65 A0 |is.am,.skip.the.| 00000CB0: 72 6F 75 74 69 6E 65 0D 2A A0 A0 A0 A0 A0 A0 A0 |routine.*.......| 00000CC0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000CD0: A0 A0 3B 74 68 61 74 A0 61 64 64 73 A0 31 32 A0 |..;that.adds.12.| 00000CE0: 66 6F 72 A0 70 6D A0 74 69 6D 65 73 0D 20 63 6C |for.pm.times. cl| 00000CF0: 63 0D 20 6C 64 61 20 23 24 30 63 20 3B 61 64 64 |c. lda #$0c ;add| 00000D00: A0 31 32 A0 74 6F A0 74 65 6D 70 32 0D 20 61 64 |.12.to.temp2. ad| 00000D10: 63 20 74 65 6D 70 32 20 3B 69 66 A0 74 69 6D 65 |c temp2 ;if.time| 00000D20: A0 69 73 A0 70 6D 0D 20 73 74 61 20 74 65 6D 70 |.is.pm. sta temp| 00000D30: 32 0D 0D 73 6B 69 70 61 70 20 6C 64 79 20 74 65 |2..skipap ldy te| 00000D40: 6D 70 32 20 3B 70 75 74 A0 69 6E 64 65 78 A0 74 |mp2 ;put.index.t| 00000D50: 6F A0 74 61 62 6C 65 A0 69 6E A0 79 0D 20 6C 64 |o.table.in.y. ld| 00000D60: 61 20 74 61 62 6C 65 31 2C 79 20 3B 67 65 74 A0 |a table1,y ;get.| 00000D70: 76 61 6C 75 65 73 A0 66 72 6F 6D 0D 20 73 74 61 |values.from. sta| 00000D80: 20 74 69 20 3B 74 68 72 65 65 A0 74 61 62 6C 65 | ti ;three.table| 00000D90: 73 0D 20 6C 64 61 20 74 61 62 6C 65 32 2C 79 20 |s. lda table2,y | 00000DA0: 3B 61 6E 64 A0 73 74 6F 72 65 A0 69 6E A0 74 68 |;and.store.in.th| 00000DB0: 65 0D 20 73 74 61 20 74 69 2B 31 20 3B 74 68 72 |e. sta ti+1 ;thr| 00000DC0: 65 65 A0 62 79 74 65 73 0D 20 6C 64 61 20 74 61 |ee.bytes. lda ta| 00000DD0: 62 6C 65 33 2C 79 20 3B 6F 66 A0 74 69 0D 20 73 |ble3,y ;of.ti. s| 00000DE0: 74 61 20 74 69 2B 32 0D 0D 0D 2A A0 A0 A0 A0 A0 |ta ti+2...*.....| 00000DF0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000E00: A0 A0 A0 A0 3B 72 65 73 74 61 72 74 A0 64 69 73 |....;restart.dis| 00000E10: 70 6C 61 79 2C 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 |play,.*.........| 00000E20: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |................| 00000E30: 3B 72 65 73 74 6F 72 65 A0 74 68 65 A0 70 72 65 |;restore.the.pre| 00000E40: 76 69 6F 75 73 A0 76 61 6C 75 65 73 A0 69 6E 0D |vious.values.in.| 00000E50: 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |*...............| 00000E60: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 74 65 6D 70 31 |..........;temp1| 00000E70: A0 61 6E 64 A0 74 65 6D 70 32 2C A0 61 6E 64 A0 |.and.temp2,.and.| 00000E80: 6A 75 6D 70 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |jump.*..........| 00000E90: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B |...............;| 00000EA0: 74 68 72 6F 75 67 68 A0 74 68 65 A0 73 74 6F 72 |through.the.stor| 00000EB0: 65 64 A0 69 72 71 A0 76 65 63 74 6F 72 A0 74 6F |ed.irq.vector.to| 00000EC0: 0D 2A A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 |.*..............| 00000ED0: A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 A0 3B 63 6F 6D 70 |...........;comp| 00000EE0: 6C 65 74 65 A0 74 68 65 A0 69 72 71 A0 72 6F 75 |lete.the.irq.rou| 00000EF0: 74 69 6E 65 2E 0D 0D 65 78 69 74 20 6C 64 61 20 |tine...exit lda | 00000F00: 74 65 6E 74 68 73 20 3B 72 65 61 64 A0 74 65 6E |tenths ;read.ten| 00000F10: 74 68 73 A0 74 6F A0 72 65 73 74 61 72 74 A0 64 |ths.to.restart.d| 00000F20: 69 73 70 6C 61 79 0D 20 70 6C 61 0D 20 73 74 61 |isplay. pla. sta| 00000F30: 20 74 65 6D 70 32 0D 20 70 6C 61 0D 20 73 74 61 | temp2. pla. sta| 00000F40: 20 74 65 6D 70 31 0D 20 6A 6D 70 20 28 68 6F 6C | temp1. jmp (hol| 00000F50: 64 69 72 71 29 0D 0D 0D 2A A0 74 68 65 A0 66 6F |dirq)...*.the.fo| 00000F60: 6C 6C 6F 77 69 6E 67 A0 74 68 72 65 65 A0 74 61 |llowing.three.ta| 00000F70: 62 6C 65 73 A0 68 6F 6C 64 A0 74 68 65 A0 76 61 |bles.hold.the.va| 00000F80: 6C 75 65 73 A0 6E 6F 72 6D 61 6C 6C 79 0D 2A A0 |lues.normally.*.| 00000F90: 66 6F 75 6E 64 A0 69 6E A0 74 68 65 A0 74 68 72 |found.in.the.thr| 00000FA0: 65 65 A0 62 79 74 65 73 A0 6F 66 A0 74 69 A0 61 |ee.bytes.of.ti.a| 00000FB0: 74 A0 74 68 65 A0 27 74 6F 70 27 A0 6F 66 A0 65 |t.the.'top'.of.e| 00000FC0: 61 63 68 A0 68 6F 75 72 2E 0D 0D 74 61 62 6C 65 |ach.hour...table| 00000FD0: 31 20 68 65 78 20 30 30 2C 30 33 2C 30 36 2C 30 |1 hex 00,03,06,0| 00000FE0: 39 2C 30 64 2C 31 30 2C 31 33 2C 31 37 2C 31 61 |9,0d,10,13,17,1a| 00000FF0: 2C 31 64 2C 32 30 2C 32 34 0D 20 68 65 78 20 30 |,1d,20,24. hex 0| 00001000: 30 2C 32 61 2C 32 65 2C 33 31 2C 33 34 2C 33 38 |0,2a,2e,31,34,38| 00001010: 2C 33 62 2C 33 65 2C 34 31 2C 34 35 2C 34 38 2C |,3b,3e,41,45,48,| 00001020: 34 62 2C 32 37 0D 0D 74 61 62 6C 65 32 20 68 65 |4b,27..table2 he| 00001030: 78 20 30 30 2C 34 62 2C 39 37 2C 65 33 2C 32 66 |x 00,4b,97,e3,2f| 00001040: 2C 37 61 2C 63 36 2C 31 32 2C 35 65 2C 61 39 2C |,7a,c6,12,5e,a9,| 00001050: 66 35 2C 34 31 0D 20 68 65 78 20 30 30 2C 64 38 |f5,41. hex 00,d8| 00001060: 2C 32 34 2C 37 30 2C 62 63 2C 30 37 2C 35 33 2C |,24,70,bc,07,53,| 00001070: 39 66 2C 65 62 2C 33 36 2C 38 32 2C 63 65 2C 38 |9f,eb,36,82,ce,8| 00001080: 64 0D 0D 74 61 62 6C 65 33 20 68 65 78 20 30 30 |d..table3 hex 00| 00001090: 2C 63 30 2C 38 30 2C 34 30 2C 30 30 2C 63 30 2C |,c0,80,40,00,c0,| 000010A0: 38 30 2C 34 30 2C 30 30 2C 63 30 2C 38 30 2C 34 |80,40,00,c0,80,4| 000010B0: 30 0D 20 68 65 78 20 30 30 2C 63 30 2C 38 30 2C |0. hex 00,c0,80,| 000010C0: 34 30 2C 30 30 2C 63 30 2C 38 30 2C 34 30 2C 30 |40,00,c0,80,40,0| 000010D0: 30 2C 63 30 2C 38 30 2C 34 30 2C 30 30 0D |0,c0,80,40,00. |
..*****************************.*
*.* THIS ROUTINE I
S ADDED *.* TO THE NORMAL IRQ
*.* TO RESET THE SYSTEM *.* CLOC
K (TI AND TI$) TO *.* THE TIME-OF-DA
Y CLOCK *.* IN CIA #1.
*.* *.* THE
TI/TI$ CLOCK IS *.* SUBJECT TO ACC
UMULATED *.* ERRORS, ESPECIALLY
*.* DURING DISK AND TAPE *.* ACCE
SS. THE TOD CLOCK *.* ACCURACY IS MA
INTAINED *.* BY THE POWER LINE
*.* FREQUENCY. *.*
*.* THIS ROUTINE S
ETS THE *.* TI/TI$ CLOCK = TO THE
*.* TOD CLOCK ON THE TOD *.* HOUR
(MINUTES AND *.* SECONDS ALL =
ZERO). *.*
*.* NOEL NYMAN 8/87 *.*
*.******************
***********....TI = $A0 ;FIRST BYTE OF T
I..TEMP1 = $FB ;TEMPORARY STORAGE, ORIGI
NAL VALUE UNCHANGED.TEMP2 = $FC ;TEMPORA
RY STORAGE, ORIGINAL VALUE UNCHANGED..IR
QVEC = $0314 ;ADDRESS OF IRQ VECTOR..HOU
RS = $DC0B ;CIA #1 HOURS REGISTER.MINUTE
S = $DC0A ;CIA #1 MINUTES REGISTER.SECON
DS = $DC09 ;CIA #1 SECONDS REGISTER.TENT
HS = $DC08 ;CIA #1 TENTHS SEC REGISTER..
* ROUTINE CAN BE PLACED AT ANY CONVENIEN
T.* LOCATION... ORG $C000..* GET THE CUR
RENT IRQ VECTOR AND STORE IT IN.* 'HOLDI
RQ.' PLACE THE VECTOR TO THE ADDED.* CO
DE AT THE IRQ VECTOR ADDRESS...START SEI
. LDA IRQVEC. STA HOLDIRQ. LDA IRQVEC+1.
STA HOLDIRQ+1. LDA #<NEWIRQ. STA IRQVEC
. LDA #>NEWIRQ. STA IRQVEC+1. CLI. RTS..
.HOLDIRQ HEX 00,00..;CODE ADDED TO IRQ R
OUTINE.;STARTS HERE..NEWIRQ LDA TEMP1 ;S
TORE CURRENT VALUES OF. PHA ;TEMP1 AND
TEMP2 ON STACK. LDA TEMP2 ;SO WE CAN RES
TORE THEM IN CASE. PHA ;THE INTERRUPTED
APPLICATION USES THEM... LDA HOURS ;REA
DING THE HOURS REGISTER. STA TEMP1 ;HALT
S THE CLOCK, WE STORE.*
;THE VALUE IN TEMP1, JUST.*
;IN CASE IT'S TIME T
O.* ;USE IT.. LD
A MINUTES ;CHECK FOR MINUTES = ZERO. BNE
EXIT ;IF NOT ZERO, NOT TIME TO UPDATE..
LDA SECONDS ;CHECK FOR ZERO SECONDS. BN
E EXIT ;AND SKIP UPDATE IF NOT ZERO.. LD
A TENTHS ;CHECK FOR ZERO TENTHS OF A SEC
OND. BNE EXIT ;AND SKIP UPDATE OF NOT ZE
RO..* ;THE UPDAT
E ROUTINE CONVERTS THE.*
;VALUE IN THE HOURS REGISTER.*
;FROM BCD/AM-PM
FORMAT INTO.* ;A
BINARY NUMBER IN THE RANGE.*
;0-25, WHERE 0 OR 12 EQUAL
S 12AM,.* ;1=1AM
, 13=1PM, AND 25=NOON..*
;THE CONVERTED NUMBER IS USED A
S AN.* ;INDEX TO
A TABLE TO STORE THE.*
;PROPER VALUES IN THE THREE BYTE
S.* ;OF TI.... L
DA TEMP1 ;HOURS REGISTER VALUE. AND #$0F
;MASK OUT UPPER BCD DIGIT, AM-PM. STA T
EMP2 ;STORE LOWER HOURS DIGIT. LDA TEMP1
;GET HOURS VALUE AGAIN. AND #$10 ;MASK
OUT ALL BUT THE UPPER.*
;BCD DIGIT. THIS CAN ONLY BE.*
;ZERO OR ONE.. B
EQ SKIPTEN ;IF ZERO, DON'T ADD 10 TO TEM
P2. CLC. LDA #$0A ;IF HIGH HOURS DIGIT W
AS ONE,. ADC TEMP2 ;ADD 10 TO TEMP2. STA
TEMP2..SKIPTEN LDA TEMP1 ;GET HOURS VAL
UE AGAIN. BPL SKIPAP ;IF HIGH BIT CLEAR.
* ;TIME IS AM, S
KIP THE ROUTINE.*
;THAT ADDS 12 FOR PM TIMES. CLC. LDA #
$0C ;ADD 12 TO TEMP2. ADC TEMP2 ;IF TIME
IS PM. STA TEMP2..SKIPAP LDY TEMP2 ;PUT
INDEX TO TABLE IN Y. LDA TABLE1,Y ;GET
VALUES FROM. STA TI ;THREE TABLES. LDA T
ABLE2,Y ;AND STORE IN THE. STA TI+1 ;THR
EE BYTES. LDA TABLE3,Y ;OF TI. STA TI+2.
..* ;RESTART DIS
PLAY,.* ;RESTORE
THE PREVIOUS VALUES IN.*
;TEMP1 AND TEMP2, AND JUMP.*
;THROUGH THE STOR
ED IRQ VECTOR TO.*
;COMPLETE THE IRQ ROUTINE...EXIT LDA
TENTHS ;READ TENTHS TO RESTART DISPLAY.
PLA. STA TEMP2. PLA. STA TEMP1. JMP (HOL
DIRQ)...* THE FOLLOWING THREE TABLES HOL
D THE VALUES NORMALLY.* FOUND IN THE THR
EE BYTES OF TI AT THE 'TOP' OF EACH HOUR
...TABLE1 HEX 00,03,06,09,0D,10,13,17,1A
,1D,20,24. HEX 00,2A,2E,31,34,38,3B,3E,4
1,45,48,4B,27..TABLE2 HEX 00,4B,97,E3,2F
,7A,C6,12,5E,A9,F5,41. HEX 00,D8,24,70,B
C,07,53,9F,EB,36,82,CE,8D..TABLE3 HEX 00
,C0,80,40,00,C0,80,40,00,C0,80,40. HEX 0
0,C0,80,40,00,C0,80,40,00,C0,80,40,00.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL