
- XL: 229 920 próbek;
- IIe: 275 744 próbek;
- C64: 299 808 próbek.
Wyszło mi że dekompresja na IIe zadziałała z prędkością 108,73% C64, a w drugą stronę C64 z prędkością 91,97% IIe.
Ekran włączony, hires na wszystkich kompach, przerwania zablokowane instrukcją "SEI"hobocti77x_ pisze: ↑11 sty 2025, 14:17A te testy były robione przy włączonym ekranie i włączonych przerwaniach?
na Atari cykle procesora podkradane są przez ekran ale też odświeżanie pamięci - 9 cykli na każdą linię.hobocti77x_ pisze: ↑11 sty 2025, 14:17I tak wyświetlenie jednej linii ekranu w C64 (PAL) trwa 63 cykle CPU, w Apple II (PAL/NTSC) 65 cykli, Atari aż 114 cykli.
Wynikałoby z tego, że Atari powinno być ok. 80% szybsze, ale tak nie jest z powodu ANTIC-a.
I jeszcze wynik z Atari Lynx: 92 320 próbekCyprian pisze: ↑08 sty 2025, 23:09Zrobiłem porównanie w asmie dekompresji plików LZ4 dla C64 (Vice 3., Apple IIe (AppleWin1.30.20.0) i Atari XL(Altirra). Poniżej czas dekompresji mierzony próbkami 44,1kHz:
- XL: 229 920 próbek;
- IIe: 275 744 próbek;
- C64: 299 808 próbek.
Wyszło mi że dekompresja na IIe zadziałała z prędkością 108,73% C64, a w drugą stronę C64 z prędkością 91,97% IIe.
Kod: Zaznacz cały
.macro BeepON
lda #$1F
sta $D201 // Pokey AUDC1 volume
.endm
.macro BeepOFF
lda #$10
sta $D201 // Pokey AUDC1 volume
.endm
Kod: Zaznacz cały
.macro BeepON() {
lda #$0F
sta $D418 // SID filter / volume
}
.macro BeepOFF() {
lda #$FF
sta $D406
sta $D406+7
sta $D406+14
lda #$49
sta $D404
sta $D404+17
sta $D404+14
lda #$00
sta $D418 // SID filter / volume
}
Kod: Zaznacz cały
BeepON()
//Main loop
Main_Loop:
//LZ4 init
lda #<LZ4_DataA8 // LZ4 Source Start
sta LZ4_SRC
lda #>LZ4_DataA8
sta LZ4_SRC+1
lda #<LZ4_Data_EndA8 // LZ4 Source End
sta LZ4_END
lda #>LZ4_Data_EndA8
sta LZ4_END+1
lda #<ScreenData // Destination
sta LZ4_DST
lda #>ScreenData
sta LZ4_DST+1
//LZ4 go
jsr lz4_decode
dec Licznik
beq Neverending_Loop
//LZ4 init
lda #<LZ4_Data
sta LZ4_SRC
lda #>LZ4_Data
sta LZ4_SRC+1
lda #<LZ4_Data_End
sta LZ4_END
lda #>LZ4_Data_End
sta LZ4_END+1
lda #<ScreenData
sta LZ4_DST
lda #>ScreenData
sta LZ4_DST+1
//LZ4 go
jsr lz4_decode
dec Licznik
beq Main_Loop_End
jmp Main_Loop
Main_Loop_End:
BeepOFF()
Neverending_Loop:
nop
jmp Neverending_Loop
-> MCL64, które zresztą YTM nieźle rozbudował: https://www.c64scene.pl/viewtopic.php?t=3673
fajny tematKB777reborn pisze: ↑22 sty 2025, 12:12-> MCL64, które zresztą YTM nieźle rozbudował: https://www.c64scene.pl/viewtopic.php?t=3673
Dopuszczając w MCL64 przyspieszenie procesora tracimy 100% zgodność z C64 i można się pobawić w podział na "slow" (I/O i pamięć którą czyta VIC: zapis odbywa się do RAM teensy i do RAM c64) i "fast" (zapis tylko do RAM teensy).hobocti77x_ pisze: ↑23 sty 2025, 12:55'takie rozwiazanie jak MCL64 ma powazna wade.
W pewnym momencie osiagnie sie punkt od ktorego nie da sie kuz zwiekszac szybkosci.
Aby zachowac zgodnosc w c64 kazdy zapis musi byc jenoczesnie wykonany do pamieci buforowej jak i RAM c64.
Innymi slowy jesli dojdzie do zapisu a taki mozna wykonac raz na cykl to emulator musi czekac na wolny cykl dostepu do RAM a w przypadku c64 moze to trwac nawet 40 cykli zegara 1Mhz
Jesli w kolejce beda dwa rozkazy z zapisem do RAM to na wykonanie beda potrzebowac 2 cykle magistrali a to znacznie zmniejsza wydajnosc.
Kod: Zaznacz cały
Location Note Purpose
$D074 (53364) (1) GEOS Optimization (mirror VIC Bank 02, $8000-$BFFF)
$D075 (53365) (1) VIC Bank 01 Optimization (mirror $4000-$7FFF)
$D076 (53366) (1) BASIC Optimization (mirror $0400-$07FF)
$D077 (53367) (1) No Optimization (default; mirror all memory)
moim programem?hobocti77x_ pisze: ↑24 sty 2025, 17:28Zrobilem dokladny test LZ4 z pomoca oscyloskopu cyfrowego ustawiajac 0 na wyjsciu przed startem i 1 po zakonczeniu testu emulatora 65816.
Cala test wykonal sie w 464.1 ms czyli ze 44100Hz*0.464s daje ok. 20462 cykle
Kod: Zaznacz cały
LOOP:
LDA #$55
STA PORT
LDA #$AA
STA PORT
JMP LOOP