032
01.05.2023, 17:25 Uhr
Hobi
|
Die Unterlagen haben sehr geholfen. Der Emulator bootet schon mal SCP, bleibt aber bei der Speicherverwaltung hängen.
Mein Problem ist eher der Floppycontroller des JKCEMU. Anscheinend funktioniert die Emulation anders, als beim echten Gerät.
Das System wird in 2 Blöcken gelesen. Erst kommt die Spur 0 Kopf 0, die per DMA in den Speicher gelesen wird, dann folgt ein SEEK und dann kommt die nächste Spur dran. In der Emulation gibt es mal kurz eine Abfrage nach dem Seek-Status und der wird mit einem Fehler quittiert. Wohl, weil in der Emulation der Kopf nicht so schnell ist. Keine Ahnung was da falsch läuft und wie man es besser machen kann.
Für die Interessenten habe ich ein Log und den passenden Code mit reinkopiert.
DMA transfer b37d 0002 c9 DMA transfer b37e 0001 cd DMA transfer b37f 0000 bb ; nach dem DMA transfer wird TC gesetzt FDC: TC ; DMA ISR stopt die DMA Z80DMA WR6 a3 Z80DMA Reset and Disable Interrupts ; Daten aus C561 werden gesendet FDC: write: 0F FDC: SEEK FDC: write: 00 FDC: write: 01 FDC: write: 08 FDC: SENSE_INTERRUPT_STATUS ... hier gehts wieder an den Anfang
Quellcode: | 00C53C 21 D2 C4 [10] 915 ld hl,#dma_read 00C53F 0E FF [ 7] 916 ld c,#IO_DMA 00C541 06 10 [ 7] 917 ld b,#dma_read_size ; hier wird die DMA initalisiert 00C543 ED B3 [21] 918 otir 00C545 21 E2 C4 [10] 919 ld hl,#fdc_read_hd0 00C548 11 5E FC [10] 920 ld de,#FDC_PARAM 00C54B 01 0A 00 [10] 921 ld bc,#fdc_read_hd0_size 00C54E ED B0 [21] 922 ldir ; mit dem READ Kommando wird der "DMA transfer ..." gestartet 00C550 CD 41 C4 [17] 923 call fdc_write_params 00C553 3A 68 FC [13] 924 ld a,(FDC_ERROR) 00C556 FE 07 [ 7] 925 cp a,#0x07 00C558 20 4A [12] 926 jr nz,fdc_try_again 00C55A 3A 69 FC [13] 927 ld a,(FDC_STATUS) 00C55D E6 C0 [ 7] 928 and a,#0xc0 00C55F 20 43 [12] 929 jr nz,fdc_try_again 00C561 21 EC C4 [10] 930 ld hl,#fdc_seek 00C564 11 5E FC [10] 931 ld de,#FDC_PARAM 00C567 01 04 00 [10] 932 ld bc,#fdc_seek_size 00C56A ED B0 [21] 933 ldir ;hier wird der das SEEK Kommando geschrieben und im Fehlerfall geht es wieder an den Anfang zurück. 00C56C CD 0A C5 [17] 934 call m_c50a ;hier sollte der 2. Block gelesen werden. Die Emulation kommt nie an 00C56F 21 F0 C4 [10] 935 ld hl,#dma_read_b380 00C572 0E FF [ 7] 936 ld c,#IO_DMA 00C574 06 10 [ 7] 937 ld b,#dma_read_size 00C576 ED B3 [21] 938 otir
|
-- ------------------------------------------- Corontäne ------------------------------------------- |