
Сообщение от
zx_gamer
Не получается заставить ВВ55 мигать светодиодом. Частота Z80 3 МГц. Есть ПЗУ 32 КБайт (ОЗУ пока нет). Схема такая: Шины данных и адреса параллельно. ~CS (ПЗУ) включается когда A15 (Z80). ~WR (ПЗУ) когда ~MERQ (Z80) ИЛИ ~WR (Z80). ~RD (ПЗУ) когда ~MERQ (Z80) ИЛИ ~RD (Z80). A0 (ВВ55) когда A0 (Z80). A1 (ВВ55) когда A1 (Z80). ~RD (ВВ55) когда ~IORQ (Z80) ИЛИ ~RD (Z80). ~WR (ВВ55) когда ~IORQ (Z80) ИЛИ ~WR (Z80). RESET (ВВ55) на землю, RESET (Z80) к питанию через резистор.
не увидел здесь ~CS (BB55)
Программа такая:
Код:
begin:
; Configure VV55
ld bc, 80h ; port
ld a, 0h ; byte
out (FFh), a ; out
а что здесь делает ld bc,80h?
если я не совсем забыл мнемонику z80 - то команда out (FFh), a запишет значение из a в порт FFh - точнее в порт 00FFh (поскольку а в предыдущей команде ставится в 0) - что приведет к сбросу в 0 бита 0 порта С (который после включения питания настроен на ввод).
если хотелось настроить все порты на вывод - то надо так
Код:
ld a, 80h ; byte
out (FFh), a ; out
но при этом вывод будет в порт 80FFh - так что надо смотреть как сделана дешифрация ВВ55.
Код:
time_wait:
ld a, 0 ; for big loop compare
ld c, 0 ; big wait loop
ld b, 0 ; small wait loop
small_loop:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz small_loop ; end small wait loop
dec c
cp c
jr nz, time_wait
ну и здесь как уже сказано - будет бесконечный цикл.
сделать можно так:
Код:
time_wait:
ld c, FFh ; big wait loop
ld b, 0 ; small wait loop
small_loop:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
djnz small_loop ; end small wait loop
dec c
jr nz, time_wait
или например так:
Код:
ld hl, 03FFh (подобрать по вкусу)
loop:
dec hl
ld a,h
cp l
jr nz, loop