Log inRegister an accountBrowse CSDbHelp & documentationFacts & StatisticsThe forumsAvailable RSS-feeds on CSDbSupport CSDb Commodore 64 Scene Database
You are not logged in - nap
CSDb User Forums


Forums > C64 Coding > Timing Challenge
2017-04-28 12:12
TWW

Registered: Jul 2009
Posts: 545
Timing Challenge

Hello everyone. Figured I'd give you a small challenge before the weekend in terms of making a timing delay routine with the least amount of bytes and without destroying any registers for the following amounts of cycles:

26 cycles delay:
    pha         // 3
    pha         // 3
    pha         // 3
    nop         // 2
    bit $00     // 3
    pla         // 4
    pla         // 4
    pla         // 4 <- 26 cycles | 9 bytes


27 cycles delay:
    pha         // 3
    pha         // 3
    pha         // 3
    nop         // 2
    nop         // 2
    nop         // 2
    pla         // 4
    pla         // 4
    pla         // 4 <- 27 cycles | 9 bytes


31 cycles delay:
    pha             // 3
    lda #%00001000  // 2
    lsr             // 2 2 2 2
    bcc *-1         // 3 3 3 2
    bit $00         //       3
    pla             //       4 <- 31 cycles | 9 bytes


32 cycles delay:
    pha             // 3
    lda #%00001000  // 2
    lsr             // 2 2 2 2
    bcc *-1         // 3 3 3 2
    nop             //       2
    nop             //       2
    pla             //       4 <- 32 cycles | 9 bytes


31 cycles delay:
    pha             // 3
    lda #%00001000  // 2
    lsr             // 2 2 2 2
    bcc *-1         // 3 3 3 2
    nop             //       2
    nop             //       2
    nop             //       2
    pla             //       4 <- 34 cycles | 10 bytes


I have posted my solutions for reference and hope to see creative (hehe got it?) solutions ;-) Have a nice weekend^^
 
... 14 posts hidden. Click here to view all posts....
 
2017-04-28 13:38
Bob

Registered: Nov 2002
Posts: 71
cool... but what is the point for throwing away cycles ?
I'll rather use them ;)
2017-04-28 18:48
TWW

Registered: Jul 2009
Posts: 545
Quoting JackAsser
Obviosly SP, Flags and stack may be clobbered


Sorry, should have been more specific, Flags can be messed with although the SP should be intact but the stack may be used as long as SP is restored upon exit.
2017-04-28 20:13
ChristopherJam

Registered: Aug 2004
Posts: 1409
Standard opcodes only, or are illegals allowed?

Can the routine require a page crossing at a given point within the sequence, or should we assume the sequence is all on the same page?
2017-04-30 21:07
TWW

Registered: Jul 2009
Posts: 545
IOPs and page alignment trickery allowed ;-)
2017-05-02 06:11
HCL

Registered: Feb 2003
Posts: 728
I would go for Soci:s method, or something with JMP to share the code. Like..:
Wait10
  jmp Wait7
Wait9
  jmp Wait6
Wait8
  jmp Wait5

Wait7
  jmp Wait4
Wait6
  jmp Wait3
Wait5
  jmp Wait2

Wait4
  nop
Wait2
  nop
  rts

Wait3
  bit 0
  rts
2017-05-02 06:44
Trash

Registered: Jan 2002
Posts: 122
I wouldnt consider size at all...
wait63 .byte $c9 ; cmp#
wait62 .byte $c9 ; cmp#
...
wait3 .byte $24 ; bit $
wait2 .byte $ea ; nop
rts ; 63 bytes for all delays between 69 and 8 cycles


...unless I had a really specific case
2017-05-02 18:03
soci

Registered: Sep 2003
Posts: 480
Exactly, just JSR into the slide and each new delay costs only 3 bytes. For large enough number of different delays it might worth it.
2017-05-02 19:01
lft

Registered: Jul 2007
Posts: 369
What if we disallow stack usage? Then the JSR approach doesn't work anymore. Is that an interesting challenge?
2017-05-03 08:51
JackAsser

Registered: Jun 2002
Posts: 2014
Quote: What if we disallow stack usage? Then the JSR approach doesn't work anymore. Is that an interesting challenge?

27 cycle delay in 10 bytes, no stack usage:
stx :++ +1
ldx #4
:dex
bne :-
:ldx #0
2017-05-03 12:56
Oswald

Registered: Apr 2002
Posts: 5094
1 rasterline is about ldx #7-8. memories from 26 years ago :)
Previous - 1 | 2 | 3 - Next
RefreshSubscribe to this thread:

You need to be logged in to post in the forum.

Search the forum:
Search   for   in  
All times are CET.
Search CSDb
Advanced
Users Online
TheRyk/MYD!
Chesser/Blazon
Alakran_64
MWR/Visdom
Freeze/Blazon
Didi/Laxity
Guests online: 117
Top Demos
1 Next Level  (9.7)
2 13:37  (9.7)
3 Mojo  (9.7)
4 Coma Light 13  (9.6)
5 Edge of Disgrace  (9.6)
6 What Is The Matrix 2  (9.6)
7 The Demo Coder  (9.6)
8 Uncensored  (9.6)
9 Comaland 100%  (9.6)
10 Wonderland XIV  (9.6)
Top onefile Demos
1 Layers  (9.6)
2 No Listen  (9.6)
3 Cubic Dream  (9.6)
4 Party Elk 2  (9.6)
5 Copper Booze  (9.6)
6 Dawnfall V1.1  (9.5)
7 Rainbow Connection  (9.5)
8 Onscreen 5k  (9.5)
9 Morph  (9.5)
10 Libertongo  (9.5)
Top Groups
1 Performers  (9.3)
2 Booze Design  (9.3)
3 Oxyron  (9.3)
4 Triad  (9.3)
5 Censor Design  (9.3)
Top Webmasters
1 Slaygon  (9.6)
2 Perff  (9.6)
3 Sabbi  (9.5)
4 Morpheus  (9.4)
5 CreaMD  (9.1)

Home - Disclaimer
Copyright © No Name 2001-2024
Page generated in: 0.042 sec.