The BASIC-program just shows the routine. You can adjust the scroll-speed in line 20.
The assembler-routine (softscroll.prg) @ $1300 is where the work is done. I did this "by the book":
lda #$18 sta lines lda #$07 sta soft sta videoaddress lda #$0f sta attributeaddress lda #$80 sta videoaddress+1 sta attributeaddress+1 sei flag0 lda #$20 flag1 bit $d600 beq flag1 ; wait until inside vblank flag2 bit $d600 bne flag2 ; wait until outside vblank
lda videoaddress ldx #$0c ; register 12 stx $d600 flag3 bit $d600 bpl flag3 sta $d601 lda videoaddress+1 ldx #$0d ; register 13 stx $d600 flag4 bit $d600 bpl flag4 sta $d601 lda attributeaddress ldx #$14 ; register 20 stx $d600 flag5 bit $d600 bpl flag5 sta $d601 lda attributeaddress+1 ldx #$15 ; register 21 stx $d600 flag6 bit $d600 bpl flag6 sta $d601 lda soft ldx #$18 ; register 24 stx $d600 flag7 bit $d600 bpl flag7 sta $d601 dec soft bpl flag9 lda #$07 sta soft lda videoaddress+1 sec sbc #$50 ; subtract 80 from videoaddress / attributeaddress sta videoaddress+1 sta attributeaddress+1 bcs flag8 dec videoaddress dec attributeaddress flag8 dec lines bmi flag11 flag9 ldy #$f0 ldx #$00 flag10 inx bne flag10 iny bne flag10 jmp flag0 flag11 cli rts
Strange, just tried it with another TV/Monitor with VGA-In. Took 5-10 seconds to recognize the mode but then I got the text-display and the graphic-modes worked as well. Did you start the program and connect to VGA-In on your monitor?
Yes, I set it to about 60 Hz. I use the RGBI->RGBA-converter from Richard42 whose design has been used as a basis for www.bit-c128.com as far as I know. I think HSYNC and VSYNC are combined to CSYNC by this. I think I tried it on two different TFTs with success back then.
I found the original design docs by Richard42 on my hard-drive and have attached them to this post for future reference.
Do you mean VDC VGA Mania? I wrote that demo and have a PAL C128 myself. The "VGA-style-mode"-register settings are close to 60 Hz/31.5 Khz, otherwise it should not matter what state the VDC registers are in before. If I remember correctly the demo starts in 40 column-mode to display the instructions and you should have the VGA-monitor connected after the RGBI->RGBA-converter with a standard VGA-cable.
Can you try it the other way around? So that the change occurs while in VBLANK, not while outside is? So BEQ instead of BNE? Do you check the status-register-ready-bit when writing to VDC? Do you take into account the character-height set in register 9? Did you check the scrolling on its own without dual bitmap? Maybe the scroll-register itself produces those crazy results on the real thing. Never trust VICE when coding VDC. The emulation is pretty good considering it can run Risen from Oblivion, but a lot of quirks are still missing, the least of which is interlace-mode, which would be pretty hard to adapt for VICE.
Hmm, watching this in slow-motion it looks like the picture pops down and up at the reset of the scroll register. Maybe you need to wait for vblank (bit 5 of $d600) before you switch to the other bitmap?
I guess most folks would be happy if you just applied the "original" fast serial-fix to the recent firmware. I never had any issues with it. In the very seldom circumstances you want to use tape you could just unplug the uIEC. The other ideas you have sound nice and all, but I think 95% would never use these features and just want the C128 to load faster from IEC without the need for JiffyDOS or SoftJiffy.