Развиваем Балтик

Старый спектрумистский форум

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24330
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Развиваем Балтик

Post by Shaos »

Отпочковано от темы Старьё от Шаоса
Shaos wrote: 12 Oct 2025 16:55 Вот откуда пошло ошибочное мнение, что Урал это Лениград :)
Caro wrote:
Shaos wrote:Ребяты, к какому же роду-племени относился мой старенький Урал-48К? ;)
Эту беспородную дворнягу какой-то свердловский завод серийно выпускал!
Выпускал его УОМЗ, если помнишь еще что это за фирма.
А документацию для производства готовила будущая фирма "Кворум".
За основу была взята схема Зоновского "Ленинграда"
(в начале ошибочно написал "Балтика").
https://zx-pk.ru/threads/255-spisok-%28poisk%29-otechestvennogo-speccy-zheleza.html?p=3526&viewfull=1#post3526 (2005)

Если бы тогда всллыло, что это таки Балтик, то я бы не заморачивался все эти годы со сборкой Ленинграда-1, а сразу бы строил Балтик (с заменой РТ-шек и РЕ-шек на палки-галки) :-?
Взял перерисованные герберы Балтика вот отсюда:

https://sblive.narod.ru/ZX-Spectrum/Baltik/Baltik.htm

Поправил, чтобы дырки были в правильном формате, а также добавил слои маски, которых в архиве небыло:
Baltik-SE-corrected.zip
Самое дешёвое производство такой платы в штатах (плата размером 216x124mm) обойдётся в $207 за 3 платы (т.е. $69 за одну штучку):
Screenshot from 2025-10-13 21-34-41.png
Baltik-SE-top.jpg
Baltik-SE-bot.jpg
P.S. Перезалил с исправлениями - может ещё слой шелкографии нарисовать, чтобы за те же деньги было похоже вот на это?
Baltik-PCB-new.jpg
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24330
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Развиваем Балтик

Post by Shaos »

Я почему-то только на днях узнал, что Балтик был не просто скушным клоном Спектрума (коим был Урал, на нём основанный), а имел аппаратный мультиколор, умел отключать ПЗУ и давал возможность перемещать видеопамять в нулевое окно!

https://zx-pk.ru/threads/1389-baltik.html?p=291676&viewfull=1#post291676

Управление шло через системный порт #7E (126):

Code: Select all

SYSREG
DDD
210

Стандарт ========================
*00 - 4000h-5AFFh Обычный ZX-Spectrum
*01 - 4000h-6FFFh Мультиколор 4000h
*10 - 0000h-2FFFh Мультиколор 0000h
*11 - 2000h-3AFFh Обычный Disk-Monitor
Плюс бит 7 отключал ПЗУ, открывая все 64КБ ОЗУ! И если кинуть один проводочек (управляемый битом 2), то добавляются ещё 4 режима, где экран сдвинут на #8000:

Code: Select all

Standard Baltic ========================
000 - 4000h-5AFFh ZX-screen 6912 in normal location (2nd quarter of memory)
001 - 4000h-6FFFh Hardware Multicolor 4000h
010 - 0000h-2FFFh Hardware Multicolor 0000h
011 - 2000h-3AFFh ZX-screen 6912 at the end of first quarter of memory (for Disk-Monitor)
Extended Baltic ========================
100 - C000h-DAFFh ZX-screen 6912 at the beginning of last quarter of memory
101 - C000h-EFFFh Hardware Multicolor C000h
110 - 8000h-AFFFh Hardware Multicolor 8000h
111 - A000h-BAFFh ZX-screen 6912 at the end of third quarter of memory
Бит 2 предполагалось использовать для расширения CP/M, который требовал замены РЕ-шек и РТ-шек после чего мультиколор исчезал - поэтому мне это CP/M расширение не нравится - первоначальные возможности более интересны и именно с прокинутым проводком от D2 :idea:

Подробнее про Балтик со всеми прошивками и схемами: https://zxbyte.ru/baltic.htm
User avatar
Shaos
Admin
Posts: 24330
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Развиваем Балтик

Post by Shaos »

Вобщем отсюда идея - сделать свой вариант Балтика с палками-галками вместо РЕ3 и РТ4 :roll:

Плюс к этому можно сразу делать расширенный Балтик с ПЗУ 32КБ где кроме обычного бейсика во второй половинке сидят ромдиск (также подключаемой в нулевое окно если рестартовать кнопкой ROM-DISK вместо RESET) и монитор, который хоть и называется DISK-Monitor, но от диска там только пара команд, которые теоретически можно заменить на свои:
disk-monitor.jpg
А может быть даже не ПЗУ 32КБ сделать, а SRAM 32КБ, куда можно при старте грузить прошивки из EEPROM с последовательным доступом (а в перспективе с SD-карты - и туда же сохранять дампы памяти) имея маленький загрузчик в ПЗУ 2КБ и DIP-переключатель для выбора чего грузить в первую половинку (типа BIOS) и во вторую половинку (типа DISK) этой срамины - вот и получится у нас 64КБ+32КБ = BALTIC-96K :lol:

P.S. Можно ещё запретить торможение проца, когда выбрано это псевдо-ПЗУ по вот такому рецепту:
FastROM.jpg
https://zxpress.ru/article.php?id=18086&ysclid=mgrkpw47hu633146628

P.P.S. Разрешать запись в срам можно по наличию взведённого бита 2 в системном регистре (раз уж в стандартном Балтике это никак не использовалось) :oidea:

P.P.P.S. А в перспективе можно приделать пару-тройку ISA-слотов как в Спринтере (подключаемых в адреса #C000...#FFFF) и расширять через них память или добавлять сеть :lol:

P.P.P.P.S. Порты управления исой также можно открывать только если взведён бит 2 в системном регистре (и ещё надо предусмотреть возможность программно цеплять вторую половинку срамины в адресное пространство процессора для её заполнения)...
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24330
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Развиваем Балтик

Post by Shaos »

Спринтер управляет ISA-шиной через 2 порта (если пока забыть про листание страниц):

Первый это обрубок Скорпионовского 1FFDh, куда во всех примерах пишутся только 2 значения - 0x11 для включения ISA в последее окно памяти и 0x01 для возвращения обычной памяти (причём в документации было написано 0x10 и 0x00 соответственно) - классический скорпионовский порт имеет следующее описание:

Code: Select all

D0    - block of ROM in 0-3fff. when set to 1 - allows read/write page 0 of RAM
D1    - selects ROM expansion. this rom contains main part of service monitor.
D2    - not used
D3    - used for output in RS-232C
D4    - extended RAM. set to 1 - connects RAM page with number 8-15 in
        C000-FFFF. number of page is given in gidits D0-D2 of port 7FFD
D5    - signal of strobe for interface centronics. to form the strobe has to be
        set to 1.
D6-D7 - not used. ( yet ? )
Соответственно бит 0 был в 1 потому что в Спринтере в нулевой странице имелось ОЗУ с ОС, а бит 4 предполагал переход в расширенную область памяти - в нашем случае можно сделать аналогично, но явно прописать что за что отвечает:

Code: Select all

D0 - open RAM in window 0
D1 - select 2nd ROM
D2 - select SPI EEPROM (1-enabled, 0-disabled)
D3 - sync for SPI (SCK)
D4 - open ISA in window 3
D5 - strobe to 7-segment indicator (?)
D6 - disable extended ports in standard mode
D7 - serial output to SPI (MOSI)
У нас в нулевом окне может просвечивать начало динамической памяти 64КБ т.е. DRAM0, а вместо второй половины ПЗУ будет SRAM1 (по умолчанию же в нулевом окне будет SRAM0 содержащий в себе образ ПЗУ с бейсиком).

Все комбинации D1 и D0:
00 -> SRAM0
01 -> DRAM0
10 -> SRAM1
11 -> по идее это неиспользуемая комбинация, но мы можем подсунуть в этом случае DRAM3 (чтобы при открытой памяти ISA можно было в основной памяти перебирать все доступные страницы статического и динамического ОЗУ). Также не следует забывать, что системный порт Балтика SYS-REG также может убирать ПЗУ старшим битом - можно сделать так, чтобы и тот и этот биты могли управлять ПЗУ (один в стандартном режиме, а второй - в расширенном режиме). Также можно запрещать редактирование SRAM-ов изображающих из себя ПЗУ, если мы находимся в стандартном режиме.

Ещё я туда добавил биты для SPI и запрет расширенных портов в обычном ZX-режиме, чтобы ZX-софт чего-нибудь там случайно не нарушил.

Этот порт можно назвать EXT-REG и упростить его дешифрацию до #FD. При чтении из него можно возвращать MISO бит от SPI в нулевом бите (остальные биты можно скажем использовать для выбора того, какие блоки надо грузить из EEPROM - сколько-то битов для выбора образа биоса и сколько-то битов для выбора образа ромдиска).

Второй порт это сигналы ISA-шины RESET, AEN и 6 старших битов ISA-адреса:

Code: Select all

;port 9FBDh:
;D7...RESET
;D6...AEN
;D5...A19
;D4...A18
;D3...A17
;D2...A16
;D1...A15
;D0...A14
Можно назвать этот порт ISA-REG и упростить дешифрацию до #BD. Читать состояние прерываний ISA пока ненадо...

Выбор поля памяти ISA или IO в Спринтере осуществляется путём использования разных номеров страниц для подключения - у нас этого нет, но зато можно воспользоваться тем фактом, что платы ISA по памяти как правило отзываются только на адреса выше A0000h исоответственно можно нулём в старшем бите адреса A19 сигнализировать что мы обращаемся к IO, а единичкой - что к MEM. Плюс IO как правило это только 10 битов адреса или 1024 байта, а у нас целые 16КБ окно - поэтому в конец этого окна в случае выбора ISA IO можно воткнуть маленькое ПЗУ (2КБ) с бутлоадером :mrgreen:

Code: Select all

 EXT-REG = xxxx xx00   xxxx xx01   xxxx xx10   xxxx xx11
 or
 SYS-REG = 0xxx xxxx   1xxx xxxx
          ___________ ___________ ___________ ___________
   #0000 |           |           |           |           |
         |           |           |           |           |
         |   SRAM0   |   DRAM0   |   SRAM1   |   DRAM3   |
         |           |           |           |           |
   #3FFF |___________|___________|___________|___________|
   #4000 |           |
         |           |
         |   DRAM1   |
	 |           |
   #7FFF |___________|
   #8000 |           |
         |           |
         |   DRAM2   |
	 |           |
   #BFFF |___________|___________ ___________
   #C000 |           |           |           |
	 |           |           |  ISA  IO  |
	 |   DRAM3   |  ISA MEM  |-----------|
	 |           |           | ROM <= 8K |
   #FFFF |___________|___________|___________| 

 EXT-REG = xxx0 xxxx   xxx1 xxxx   xxx1 xxxx
 and
 ISA-REG = xxxx xxxx   xx1x xxxx   xx0x xxxx
 
При холодном старте вся память будет заполнена копиями стартового ПЗУ - внутренний триггер сбросит это состояние, когда первый раз произойдёт переход в старшую половину адреса:

Code: Select all

boot:
  di
  ld a,#FF
  out (SYS_REG),a
  ld a,#10
  out (EXT_REG),a
  ld a,#00
  out (ISA_REG),a
  jp #F810 ; disable all-ROM mode
f810:
 ; Bootloader from serial EEPROM
Вобщем как-то так...
User avatar
Shaos
Admin
Posts: 24330
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Развиваем Балтик

Post by Shaos »

В будущем можно ещё будет добавить кнопочку Turbо, которая будет переводить уже загруженную систему в режим 8 МГц, но холодный старт всегда будет с 4 МГц, чтобы можно было медленную РФ2 задействовать в качестве бутлоадера...