| |
lft
Registered: Jul 2007 Posts: 369 |
Useless coding riddle: Stable raster without I/O
Hi!
I came up with a technique to synchronise code to the raster position without accessing any I/O registers. It is not very efficient, and hence not very useful, but it was a nice intellectual exercise.
This is the premise: Provide a small piece of code (less than a page) that may start executing at any time. When execution reaches the end of the code, the current rasterline and cycle will be known. You may assume that sprites and interrupts are off, and that d011 has its default value (9b).
See if you can figure out how it's done! |
|
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
extra points for using LAS and TAS! :o) |
| |
Pex Mahoney Tufvesson
Registered: Sep 2003 Posts: 52 |
I think I can, but I'm not coding anything this time... Stop reading if you're not interested in my guesses... where's ROT13 when you need it? Ah, here it is! :)
Zl thrff vf gung lbh'er hfvat gur snpg gung n onqyvar jvyy unyg gur PCH qvssreragyl qrcraqvat ba jung nfz vafgehpgvba lbh'er pheeragyl qbvat. Fb, jevgr n ybbcrq pbqr jvgu gur rknpg nzbhag bs plpyrf ninvynoyr va n senzr - naq jevgr vg va fhpu jnl gung vg jvyy fybjyl "qevsg" gbjneqf gur "fgnoyr" cbfvgvba.
Correct?
---
Have a noise night!
http://mahoney.c64.org |
| |
lft
Registered: Jul 2007 Posts: 369 |
@Pex: Yep, that's the gist of it. |
| |
Flavioweb
Registered: Nov 2011 Posts: 463 |
;-------------------------------------------------------------------------------
; Main stable raster routine
; (C) 2014 by FlavioWeb/Asura
;-------------------------------------------------------------------------------
*= $0801
.WORD END_OF_PROGRAM
.WORD 2014
.BYTE $9E
.TEXT "2061"
.BYTE $00
END_OF_PROGRAM
.WORD $0000
;-------------------
SEI
WVB_01
LDA $D011
BMI WVB_01
WVB_02
LDA $D011
BPL WVB_02
;---------------------------------------
; Start raster IRQ alignment
;-------------------
LDX $D012
IRQ_ALIGN_01
CPX $D012
BEQ IRQ_ALIGN_01
;-------------------
IRQ_ALIGN_02
INX
LDY #$0A
IRQ_ALIGN_03
DEY
BNE IRQ_ALIGN_03
IRQ_ALIGN_04
CMP #$00
CPX $D012
BNE IRQ_ALIGN_02
LDY #$0B
IRQ_ALIGN_05
DEY
BNE IRQ_ALIGN_05
INC $D020 ; Here we are at cycle 58
CLI
RTS
Works on PAL.
(Sorry i'm hurry...)
=P |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
err, did you understand what the point of lfts post was? o_O |
| |
Zyron
Registered: Jan 2002 Posts: 2381 |
Obviously not. ;) |
| |
Flavioweb
Registered: Nov 2011 Posts: 463 |
Ok.
Forgot my previous post.
'Without access I/O regs'. |
| |
Slammer
Registered: Feb 2004 Posts: 416 |
Seams like the solution is combining Pexs hint with actual code and some kind of induction proof that ensures it always ends in the desired end state instead of an endless drift. |
| |
algorithm
Registered: May 2002 Posts: 705 |
I assume its probably using rmw instructions near/on badlines perhaps to remove jitter in stages? |
| |
Danzig
Registered: Jun 2002 Posts: 440 |
cli jsr *
worx ;) proof: One Year Crest |
... 14 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 - Next |