; замаплен через карту портов на #7C/#3C и #74/#24 CNF_PORT: .ON EQU #74 .OFF EQU #24 .vBIOS EQU .ON .vZX_ROM EQU .OFF ; Data: .BIOS EQU 0 .EXTENSION EQU 1 .TURBO.OFF EQU 2 ; данные для выключения TURBO .TURBO.ON EQU 3 ; данные для включения TURBO .CNF_0 EQU #04 ; карта портов 0 .CNF_1 EQU #0C ; карта портов 1 (для режима почти чистого zx spectrum) .CNF_2 EQU #14 ; карта портов 2 .CNF_3 EQU #1C ; карта портов 3 (режим доступа к портам ВГ93 без сигнала TR-DOS) .PENT_RESET EQU #20 .SCORP_RESET EQU #40 .CNF_512 EQU #80 ; включение Pentagon 128 .ZX_BIOS EQU #00 .ZX_EXTENSION EQU #01 ; прибит в конфе гвоздями на #7C/#3C SYS_PORT: .ON EQU #7C .OFF EQU #3C .RAM EQU .OFF .ROM EQU .ON ; Data: .PAGE0 EQU 1 .PAGE8 EQU 0 .EXTENSION EQU .PAGE0 .BIOS EQU .PAGE8 .TURBO.ON EQU CNF_PORT.TURBO.ON .TURBO.OFF EQU CNF_PORT.TURBO.OFF .CNF_0 EQU CNF_PORT.CNF_0 .CNF_1 EQU CNF_PORT.CNF_1 .CNF_2 EQU CNF_PORT.CNF_2 .CNF_3 EQU CNF_PORT.CNF_3 .PENT_RESET EQU CNF_PORT.PENT_RESET .SCORP_RESET EQU CNF_PORT.SCORP_RESET .CNF_512 EQU CNF_PORT.CNF_512 --------------------------------------------------- CNF_PORT висит на 4 внешних портах (#7C/#3C и #74/#24) через карту портов. SYS_PORT гвоздями в конфе на #7C/#C SYS_PORT только переключает RAM/ROM CNF_PORT меняет всё остальное, при бит1=0 меняются страницы эмулятора ПЗУ через бит0 CNF_PORT bit0 - TURBO: off/on или vROM: ; #24 - страница из вн.порта (#E0..#E3)/(#E4..#E7) ; #74 - страница из вн.порта #EB/#EF bit1 - 1 - TURBO ena, 0 - переключение vROM page bit2 - 1 - CNF ena bit3 - \_ cnf0..cnf3 -\ bit4 - / - \ bit5 - CNF_PN[5..0]_RESET by 1 - сброс Пент. порта - -|---> действуют только при bit2=1 bit6 - CNF_SC_RESET by 1 - сброс Скорп. порта - / bit7 - CNF_PN[7..6]_RESET by 0 - сброс Пент-512 -/ Переключение страниц vROM: ____________________________________________________ | Значение | Запись во внешний порт: | | из внутр. |____________________________________| | порта | #24 ---- | | | | | Альтеры | #3C (-rom) | | | | | ||| | #7C (+rom) | #74 | 1FFD | 7FFD | | \|/ | bit1..0 | bit1..0 | bit1 | bit4 | |_____________|____________|_________|______|______| |E0 | 00 | | 1 | ... | |E1 (+dos_on) | 00 | | 0 | ... | |E2 | 00 | | 0 | 0 | |E3 | 00 | | 0 | 1 | |E4 | 01 | | 1 | ... | LOGO #4B |E5 (+dos_on) | 01 | | 0 | ... | |E6 | 01 | | 0 | 0 | Recovery_1 #48 |E7 | 01 | | 0 | 1 | Recovery_2 #49 |EB | | 00 | ... | ... | BIOS #46 |EF | | 01 | ... | ... | EXTENSION #47 |_____________|____________|_________|______|______| ... - значение роли не играет Стандартные страницы ОЗУ для образов ПЗУ спектрума: Page Name Int.Port Page Name Int.Port #42 BASIC 128 #E2 | #48 ??? ??? ??? #E6 #43 BASIC 48 #E3 | #49 ??? ??? ??? #E7 #44 TR-DOS #E1 | #4A ??? ??? ??? #E5 #45 BIOS (ZX_EXP) #E0 | #4B ??? ??? ??? #E4 #46 BIOS (ZX_EXP) #EB #47 BIOS (ZX_EXP2) #EF SYS_PORT: bit0 - TURBO: on/off или BIOS: Part1/Part0 bit1 - 1 - TURBO ena, 0 - переключение BIOS-PAGE bit2 - 1 - CNF ena bit3 - \_ cnf0..cnf3 -\ bit4 - / - \ bit5 - CNF_PN[5..0]_RESET by 1 - сброс Пент. порта - -|---> действуют только при bit2=1 bit6 - CNF_SC_RESET by 1 - сброс Скорп. порта - / bit7 - CNF_PN[7..6]_RESET by 0 - сброс Пент-512 -/ Функция bit0 определяется через bit1 bit7..bit3 срабатывают при bit2 = 1 Запись в порт #7C подключает ПЗУ в окно 0, запись в порт #3C отключает ПЗУ от окна 0, поэтому порт 7С/3C называется System/User. Переключение страниц ПЗУ работает в этом варианте так: в ПЗУ 16 страниц от 0 до 15, порт #5C их переключает с bit3 xor /SYS (SYS_PORT bit[1..0] = b"0X" (BIOS: Part1/Part0)) если сделать ld a,1 : out (sys_port_on),a - то нумерация страниц ПЗУ будет правильная от 0 до 15, если сделать ld a,0 : out (sys_port_on),a - то нумерация страниц ПЗУ будет с инвертированным bit3: страницы ПЗУ 0-7 будут нумероваться как 8-15 страницы ПЗУ 8-15 будут нумероваться как 0-7 переключение страниц ПЗУ портом #5C происходит только при воткнутой ПЗУ через sys_port. Можно переключать страницы через внутренний порт #8F, тогда bit4 этого порта включает сигнал записи для ПЗУ. Так же этот порт даёт прямую нумерацию страниц при установленном bit4. ---------------------------------------------------- ;!TODO апдейтер должен сам вставлять номер платы и тип битстрима