загрузка ОПТС и обработка Fkeys
ОПТС 1.1 и ОПТС2 отличаются ...
ОПТС 1.1
стартуем в конфгурации 0 (ROM 0000..37ff)
инициализация PPI1A
инициализация PPI2A
инициализация TMR
проверка нажатия F1-F5, если нажато то пропускаем тесты (переходим на _Fast_F_RUN)
0xC9 -> 0xF5FD (F3+Reset addr)
выключаем LUT (все цвета в 0)
проверяем PPI2A (бегущая 1 в порту A)
если ошибка то начинаем пикать бесконечно (бип бип бип)
проверка ACZU
если ошибка то начинаем пикать бесконечно (бип бип бип)
ACZU в порядке, используем его как стек.
очищаем GZU, заливаем его цветом 1 (синий)
включаем отображение ( все ACZU белые, прафика каждая своим цветом)
стек в конец ACZU (ld sp,0xffff)
выводим надпись 'ОПТС 1.1'
BEEP
конфгурации 14 (ROM 0000..5fff)
считаем контрольную сумму (просто сумируется ПЗУ в байт,) должно быть =0
если ошибка то пикаем 5 раз и выводим "Системный блок неисправен"
неразрушающие тест RAM
конфгурации 14 (RAM 2000..f7ff)
если ошибка то пикаем 5 раз и выводим "Системный блок неисправен"
тесты прошли без ошибки,
эмитируем что небыли нажаты.
_Fast_F_RUN:
скопируем дефолтные значения системных переменных.
инициализация LAN
определяем номер РМУ
инициализация PIC
установка флага наличия FDD
RAM:0490 ; Read from PIT, INT7 should be 1 if fdd exist
RAM:0490 ;
RAM:0490 3E 21 ld a, _DS0|_MOTOR
RAM:0492 32 39 FB ld (_1C_PPI1B_DrvReg), a
RAM:0495 ;
RAM:0495 7E ld a, (hl)
RAM:0496 E6 80 and 80h ; 'Ç'
RAM:0498 CA 9C 04 jp z, no_FDD_Detected
RAM:049B 2F cpl
RAM:049C no_FDD_Detected:
RAM:049C 32 01 F7 ld (FDDFLAG), a
если в процессе загрузки не нажаты F1..F5 то если подключен ExtROM загрузка из него.
F1
- если сетевой номер != 0 то загрузка бейсика
F1F5:
- если не найден FDD (via FDDFLAG) то загрузка бейсика
- включаем мотор, ждем готовности FDC некоторое время
если нет готовности, то загрузка бейсика
- пробуем прочитать 1 сектор с 0й дорожке в режиме Double Density, если ок проверка CRC
- пробуем прочитать 1 сектор с 0й дорожке в режиме Single Density, если не ок то загрузка бейсика
- проверка СRC и если не совпала то зангрузка бейсика
иначе если всё ок то запускаем диск.
F2
- проверяем наличие EXTROM
ppi2.c.7=0
проверяем что в PIC стоит запрос на прерывание 1
если нет то ошибка наличия ExtROM
то если была нажата F2+Reset то выводим
"Подключите внешнее ПЗУ"
иначе заргрузка бейсика.
т.е. если ничего небыло нажато, то пробуем загрузится из
ПЗУ если оно есть.
иначе загрузка EXTROM (см отдельную тему)
F3
- call 0xF5FD
- jp StartTestLS
если программа записала в 0xF5FD jmp на себя то можно рестартовать в нее по F3+Reset
сейчас знаю тольк FORTHBAS.CCC у которого это используется.
F4 - сразу загрузка бейсика
F5 - пробуем загрузиться с FDD без проверки номера РМУ (JP F1F5
[свернуть]
ОПТС2.0
зато сразу включаем отображение ( все ACZU белые, прафика каждая своим цветом)
поэтому на экране видны следы теста ACZU
проверка ACZU
если ошибка то начинаем пикать бесконечно (бип бип бип)
ACZU в порядке, используем его как стек.
очищаем GZU, заливаем его цветом 1 (синий)
стек в конец ACZU (ld sp,0xffff)
выводим надпись 'ОПТС 2.0'
BEEP
проверяем PPI3A EXTROM вместо PPI2A (бегущая 1 в порту A)
если ошибка то на экране "Ошибка ШИНЫ" + 5beep
конфгурации 14 (ROM 0000..5fff)
считаем контрольную сумму (просто сумируется ПЗУ в байт,) должно быть =0
если ошибка то на экране "Ошибка ПЗУ" + 5beep
очищаем GZU, заливаем его цветом 1 (синий)
тест RAM
конфгурации 14 (RAM 2000..f7ff)
если ошибка то на экране "Ошибка ОЗУ" + 5beep
0xC9 -> 0xF5FD (F3+Reset addr)
тесты прошли без ошибки,
эмитируем что небыли нажаты.
_Fast_F_RUN:
скопируем дефолтные значения системных переменных.
инициализация LAN
определяем номер РМУ
инициализация PIC
определим размер GZU (кол-во страниц) (FDDFLAG=0x80 если 192к гзу)
быстрый тест GZU
если ошибка то на экране "Ошибка ГЗУ" + 5beep
установка флага наличия FDD
RAM:0490 ; Read from PIT, INT7 should be 1 if fdd exist
RAM:0490 ;
RAM:0490 3E 21 ld a, _DS0|_MOTOR
RAM:0492 32 39 FB ld (_1C_PPI1B_DrvReg), a
RAM:0495 ;
RAM:0495 7E ld a, (hl)
RAM:0496 E6 80 and 80h ; 'Ç'
RAM:0498 CA 9C 04 jp z, no_FDD_Detected
RAM:049B 2F cpl
RAM:049C no_FDD_Detected:
RAM:049C 32 01 F7 ld (FDDFLAG), a
если в процессе загрузки не нажаты F1..F5 то если подключен ExtROM загрузка из него.
F1
- если сетевой номер != 0 то загрузка бейсика
F1F5:
- если не найден FDD (via FDDFLAG) то загрузка бейсика
- включаем мотор, ждем готовности FDC некоторое время
если нет готовности, то загрузка бейсика
- пробуем прочитать 1 сектор с 0й дорожке в режиме Double Density, если ок проверка CRC
- пробуем прочитать 1 сектор с 0й дорожке в режиме Single Density, если не ок то загрузка бейсика
- проверка СRC и если не совпала то зангрузка бейсика
иначе если всё ок то запускаем диск.
F2
- очистка экрана
- проверяем наличие EXTROM
ppi2.c.7=0
проверяем что в PIC стоит запрос на прерывание 1
если нет то ошибка наличия ExtROM
то если была нажата F2+Reset то выводим
"Нет внешнего ПЗУ"
иначе заргрузка бейсика.
т.е. если ничего небыло нажато, то пробуем загрузится из
ПЗУ если оно есть.
иначе загрузка EXTROM (см отдельную тему)
F3
- call 0xF5FD
если программа записала в 0xF5FD jmp на себя то можно рестартовать в нее по F3+Reset
сейчас знаю тольк FORTHBAS.CCC у которого это используется.
F4 - сразу загрузка бейсика
F5 - пробуем загрузиться с FDD без проверки номера РМУ (JP F1F5
[свернуть]