Z180 schaltet seine Taktfrequenz nicht um

Gast #3338468
Lesenswert?

ich experimentiere mit einem Zilog Z180, genau gesagt einem Z8S180. Bei 
den ersten einfachen Experimenten hat das Abschalten des Refresh Signals 
funktioniert, aber die Umschaltung des Systemtakts funktioniert nicht, 
wenn ich die entsprechenden Systemregister manipuliere, siehe Code. Bei 
einem externen Quartz mit 3,68 MHz kommen am PHI pin immer 1,84 MHz 
raus. Was ist falsch an diesem minimalen Stück code?
1
; Z180 erste Tests
2

3
cmr  .equ  1Eh  ; clock multiplier register
4
ccr  .equ  1Fh  ; CPU control register
5
rcr  .equ  36h  ; refresh control register
6
icr  .equ  3Fh  ; I/O control register, base addr. for internal I/O
7

8
  .org   0000h
9

10
begin:  
11
; das funktioniert:
12
  ld  a,0  ; clear a
13
  out  (icr),a  ; set internal I/O to base addr. 0
14
  out   (rcr),a  ; switch off DRAM refresh facility
15
; das funktioniert nicht:
16
  ld  a,80h
17
  out  (ccr),a  ; switch from 1/2 clock to full speed
18
  out  (cmr),a  ; 2 x external clock
19

20
loop:  jr  loop
21
  .end
#3339030
Lesenswert?

Die internen Register werden über 16-Bit-Addressen (0x0000-0x00ff) 
adressiert. Deshalb müssen die out0/in0 Befehle verwendet werden, da bei 
den "herkömmlichen" in/out-Befehlen Register A auf der oberen 
Adressbushälfte liegt.

Micha schrieb:
> ; das funktioniert:
>   ld  a,0  ; clear a
>   out  (icr),a  ; set internal I/O to base addr. 0
>   out   (rcr),a  ; switch off DRAM refresh facility

A == 0, deshalb gehts hier.

> ; das funktioniert nicht:
>   ld  a,80h
>   out  (ccr),a  ; switch from 1/2 clock to full speed
>   out  (cmr),a  ; 2 x external clock

A != 0, Interne Register werden nicht selektiert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren