[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Mental challenge: the rainbow



On 9 fév, 03:39, Antoine Vignau <antoine.vig...@laposte.net> wrote:
> On 9 fév, 02:33, "Marc S. Ressl" <mre...@gmail.com> wrote:
>
>
>
>
>
>
>
>
>
> > On 8 feb, 00:32, "Marc S. Ressl" <mre...@gmail.com> wrote:
>
> > > On 6 feb, 20:57, mmphosis <mmpho...@yahoo.com> wrote:
>
> > > > On Feb 5, 7:25 pm, "Marc S. Ressl" <mre...@gmail.com> wrote:
>
> > > > > Hello everyone,
>
> > > > > This code was posted by mmphosis at comp.sys.apple2.programmer:
>
> > > > >  10 A = 9200
> > > > >  20 B = 13136 + 32
> > > > >  30 C = 100
> > > > >  40  TEXT : HOME
> > > > >  50 DATA 173,87,192,173,83,192,173,84,192,173,80,192,208,251
> > > > >  55 DATA 173,86,192,160,22,136,208,253,234,173,87,192,76,9,3
> > > > >  60  FOR I = 768 TO 796
> > > > >  70  READ N: POKE I,N
> > > > >  80  NEXT
> > > > >  100  HGR : POKE  - 16302,0
> > > > >  110  HCOLOR= 4
> > > > >  120  HPLOT 0,0: CALL 62454
> > > > >  130  HCOLOR= 2
> > > > >  140  HPLOT 0,63 TO 279,63
> > > > >  150  HPLOT 0,62 TO 279,62
> > > > >  160  HCOLOR= 6
> > > > >  170  HPLOT 0,61 TO 279,61
> > > > >  180  HPLOT 0,60 TO 279,60
> > > > >  190  HCOLOR= 1
> > > > >  200  HPLOT 0,59 TO 279,59
> > > > >  210  HPLOT 0,58 TO 279,58
> > > > >  220  HCOLOR= 5
> > > > >  230  HPLOT 0,55 TO 279,55
> > > > >  240  HPLOT 0,54 TO 279,54
> > > > >  250  HCOLOR= 0
> > > > >  260  HPLOT 0,123 TO C,123
> > > > >  261  HPLOT 0,122 TO C,122
> > > > >  262  HPLOT 0,119 TO C,119
> > > > >  263  HPLOT 0,118 TO C,118
> > > > >  270  COLOR= 0
> > > > >  280  FOR I = 0 TO 39
> > > > >  290  VLIN 0,39 AT I
> > > > >  300  NEXT
> > > > >  310  COLOR= 13
> > > > >  320  HLIN 0,39 AT 14
> > > > >  330  FOR I = 0 TO 7
> > > > >  340  POKE A + I,0
> > > > >  345  POKE B + I,0
> > > > >  350  NEXT
> > > > >  360  COLOR= 1
> > > > >  370  HLIN 0,39 AT 13
> > > > >  380  VTAB 21
> > > > >  390  PRINT  TAB( 16)"RAINBOW"
> > > > >  400  PRINT : PRINT "MIXED GRAPHICS (HI-RES/COLOR)"
> > > > >  500  CALL 768
>
> > > > > I've re-factorized the timing code in OpenEmulator, and the rainbow is
> > > > > showing. My problem is the "special" lines are flickering at the
> > > > > beginning.
>
> > > > > I have checked the code, and it seems it should be flickering (the
> > > > > loop waits for a non-zero byte on the floating bus), but could
> > > > > somebody with a real Apple II or II plus check?
>
> > > > > Thanks a lot,
>
> > > > > Marc.-
>
> > > > From memory, a long long time ago, when I ran this on a real Apple II
> > > > plus, it would *usually* (emphasis on usually) display the rainbow
> > > > without any flickering.  But, I think that sometimes, if my memory
> > > > serves me, it would flicker.  It could be a timing thing:  The code
> > > > waits for a non-zero byte on the floating bus and it can only catch a
> > > > byte every amount of cycles that the loop takes to iterate.  The
> > > > positioning of those zero bytes is critical.  Maybe, sometimes it
> > > > misses depending on what byte it starts reading the floating bus at,
> > > > whereas *usually* (mmphosis on usually) it starts reading at a byte
> > > > where everything aligns and the rainbow appears without flickering.
>
> > > > mmphosis
>
> > > Hello mmphosis:
>
> > > thanks a lot for your response! I am very intrigued by this test, as
> > > it seems excellent for testing emulators. So I went through it...
>
> > > As to the BASIC part:
>
> > > * BASIC Lines 110-120 fill $2000-$3FFF with $80
> > > * BASIC Lines 130-240 draw the HIRES color lines 54-55, 58-59, 60-61,
> > > 62-63
> > > * BASIC Lines 250-263 fill lines 118, 119, 122 and 123 with color 0
> > > for X = 0 to 100 (this hides the delayed extensions of lines 54-63)
> > > * BASIC Lines 330-350 fill $23F0-$23F7 and $3370-$3377 with $00 (this
> > > is the important stuff)
>
> > > * BASIC Lines 270-300 clear the text screen to $00
> > > * BASIC Lines 360-380 draw the LORES line at Y=13 (HIRES lines 52-55)
> > > * BASIC Lines 310-320 draw the LORES line at Y=14 (HIRES lines 56-59)
>
> > > As to the assembly part:
>
> > > 0300-   AD 57 C0    LDA   $C057     // set HIRES
> > > 0303-   AD 53 C0    LDA   $C053     // set MIXED
> > > 0306-   AD 54 C0    LDA   $C054     // clear PAGE2
>
> > > 0309-   AD 50 C0    LDA   $C050     // read /TEXT, 4 cycles
> > > 030C-   D0 FB       BNE   $0309     // 3 cycles
> > > 030E-   AD 56 C0    LDA   $C056     // set LORES, 4 cycles
> > > 0311-   A0 16       LDY   #$16      // 2 cycles
> > > 0313-   88          DEY             // 2 cycles
> > > 0314-   D0 FD       BNE   $0313     // 3 cycles
> > > 0316-   EA          NOP             // 2 cycles
> > > 0317-   AD 57 C0    LDA   $C057     // set HIRES, 4 cycles
> > > 031A-   4C 09 03    JMP   $0309     // 3 cycles
>
> > > The first loop searches for a zero value while scanning HIRES. This
> > > happens on several occasions, but most importantly just before lines
> > > 51 and 55 (because of horizontal blanking).
>
> > > When the first loop exits, LORES is switched on for 4+2+5*22+2 = 118
> > > CPU cycles. This happens to be almost two scan lines (each scan line
> > > has 65 CPU cycles).
>
> > > I must confess this is pretty clever, and it also seems my emulator
> > > has a bug :-).
>
> > > With the best wishes,
>
> > > Marc.-
>
> > Hallelujah! I fixed it.
>
> > It happens the actual video rendering was 9 cycles behind the floating
> > bus timing. Now things match, and the test looks beautifully ;-).
>
> > With the best wishes!
>
> > Marc.-
>
> Congratulions, Marc,
> A really good news,
> antoine

I hate the virtual keyboard of the ipad!
and I like the photos of yours, Gentlemen,
antoine