| |
Digger
Registered: Mar 2005 Posts: 448 |
$d011 trickery duplicated text lines
Does any one know the $d011 trick to repeat the first char row? I am trying to cancel badlines on the 8th line of each charline (between cycles 54-57) but it doesn't work. The first line gets duplicated but only twice. |
|
... 57 posts hidden. Click here to view all posts.... |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Thanks again for testing.
Quoting Martin PiperEmulation now matches real C64C
No, it doesn't.
The one $ff byte that is visible in the beginning of rasterline $30 is white on the real C64C, but green on the emulator.
This very same byte is also visible in the last rasterline after the four black '@' characters. In the code you can see that #100 is put in $0404, in the color white. It is the last byte of that character's gfx that you are seeing.
If you would put reverse spaces in memory locations $0400 ... $0427, you would see that on the real thing they would have the colors that are in $d800 ... $d827, but the emulator will show them in the colors that are at the bottom of the screen. See the first picture that I posted. The bug is that the screen ram and color ram memory locations do not match in the very first rasterline. |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Quote: Quote:The color of that one $ff-byte on rasterline $30 is green on the emulator, but white on the real C64, is that right?
If so, then there is an emulator bug.
make sure to test this on different C64s - and make sure to use the matching VICII type in x64sc. This sounds to me like one of those things that isnt fully understood AND which is not consistant across individual chips either - perhaps this is related: https://sourceforge.net/p/vice-emu/bugs/218/
To me it looks like a plain emulator bug. The VIC fetches 12 bits at once in the c-accesses, therefore I expected screen ram and color ram memory addresses to always match. But they don't in the emulator on rasterline $30 for the code posted in this thread, while they do on the real C64C. |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Quoting Martin Piper
The bottom line does seem to be the "sprite register" area for the chars, but not the colour RAM...?!
Since a line crunch is happening, the VIC will fetch from memory beyond the visible screen. So the bottomline (as far as it is not hidden by the FLI bug) will show characters in memory locations $07e8 ... $07ff and then wrap around to $0400 again. It should do the same for the colors, that is, fetch from $dbe8 ... $dbff and wrap around to $d800 again.
So, the first four black '@' characters on the bottom row are stored in $0400 ... $0403 and $d800 ... $d803.
Here is some code that might show the bug more clearly:
//ZP-adresses
.const irqA = 2
.const irqX = 3
.const irqY = 4
//Variables
.var IrqLijn0 = $2f
*=$0801
// 10 SYS2064
.byte $0B, $08, $0A, $00, $9E, $32, $30, $36, $34, $00, $00, $00
*=$0810
sei
cld
lda #0
sta $d015
sta $d021
lda #%10101010
sta $3fff
ldy #01
l0: ldx #39
tya
m0: sta $0428,x
lda #$0e
sta $d828,x
dex
bpl l0+2
clc
lda m0+1
adc #40
sta m0+1
sta m0+6
bcc *+8
inc m0+2
inc m0+7
iny
cpy #25
bcc l0
//Mid grey characters #123 on first character row
ldx #39
l1: lda #123
sta $0400,x
lda #12
sta $d800,x
dex
bpl l1
/Put some chars and colors in $07e8 ... $07ff and $dbe8 ... $dbff
ldx #$fe
l2: txa
sta $0701,x
sta $db01,x
dex
cpx #$e6
bne l2
jsr setTimer
lda #$7f
sta $dc0d
sta $dd0d
lda $dc0d
lda $dd0d
lda #$01
sta $d01a
lda #IrqLijn0
sta $d012
lda #$1f
sta $d011
lda #<irq0
sta $fffe
lda #>irq0
sta $ffff
lda #$35
sta $01
lda #$55
sta $3fff
lda #$01
sta $d010
inc $d019
cli
jmp *
irq0:
sta irqA
nop
lda $dc06
eor #7
sta *+4
bpl *+2
lda #$a9
lda #$a9
lda $eaa5
stx irqX
sty irqY
ldx $d012
inc $0200
inc $d020
dec $d020
inc $0200
//Badline on next rasterline
inx
txa
and #$07
ora #$18
sta $d011
txa
clc
adc #$03
cmp #$f8
bcs endscrn
sta $d012
inc $d019
ldy irqY
ldx irqX
lda irqA
rti
endscrn:
//open border
lda $d011
and #$f7
sta $d011
bit $d011
bpl *-3
lda #$1f
sta $d011
lda #IrqLijn0
sta $d012
inc $d019
ldy irqY
ldx irqX
lda irqA
rti
setTimer:
//Via badline detection with timer
lax $dc04
sbx #51
sta irqA
cpx $dc04
bne setTimer
ldx #8
dex
bne *-1
bit $ea
lda #8
sta $dc06
stx $dc07
lda #$11
sta $dc0f
rts
Result in Vice 3.5 for model C64C:
https://i.postimg.cc/2yLFNCc0/text-mode2.png
One would expect the gfx in rasterline $30 to be mid grey on a real C64, but the emulator uses the colors from the bottom row (memory locations $dbe8 ... $dbff). |
| |
chatGPZ
Registered: Dec 2001 Posts: 11523 |
Interesting.... HOXS does it correctly apparently :) |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Yes, while micro64 shows the same thing as Vice. Should I submit a ticket to sourceforge or should I wait until this has been tested on more real C64s? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11523 |
My Breadbox also shows all grey in the top line.
Please make a ticket :) |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
Ticket submitted, feel free to edit if you think it isn't explained clearly or if something is missing.
https://sourceforge.net/p/vice-emu/bugs/1627/ |
| |
Martin Piper
Registered: Nov 2007 Posts: 739 |
Quote: Interesting.... HOXS does it correctly apparently :)
Even Hoxs64 from 6 January 2013 v1.0.8.4 works right :) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11523 |
funny enough, even x64 works right ... interesting bug really :) |
| |
Rastah Bar Account closed
Registered: Oct 2012 Posts: 336 |
I hate bugs ;-)
But glad that I can contribute to the improvement of emulators. |
Previous - 1 | 2 | 3 | 4 | 5 | 6 | 7 - Next |