[SharpMZ] Potize s generovanim preruseni od CTC0 na mz-800 - podezreni na mrtvy OUT0 od 8253 (?)

Michal Hucik - ORDOZ ordoz na ordoz.com
Středa Únor 1 18:19:51 CET 2017


> 1) a 2) jsou jasne; onou “posvatnosti” adresy 0x1039 jsem mel na mysli 
> prave situaci, kdy je dolni ROM primapovana :-) Im 2 mi take prijde 
> elegantnejsi, i kdyz pro rychle (a hlavne laicke) experimentovani 
> slozitejsi, a tudiz az druhy v poradi.

Aha, az ted mne napadlo podivat se do vypisu ROM :) 0x1039 jsem vskutku 
neznal :) Jinak jak k inicializaci PIO v IM 2 pouzivam tohle:


set_ivector:
     ld hl, ivector_addr
     bit 0, l
     jr z,ivector_is_even
     inc hl
ivector_is_even:
     push hl
     pop ix
     ld hl,interrupt_routine
     ld (ix + 0), l
     ld (ix + 1), h
     push ix
     pop hl
     ld a,h
     ld i,a
     ld a,l
     ld hl, pioz80_init_data
     ld (hl), a
     ;ld bc, 0x06fc
     ld b, 0x05
     ld c,pio_ctrl
     otir
     ret


; inicializacni data pro z80pio
pioz80_init_data:
     db 0x00            ; dolni cast adresy int. vectoru (nulty bit musi 
byt 0!)

     db 0xcf            ; dolni 4 bity musi byt 1111, horni 2 pak
                        ; mod nasledujici operace 0 - out, 1 - in,
                        ; 2 - bidir, 3 - control
                        ; 4. a 5. bit nemaji vyznam


    db 0x3f            ; v modu 3 musi nasledovat I/O Register Control Word
                        ; Vstup - 1, vystup - 0
                        ;
                        ; PA0 - IN - /RDA (LPT)
                        ; PA1 - IN - /STA (LPT)
                        ; PA2 - IN - GND
                        ; PA3 - IN - GND
                        ; PA4 - IN - /CTC0 (pozor, je invertovany!)
                        ; PA5 - IN - /VBLN
                        ; PA6 - OUT - IRT (LPT)
                        ; PA7 - OUT - RDP (LPT)
;db 0x2f ; ooio iiii
;db 0x3f ; ooii iiii
;db 0xff ; oooo oooo



   db 0x97            ; dolni 4 bity musi byt 0111 -
                        ; 7 - 1/0 En.INT/disable
                        ; 6 - 1/0 AND/OR,
                        ; 5 - 1/0 Hi/Low,
                        ; 4 - Mask follows
                        ; 0x97 = 1001 0111


;db 0x97 ; IENA, OR, LOW, MASK
;db 0xb7 ; IENA, OR, HIGH, MASK
;db 0xd7 ; IENA, AND, LOW, MASK
;db 0xf7 ; IENA, AND, HIGH, MASK


     ;db 0xef            ; protoze v predch. slove byl 4b = 1,
                        ; nasleduje bitova maska. Sledovany jsou jen
                        ; piny, jejihz bity jsou 0
                        ;
                        ; 0xef - 4. bit (/CTC0)
                        ; 0xdf - 5. bit (/VBLN)
db 0xef ; /CTC0
;db 0x6f ; /CTC0, PA7
;db 0xff ; nic



ivector_addr:
     db 0x00
     dw 0x0000



Další informace o konferenci SharpMZ