_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL