Fear my memory.troed wrote: I'm now reaching back 24 full years into the distant past but I think that's probably wakemode dependent. I'm saying that because I'm under the belief that I reacted already then to the TCB screen sometimes having a centered logo, sometimes not. Of course, then there's was no explanation known.
(Which makes me wonder which line length they managed to trigger since I remember the offset to be somewhat substantial)
WS3: Logo offset to the left.
WS2: Logo centered.
Visual inspection:
Line #1: Regular PAL 160
Line #2: NTSC 160 in WS2, PAL(? NTSC) 184 in WS3
(So I'm slightly confused - but it really looks like an opened left border on line #2 in WS3. I almost posted this claiming it was PAL 158 but .. )
A quick'n'dirty test with measurement tape supports a 48 pixel offset.
edit: If TCB knew about this being different between boots or at least between different STs, it's even possible they elected to purposely run the second line in NTSC since a 186 byte line would've created bitplane shifts and the necessity to handle that in code. Now I guess I need to go and disassemble the screen, again*, to find out.
edit2: Alright, so, looking at the code nothing really stands out**. The top border is opened with a single 60/50 switch with a 16 nop gap - followed by synclock and then they wait until it's time for the left border (so no try to open right border on first line) and do 228 fullscreen scanlines. 13 nops between right border and stabilizer, 13 nops between stabilizer and left border (so I assume it's done at cycle 4) - and the left border is a short no-gap switch.
Let's pretend they messed up and waited one nop too little after the first regular top border line. The left border would now happen at cycle 0, switch back at cycle 8 which would fail in WS2 but work in WS1/WS3/WS4. It would also cause the right border to become a short right (-2) - so - this seems almost consistent with what I see. What I don't have an explanation for is how the failed left border (switching back too soon) can create an NTSC 160 but there's visibly four pixels to the left of the line above (and four less on the right) - and that line being 508 cycles is what would then explain how come all the other lines are correct afterwards. And, equally strange, even the 184 byte line in WS1/3/4 needs to be 508 cycles then since the right border opens correctly on all other lines.
There must be something I'm missing, still [edit3: found it. wow]. Code below ..
/Troed
*) I did that already a year or so back when I investigated who was first with stabilized fullscreen lines and saw that the TCB screen had the exact same switches as Level 16. I'm positive that's where they got it from, and that the reason the SNYD screen isn't a fullscreen was to not steal Level 16's thunder in the Union Demo.
**)
Code: Select all
top border
$00ddd0 : 4238 820a clr.b $ffff820a.w
$00ddd4 : 7003 moveq #3,d0
$00ddd6 : 4e71 nop
$00ddd8 : 51c8 fffc dbra d0,$ddd6
$00dddc : 31fc 0002 820a move.w #2,$ffff820a.w
synclock etc
$00dde2 : 31fc 0000 8240 move.w #0,$ffff8240.w
$00dde8 : 1010 move.b (a0),d0
$00ddea : 67fc beq.s $dde8
$00ddec : 9440 sub.w d0,d2
$00ddee : e569 lsl.w d2,d1
$00ddf0 : 4df8 8800 lea $ffff8800.w,a6
$00ddf4 : 4e71 nop
$00ddf6 : 4e71 nop
$00ddf8 : 4e71 nop
$00ddfa : 4e71 nop
$00ddfc : 4e71 nop
$00ddfe : 4e71 nop
$00de00 : 4e71 nop
$00de02 : 4e71 nop
$00de04 : 4e71 nop
$00de06 : 4e71 nop
$00de08 : 4e71 nop
$00de0a : 4e71 nop
$00de0c : 4e71 nop
$00de0e : 4e71 nop
$00de10 : 4e71 nop
$00de12 : 4e71 nop
$00de14 : 4e71 nop
$00de16 : 4e71 nop
$00de18 : 4e71 nop
$00de1a : 4e71 nop
$00de1c : 4e71 nop
$00de1e : 4e71 nop
$00de20 : 4e71 nop
$00de22 : 4e71 nop
$00de24 : 4e71 nop
$00de26 : 4e71 nop
$00de28 : 4e71 nop
$00de2a : 700e moveq #$e,d0
$00de2c : 4e71 nop
$00de2e : 51c8 fffc dbra d0,$de2c
$00de32 : 41f9 00ff 820a lea $ff820a,a0
$00de38 : 303c 00e3 move.w #$e3,d0
fullscreen lines loop begins here
$00de3c : 4e71 nop
$00de3e : 1283 move.b d3,(a1)
$00de40 : 1284 move.b d4,(a1)
$00de42 : 720c moveq #$c,d1
$00de44 : 4e71 nop
$00de46 : 51c9 fffc dbra d1,$de44
$00de4a : 4e71 nop
$00de4c : 4bfa 044e lea $e29c(pc),a5
$00de50 : 7a00 moveq #0,d5
$00de52 : 1a1c move.b (a4)+,d5
$00de54 : e74d lsl.w #3,d5
$00de56 : 2c35 5000 move.l (a5,d5.w),d6
$00de5a : 3a35 5004 move.w 4(a5,d5.w),d5
$00de5e : 4bf8 8800 lea $ffff8800.w,a5
$00de62 : 0dcd 0000 movep.l d6,0(a5)
$00de66 : 0b8d 0000 movep.w d5,0(a5)
$00de6a : 4e71 nop
$00de6c : 4e71 nop
$00de6e : 4e71 nop
$00de70 : 1084 move.b d4,(a0)
$00de72 : 1083 move.b d3,(a0)
$00de74 : 4e71 nop
$00de76 : 4e71 nop
$00de78 : 4e71 nop
$00de7a : 4e71 nop
$00de7c : 4e71 nop
$00de7e : 4e71 nop
$00de80 : 4e71 nop
$00de82 : 4e71 nop
$00de84 : 4e71 nop
$00de86 : 4e71 nop
$00de88 : 4e71 nop
$00de8a : 4e71 nop
$00de8c : 4e71 nop
$00de8e : 1283 move.b d3,(a1)
$00de90 : 4e71 nop
$00de92 : 1284 move.b d4,(a1)
$00de94 : 4e71 nop
$00de96 : 4e71 nop
$00de98 : 4e71 nop
$00de9a : 4e71 nop
$00de9c : 4e71 nop
$00de9e : 4e71 nop
$00dea0 : 4e71 nop
$00dea2 : 4e71 nop
$00dea4 : 4e71 nop
$00dea6 : 51c8 ff94 dbra d0,$de3c