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-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 :)
2017-05-03 14:09
HCL

Registered: Feb 2003
Posts: 728
It is somewhat unclear what the challenge really is.. except for wasting cycles in different ways :)
2017-05-04 07:52
Pex Mahoney Tufvesson

Registered: Sep 2003
Posts: 52
I would use the REU for doing nothing. At program init, write #0 to $df08, then assume number of (cycles-10) we want to waste in accumulator:

sta $df07
lda #$b0
sta $df01

Done! Anything between approximately 10 - 265 cycles wasted, in 8 bytes of code.

@HCL, the real challenge is to make a demo for X'2018. :)
2017-05-04 08:58
ChristopherJam

Registered: Aug 2004
Posts: 1409
Some shorter delays..
; minimal bytes, no IOPS
; preserves a,x,y,sp
; may clobber stack and flags

; 2 cycles (1 byte)
    nop

; 3 cycles (2 bytes)
    bit 3

; 4 cycles (2 bytes)
    nop
    nop

; 5 cycles (3 bytes)
    nop
    bit 3

; 6 cycles (3 bytes)
    nop
    nop
    nop

; 7 cycles (2 bytes)
    pha
    pla

; 8 cycles (4 bytes)
    nop
    nop
    nop
    nop

; 9 cycles (3 bytes)
    pha
    nop
    pla

;10 cycles (4 bytes)
    pha
    bit 3
    pla

;11 cycles (4 bytes)
    pha
    nop
    nop
    pla

;12 cycles (5 bytes)
    pha
    nop
    bit 3
    pla

;13 cycles (5 bytes)
    pha
    nop
    nop
    nop
    pla

;14 cycles (4 bytes)
    pha
    pha
    pla
    pla

2017-05-04 12:10
MagerValp

Registered: Dec 2001
Posts: 1078
You can replace three nops with cmp ($00,x) and save a byte.
2017-05-04 12:32
JackAsser

Registered: Jun 2002
Posts: 2014
Quote: You can replace three nops with cmp ($00,x) and save a byte.

Same goes for the 5c delay with nop+bit => cmp ($00),y
2017-05-04 13:25
MagerValp

Registered: Dec 2001
Posts: 1078
Not for any Y though, it's 6 cycles on page crossing. If you can sacrifice a zp address you can use INC/DEC zp instead.
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
csabanw
JackAsser/Booze Design
Alakran_64
Peacemaker/CENSOR/Hi..
Twoflower/ΤRIΛD
Guests online: 102
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 No Listen  (9.6)
2 Layers  (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 Diskmag Editors
1 Magic  (9.8)
2 hedning  (9.6)
3 Jazzcat  (9.5)
4 Elwix  (9.1)
5 Remix  (9.1)

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