>Amiga doesn't do anything that can't be done faster, >easier and better on other platforms at the moment. So no, >there are no reasons to persist.
Not true in all cases. Some applications are easier, better, and work great on the Ataris and Amigas in their original state. If you speed them up, they work worse since for them the accuracy of timing is more significant.
I am posting some code here for Atari 400 which is about 30 year old machine but the this code shows a timer interrupt that has more accuracy than a PC timer. Similar code can be written for Amiga which has even a more accurate timer than an Atari 400, but if the PC can't even do this it follows it can't do the Amiga timing. You can use the cable on auction to boot this code directly from your PC:
>
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&ssPageName=ADME:L:LCA:US:11&item=320102924004EDIT: Bad link; working link is:
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=320104919302or you can compile it in your own 6502 Assembler and write it to a 5.25" floppy disk. This code sets a timer interrupt to change some register at the 131st scan line at the beginning of the scan line and then undoes the change after some arbitrary color clocks before the scan line ends. I am changing the color here for visual purposes, but it can be any other memory location depending on the application. You can use DLIs (copper list interrupts on Amiga), but then we would be comparing apples and oranges. Here the comparison would be just between timers:
;*** Test timer accuracy on Atari 400/800 by Krishna Software Inc. without using DLIs.
TIMERFREQLSB = 53760
TIMERFREQMSB = 53762
WSYNC = 54282
VCOUNT = 54283
DOSVEC = 10
CASINI = 2
WARMSTART = 58484
VMIRQ = 534 ;hardware irq ptr
ORG = 600h
;DW 0FFFFh
;DW StartAdr
;DW LastOffset-1
DB 0,3 ;# of sectors to load 1..255
DW ORG
DW StartAdr
Rts
StartAdr: Lda #MyReset,L
Sta CASINI
Lda #MyReset,H
Sta CASINI+1
Lda #0
Sta 580
Lda #2
Sta 9
Jmp WARMSTART
MyReset: Lda #2
Sta 9
Lda #MyReset,L
Sta CASINI
Lda #MyReset,H
Sta CASINI+1
Sei
Lda #0 ;no VBIs nor DLIs for maximum performance
Sta 54286
Sta 53774 ;disable all IRQs
Sta 54272 ;turn off screen
Lda #TimerTwoIRQ,L ;general IRQ routine but we use only for timer #2
Sta VMIRQ
Lda #TimerTwoIRQ,H
Sta VMIRQ+1
Lda #80 ;40 for join channels 3,4; +80 for channels 1+2 @1.79Mhz
Sta 53768 ;join channels at 1.79 Mhz
Lda #165 ;lsb 165
Sta 53760 ;timer #2 freq = 1789790/[A+1]
Lda #116 ;msb for rate divisor A
Sta 53762
Lda #2 ;2=timer interrupt
Sta 53774 ;enable IRQ #2
NotMidScreen: Lda VCOUNT
Cmp #65
Bne NotMidScreen
Sta WSYNC
Sta 53769 ;start timer counter
CLI
Lda #34
Sta 54272
IdleLoop: ;put your code here
Jmp IdleLoop
TimerTwoIRQ: Pha
Lda #255
Sta 53272 ;change register (like color for example)
Lda #0
Sta 53774
Lda #2
Sta 53774 ;send ack to timer irq
Nop
Nop
Lda #96
Sta 53272 ;change register (like color for example)
Pla
Rti
;LastOffset: DW 2e0h,2e1h,ORG