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: 541
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: 541
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: 1378
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: 541
IOPs and page alignment trickery allowed ;-)
2017-05-02 06:11
HCL

Registered: Feb 2003
Posts: 716
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: 473
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: 1989
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: 5018
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
grip
Guests online: 124
Top Demos
1 Next Level  (9.8)
2 Mojo  (9.7)
3 Coma Light 13  (9.7)
4 Edge of Disgrace  (9.6)
5 Comaland 100%  (9.6)
6 No Bounds  (9.6)
7 Uncensored  (9.6)
8 Wonderland XIV  (9.6)
9 Memento Mori  (9.6)
10 Bromance  (9.5)
Top onefile Demos
1 It's More Fun to Com..  (9.7)
2 Party Elk 2  (9.7)
3 Cubic Dream  (9.6)
4 Copper Booze  (9.5)
5 TRSAC, Gabber & Pebe..  (9.5)
6 Rainbow Connection  (9.5)
7 Wafer Demo  (9.5)
8 Dawnfall V1.1  (9.5)
9 Quadrants  (9.5)
10 Daah, Those Acid Pil..  (9.5)
Top Groups
1 Nostalgia  (9.3)
2 Oxyron  (9.3)
3 Booze Design  (9.3)
4 Censor Design  (9.3)
5 Crest  (9.3)
Top NTSC-Fixers
1 Pudwerx  (10)
2 Booze  (9.7)
3 Stormbringer  (9.7)
4 Fungus  (9.6)
5 Grim Reaper  (9.3)

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