Welcome, Guest. Please login or register.

Author Topic: Top 5 reasons for persisting with Amiga  (Read 7973 times)

Description:

0 Members and 1 Guest are viewing this topic.

Offline amigaksi

  • Hero Member
  • *****
  • Join Date: Dec 2006
  • Posts: 827
    • Show all replies
    • http://www.krishnasoft.com
Re: Top 5 reasons for persisting with Amiga
« on: April 17, 2007, 04:38:41 PM »
>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=320102924004
EDIT: Bad link; working link is: http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=320104919302

or 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
--------
Use PC peripherals with your amiga: http://www.mpdos.com