099
02.12.2016, 00:27 Uhr
jde
|
@holm ich will den Thread nicht auf Abwege bringen, ging ja ursprünglich um ne PDP-11 Backplane. Die DMA hab ich auf den Systemen mit K5126 nicht benutzt, mein Eigenbau CP/M Rechner zu Hause (4 Mhz) hat die Z80 DMA für die Floppy und den Bildschirm Scroll genutzt.
Quellcode: | if dma ; ; Befehlsausfuehrung wie LDIR jedoch mit Z80 DMA ; ldird: ld (ldmaq),hl ld (ldmaz),de dec bc ld (ldmal),bc inc bc add hl,bc ex de,hl add hl,bc ex de,hl ld bc,0 exx ld hl,ldmatb ld bc,ldmatl*256+dma otir exx ret ; ldmatb: ds 6,0c3h ; WR6: Reset db 01111101b ; WR0: Laden Startadr, Len, Quelle A, Transfer ldmaq: dw 0 ; Startadresse ldmal: dw 0 ; Laenge db 00010100b ; WR1: Port A Speicher inc db 00010000b ; WR2: Port B Speicher inc db 10101101b ; WR4: Continous, Startadresse Port B ldmaz: dw 0 ; Zieladresse db 10001010b ; WR5: Stop bei Blockende, RDY=H db 0cfh ; WR6: Laden db 87h ; WR6: Enable DMA ldmatl equ $-ldmatb ; dmarw: bit 0,e ; read/write FDC ld a,01111001b ; lesen I/O jr z,dmarw1 ld a,01111101b ; schreiben I/O dmarw1: ld (dmaf),a ld hl,dmal ; Anzahl zu uebertragender Bytes ld a,(ix+22) ld m,a inc hl ld a,(ix+23) ld m,a ld hl,dmatab ; DMA programmieren ld bc,dmatbl*256+dma otir ret ; dmatab: ds 6,0c3h ; WR6: Reset dmaf: db 01111001b ; WR0: Laden Startadr, Len, Quelle B, Transfer dw sbuff ; Speicheradresse dmal: dw 0 ; Laenge db 00010100b ; WR1: Port A Speicher inc db 00101000b ; WR2: Port B I/O fix db 11000101b ; WR4: Burst, I/O Adresse Port B db dack ; I/O Adresse db 10000010b ; WR5: Stop bei Blockende, RDY=L db 0cfh ; WR6: Laden db 87h ; WR6: Enable DMA dmatbl equ $-dmatab endif ;
|
gruß Jonny Dieser Beitrag wurde am 02.12.2016 um 00:29 Uhr von jde editiert. |