Здрасьте друзья.
После столетнего перерыва вернулся к железякам поколдовать.
Захотелось чего-то большего и более современного, а ПИО более чем на 6 мегаГ не нашел, да и кучу регистров и логики нету сил паять, то закрутил я все это вокруг СПЛД Макс2.
Забегая вперед, все равно пришлось кучу проводов паять для трасиверов 3.3<->5В.
Запихнул в сплд логику и маленькое ПЗУ для кода (мапнул на 0-127 адреса).
И тут дай, думаю, ради интереса я СРАМ на ДРАМ поменяю. Нашел 41464. Так, что получилось вот такая схемка.
Ну слепил все как смог.
Написал простой счетчик, где переменная каждый раз читается из памяти, инкрементируется и сохраняется обратно в память.
Это, как бы, тест у меня такой для памяти.
Код:
P_OUT .equ 3h
.org 0h
ld sp, 0fff0h
; save initial counter value in RAM
ld hl, 3000h
ld (hl), 1h
main:
ld hl, 3000h
ld a, (hl)
out (P_OUT), a
inc a
ld (hl), a
ld de, 3FFFh ;Loads DE with 16383 ;MAX - 7FFFh
dly:
dec de ;Decrements DE
ld a, d ;Copies D into A
or e ;Bitwise OR of E with A (now, A = D | E)
jp nz, dly ;Jumps back to Inner: label if A is not zero
jp main
.END
Натужился, занизил 20 мегаГ до 6, что бы пока с ~WAIT не путаться и написал конроллер памяти. Вот FSM.
, протестил и..... не работает.
Причем в тестах все круто выглядит и по таймингам и по форме.
Тыкаюсь осцилом в RAS (красный) CAS (желтый) и чей-то вижу не то что-то. Похоже, вроде, но на инициализации (8 циклов CAS before RAS) RAS какой-то странный, а в M1 CAS кривится.
Подумал может горелые выходы, поменял рас и кас местами - картина тоже поменялась, значит сплд в норме. Может осцилограф кривой?
Вот уже месяц с перерывами голову ломаю - не выходит каменный цветок. Не фурычит.
Подумал, может вообще все плохо, ан нет. Заменил для переменной память на регистр и все работает, считает.
Значится дело в контроллере.
Очень нужна помощь. На Вас, светлые головы нашего форума надеюсь и уповаю, ибо уже свои все мысли от напряги скисли. Если до ума доведу - сделаем это опенсорсным и подарим zx-pk и миру.
Вот тут сорсы для icarusa:
z80_dram.7z