DEVICE ZXSPECTRUM128 INCLUDE "!AllConst.asm" INCLUDE "!ram8.asm" ORG #0000 ROMdisk equ #0E00 ;#0000 reset computer ;#0004 *NOT USED* (#04 байта) ;#0008 rst #08 печать сообщения по номеру в BC ;#000D *NOT USED* (#03 байта) ;#0010 rst #10 печать символа из A ;#0015 *NOT USED* (#0B байт) ;#0020 rst #20 печать строки ;#0022 *NOT USED* (#0E байт) ;#0030 rst #30 вызов процедуры из другого rom ;#0033 *NOT USED* (#05 байт) ;#0038 обработчик прерываний im 0/1 ;#003B печать строки (rst #20) ;#004A *NOT USED* (#26 байт) ;#0070 переменные ROM-disk ;#0073 загрузка блока из ROM-Disk ;#00AA *NOT USED* (55 байт) ;#00FF адрес п/п обработки прерываний im 2 ;#0101 номер текущего rom ;#0102 процедура обработки прерываний im 2 ;#0103 reset computer ;#0122 копирование переменных монитора и проверка чтения портов #7FFD/#1FFD ;#0175 переменные монитора ;#02E8 проверка оригинальный/совместимый компьютер ;#02F4 установка переменных из NVRAM ;#0305 установка переменных из NVRAM/CMOS128 ;#0312 установка переменных по данным в CMOS ;#0315 установка переменных по данным в CMOS ;#036C запись переменных в CMOS и в NVRAM ;#0378 запись переменных в NVRAM ;#0398 запись переменных в CMOS ;#046E таблица для записи переменных в CMOS ;#04FF таблица для записи переменных в NVRAM ;#0512 запись на диск сектора с конфигурацией (C. save Set Up to disk) ;#057F распаковка шрифта в rom 8 ;#059F запакованный шрифт ;#0A5A инициализация системы и печать сооветствующих сообщений ;#0CDF копирование дескриптора окна в рабочуюю область и рисование рамки вокруг него ;#0CFA дескрипторы окон ;#0D32 копирайты ;#0E00 ROM-disk ;#4000 ;АДРЕС: #0000 reset computer x0000 di jp x0103 ;АДРЕС: #0004 *NOT USED* (#04 байта) x0004 ds #04 ;АДРЕС: #0008 rst #08 печать сообщения по номеру в BC x0008 rst #30 dw rom5_x11CD ;печать сообщения по номеру в BC db #05 ret ;АДРЕС: #000D *NOT USED* (#03 байта) x000D ds #03 ;АДРЕС: #0010 rst #10 печать символа из A x0010 rst #30 dw rom2_x2B12 ;печать символа (rst #10) db #02 ret ;АДРЕС: #0015 *NOT USED* (#0B байт) x0015 ds #0B ;АДРЕС: #0020 rst #20 печать строки x0020 jr x003B ;АДРЕС: #0022 *NOT USED* (#0E байт) x0022 ds #0E ;АДРЕС: #0030 rst #30 вызов процедуры из другого rom x0030 jp xE3D3 ;АДРЕС: #0033 *NOT USED* (#05 байт) x0033 ds #05 ;АДРЕС: #0038 обработчик прерываний im 0/1 x0038 ei reti ;АДРЕС: #003B печать строки (rst #20) x003B ex (sp),hl push af x003D ld a,(hl) rst #30 dw rom2_x2B0B ;печать символа со сбросом 7го бита (rst #10) db #02 and #80 inc hl jr z,x003D pop af ex (sp),hl ret ;АДРЕС: #004A *NOT USED* (#26 байт) x004A ds #26 ;АДРЕС: #0070 переменные ROM-disk x0070 db ROMdisk/#100 ;смещение начала ром диска (в блоках по 256 байт) db #40-ROMdisk/#100;количество свободных секторов в странице db #00 ;смещение до начала каталога ;АДРЕС: #0073 загрузка блока из ROM-Disk INCLUDE "!RomDisk.asm" ;АДРЕС: #00AA *NOT USED* (55 байт) x00AA ds #55 ;АДРЕС: #00FF адрес п/п обработки прерываний im 2 x00FF dw x0102 ;АДРЕС: #0101 номер текущего rom x0101 db #04 ;АДРЕС: #0102 процедура обработки прерываний im 2 x0102 ret ;АДРЕС: #0103 reset computer x0103 ld de,#5BEE ld hl,x0111 ld bc,#0011 ldir jp #5BEE x0111 ld bc,#1FFD ld a,#02 out (c),a ld hl,#010C ;включим плоскость 0 ld l,(hl) xor a out (c),a ;rom 0/1 jp x0000 ;reset ;АДРЕС: #0122 копирование переменных монитора и проверка чтения портов #7FFD/#1FFD x0122 ld hl,x0175 ;базовые переменные монитора ld de,xE033 ld bc,#0173 ldir ld hl,xE9F5 ld (xE9F3),hl ;адрес блока описателей дисковода ld hl,xE02C ld (hl),#01 ;значение interleaving ld de,#7F1F ld c,#FD ld a,#0E ld b,#FF out (c),a ;регистр #E AY nop in a,(c) ;читаем значение портов #7FFD и #1FFD and #3F cp #3F ret z ;rom 1, ram #F, scr 5 (прочитано #FF ???) cp #10 ret nz ;rom 0, ram 8, scr 7 (то, что включено) ld b,d ;bc=#7FFD ld a,#0F ;rom 0, ram 7/F, scr 5 out (c),a ld b,e ;bc=#1FFD ld a,#00 out (c),a ;rom 0, ram 7, scr 5 ld a,#0E ld b,#FF out (c),a ;регистр #E AY nop in a,(c) ;читаем значение портов #7FFD и #1FFD and #3F cp #0F ld b,e ;bc=#1FFD ld a,#10 out (c),a ;rom 0, ram #F, scr 5 ld b,d ;bc=#7FFD ld a,#00 out (c),a ;rom 0, ram 8, scr 7 ret nz ; set 5,(iy+#19) ret ;АДРЕС: #0175 переменные монитора x0175: INCBIN "prof_roms/rom4_vars.bin" ;АДРЕС: #02E8 проверка оригинальный/совместимый компьютер ;вых: nz - совместимый ; z - оригинал x02E8 ld a,d sub #FC ret nz ;совместимый ld a,e sub #9D ret z ;оригинал ld a,e sub #8B ret ;nz - совместимый ;АДРЕС: #02F4 установка переменных из NVRAM x02F4 call x0445 ;чтение #FD байт NVRAM с адреса #0001 в буфер xDB69 call x0312 ;установка переменных по данным в NVRAM ld hl,xDB69+#2E ;xDB97 ld (xDDA7),hl ld hl,x04FF jr x0315 ;АДРЕС: #0305 установка переменных из NVRAM/CMOS128 x0305 ld hl,xE02E bit 5,(hl) x030A jr nz,x02F4 ;NVRAM найден bit 6,(hl) ret z ;CMOS отсутствует call x0430 ;чтение CMOS[#10..#3E] в буфер xDB69 (вых: b=#3F) ;АДРЕС: #0312 установка переменных по данным в CMOS ;вх: b - номер ячейки CMOS ; 7,c=1 ; 6,c=1 в (hl) слово-адрес ; =0 в (hl) байт-смещение от xE014 ; 2,c=0 ; 1,c=1 запись нескольких битов переменной по маске в (hl) ; 0,c=0 запись переменной в ячейку CMOS, и переход к следующей ячейке x0312 ld hl,x046E ;АДРЕС: #0315 установка переменных по данным в CMOS x0315 inc b ;b=#40 x0316 ld c,(hl) inc hl bit 7,c jr z,x0347 ;установка значения бита переменной bit 2,c jr nz,x0343 ;установка номера ячейки CMOS bit 1,c jr nz,x0325 ;установка значения битов переменной ret ;установка значения бита переменной x0325 call x0419 ;определение адреса переменной (de - адрес) bit 0,c jr z,x033D ;запись переменной в память ld c,(hl) inc hl ld a,(de) cpl or c cpl ;сброс битов в переменной ld (de),a call x0459 ;чтение значения из буфера CMOS по адресу в B and c ;выделение битов ld c,a ld a,(de) or c ld (de),a ;установка переменной jr x0316 ;запись переменной в ячейку CMOS x033D call x0459 ;чтение значения из буфера CMOS по адресу в B ld (de),a jr x0315 ;установка номера ячейки CMOS x0343 ld b,(hl) inc hl jr x0316 ;установка значения бита переменной x0347 call x0419 ;определение адреса переменной (de - адрес) push hl ld a,c and #07 call x0410 ;получение маски для переменной (l - маска) call x0459 ;чтение значения из буфера CMOS по адресу в B and l push af ld a,c and %00111000 rrca rrca rrca call x0410 ;получение маски для переменной (l - маска) pop af ld a,(de) jr z,x0366 ;сброс бита в переменной or l ;установка бита в переменной jr x0368 x0366 or l xor l x0368 ld (de),a ;запись переменной pop hl jr x0316 ;АДРЕС: #036C запись переменных в CMOS и в NVRAM x036C bit 6,(iy+#1A) call nz,x0398 ;запись переменных в CMOS bit 5,(iy+#1A) ret z ;АДРЕС: #0378 запись переменных в NVRAM x0378 call x0445 ;чтение #FD байт NVRAM с адреса #0001 в буфер xDB69 call x03B0 ;установка переменных в буфере для записи в NVRAM ld hl,xDB69+#2E ld (xDDA7),hl ld hl,x04FF call x03B3 ;установка переменных в буфере для записи в NVRAM ld hl,xDB69 ld de,#00FD ld bc,#0001 rst #30 dw rom7_x0DD0 ;запись данных в NVRAM db #07 ret ;АДРЕС: #0398 запись переменных в CMOS x0398 call x0430 ;чтение CMOS[#10..#3E] в буфер xDB69 (вых: b=#3F) call x03B0 ;установка переменных в буфере для записи в CMOS ld hl,xDB69 ;запись буфера в CMOS ld b,#10 x03A3 ld a,(hl) inc hl rst #30 dw rom7_x2023 ;запись данных в ячейку CMOS. и запись контрольной суммы в ячейку #3F db #07 inc b ld a,b cp #3F jr nz,x03A3 ret ;установка переменных в буфере для записи в CMOS x03B0 ld hl,x046E x03B3 inc b x03B4 ld c,(hl) inc hl bit 7,c jr z,x03E7 ;установка значения бита ячейки CMOS bit 2,c jr nz,x03E3 ;установка номера ячейки CMOS bit 1,c jr nz,x03C3 ;установка значения бита ячейки CMOS в буфере ret ;установка значения бита ячейки CMOS в буфере ;вх: b - номер ячейки CMOS ; 7,c=1 ; 6,c=1 в (hl) слово-адрес ; =0 в (hl) байт-смещение от xE014 ; 2,c=0 ; 1,c=1 запись нескольких битов переменной по маске в (hl) ; 0,c=0 запись переменной в ячейку CMOS, и переход к следующей ячейке x03C3 call x0419 ;определение адреса переменной (de - адрес) bit 0,c jr z,x03DD ;запись переменной в ячейку CMOS ld c,(hl) inc hl push hl call x0459 ;чтение значения из буфера CMOS по адресу в B cpl or c cpl ;сброс битов ячейки ld l,a ld a,(de) and c ;выделение битов переменной or l pop hl call x0456 ;запись значения в буфер CMOS по адресу в B jr x03B4 x03DD ld a,(de) call x0456 ;запись значения в буфер CMOS по адресу в B jr x03B3 ;установка номера ячейки CMOS ;вх: 7,c=1 ; 2,c=1 ; b - номер ячейки CMOS x03E3 ld b,(hl) inc hl jr x03B4 ;установка значения бита ячейки CMOS ;вх: b - номер ячейки CMOS ; 7,c=0 ; 6,c=1 в (hl) слово-адрес ; =0 в (hl) байт-смещение от xE014 ; 5-3, номер бита в переменной ; 2-1, номер бита в ячейке CMOS ; x03E7 call x0419 ;определение адреса переменной (de - адрес) push hl ld a,c and %00111000 rrca rrca rrca call x0410 ;получение маски для переменной (l - маска) ld a,(de) and l ;выделение бита в переменной push af ld a,c and #07 call x0410 ;получение маски для переменной (l - маска) call x0459 ;чтение значения из буфера CMOS по адресу в B ld h,a ;значение ячейки CMOS pop af ld a,h jr z,x0408 ;сброс бита в CMOS or l ;установка бита в CMOS jr x040A x0408 or l xor l x040A call x0456 ;запись значения в буфер CMOS по адресу в B pop hl jr x03B4 ;получение маски для переменной (l - маска) ;вх: a - номер бита x0410 ld l,#01 ret z x0413 sla l dec a jr nz,x0413 ret ;определение адреса переменной ;вых: de - адрес x0419 bit 6,c ld e,(hl) inc hl jr z,x0422 ld d,(hl) inc hl ret ; это байт-смещение от xE014 x0422 bit 7,e ld d,#00 jr z,x0429 dec d x0429 push iy ex (sp),hl add hl,de ex de,hl pop hl ret ;чтение CMOS[#10..#3E] в буфер xDB69 ;вых: b=#3F x0430 ld hl,xDB69 ld (xDDA7),hl ld b,#10 x0438 rst #30 dw rom7_x1F59 ;чтение ячейки CMOS db #07 ld (hl),a inc hl inc b ld a,b cp #3F jr nz,x0438 ret ;чтение #FD байт NVRAM с адреса #0001 в буфер xDB69 x0445 ld hl,xDB69 ld (xDDA7),hl ld de,#00FD ld bc,#0001 rst #30 dw rom7_x0DB6 ;чтение данных из NVRAM db #07 ret ;запись значения в буфер CMOS по адресу в B x0456 scf jr x045A ;чтение значения из буфера CMOS по адресу в B x0459 or a x045A push hl ;cy=1/0 - запись/чтение ld hl,(xDDA7) ;адрес буфера CMOS push bc ld c,b ld b,#00 push af add hl,bc pop af jr nc,x046A ld (hl),a jr x046B x046A ld a,(hl) x046B pop bc pop hl ret ;АДРЕС: #046E таблица для записи переменных в CMOS и NVRAM x046E db %10000100 db #00 ;ячейка: +#00 db %11000010 dw xFFCC ;переменная: xFFCC, ячейка: +#01 db %11000010 dw xFFCD ;переменная: xFFCD, ячейка: +#02 db %11000010 dw xFFCE ;переменная: xFFCE, ячейка: +#03 db %11000010 dw xFFCF ;переменная: xFFCF, ячейка: +#04 db %11000010 dw xFFD0 ;переменная: xFFD0, ячейка: +#05 db %11000010 dw xFFD1 ;переменная: xFFD1, ячейка: +#06 db %11000011 dw xFFCB ;переменная: xFFCB db %00000111 ;маска переменной db %00000011 db #39 ;переменная: xE014+#39 db %00001100 db #39 ;переменная: xE014+#39 db %00010101 db #39 ;переменная: xE014+#39 db %00000110 db #1C ;переменная: xE014+#1C db %00001111 db #1C ;переменная: xE014+#1C db %10000100 db #07 ;ячейка: +#07 db %10000011 db #18 ;переменная: xE014+#18 db %00011111 db %00010101 db #1C ;переменная: xE014+#1C db %00100110 db #1C ;переменная: xE014+#1C db %10000100 db #08 ;ячейка: +#08 db %10000010 db #DE ;переменная: xE014-#22, ячейка: +#09 db %10000010 db #DF ;переменная: xE014-#21, ячейка: +#0A db %10000100 db #0A ;ячейка: +#0A db %10000011 db #E0 ;переменная: xE014-#20 db %00111111 db %10000100 db #0B ;ячейка: +#0B db %10000011 db #E1 ;переменная: xE014-#1F db %00111111 db %10000100 db #0C ;ячейка: +#0C db %10000010 db #05 ;переменная: xE014-#05, ячейка: +#0D db %10000100 db #0D ;ячейка: +#0D db %10000010 db #0A ;переменная: xE014-#0A, ячейка: +#0E db %10000010 db #0C ;переменная: xE014-#0C, ячейка: +#0F db %10000011 db #14 ;переменная: xE014+#14 db %10011111 db %00100101 db #00 ;переменная: xE014+#00 db %00110110 db #19 ;переменная: xE014+#19 db %10000100 db #10 ;ячейка: +#10 db %10000011 db #12 ;переменная: xE014+#12 db %00000111 db %00101011 db #13 ;переменная: xE014+#13 db %10000100 db #11 ;ячейка: +#11 db %10000011 db #15 ;переменная: xE014+#15 db %10101111 db %10000100 db #12 ;ячейка: +#12 db %10000011 db #40 ;переменная: xE014+#40 db %00011111 db %10000100 db #13 ;ячейка: +#13 db %10000011 db #41 ;переменная: xE014+#41 db %00011111 db %10000100 db #14 ;ячейка: +#14 db %10000011 db #42 ;переменная: xE014+#42 db %00011111 db %10000100 db #15 ;ячейка: +#15 db %10000011 db #25 ;переменная: xE014+#25 db %01111111 db %10000100 db #16 ;ячейка: +#16 db %10000011 db #27 ;переменная: xE014+#27 db %11101000 db %10000100 db #17 ;ячейка: +#17 db %10000011 db #2E ;переменная: xE014+#2E db %00000111 db %00000011 db #2F ;переменная: xE014+#2F db %00001100 db #2F ;переменная: xE014+#2F db %00010101 db #2F ;переменная: xE014+#2F db %10000100 db #18 ;ячейка: +#18 db %11000010 dw xE11A ;переменная: xE11A, ячейка: +#19 db %11000010 dw xE11A+#01 ;переменная: xE11B, ячейка: +#1A db %10000010 db #58 ;переменная: xE014-#58, ячейка: +#1B db %10000011 db #57 ;переменная: xE014+#57 db %01111111 db %10000100 db #1C ;ячейка: +#1C db %10000011 db #DD ;переменная: xE014-#23 db %00000011 db %10000100 db #1D ;ячейка: +#1D db #80 ;конец ;АДРЕС: #04FF таблица для записи переменных в NVRAM x04FF db %10000100 db #00 ;ячейка: +#00 db %10000010 db #2A ;переменная: xE014+#2A, ячейка: +#01 db %10000010 db #2B ;переменная: xE014+#2B, ячейка: +#02 db %10000010 db #2C ;переменная: xE014+#2C, ячейка: +#03 db %10000010 db #2D ;переменная: xE014+#2D, ячейка: +#04 db %10000010 db #3A ;переменная: xE014+#3A, ячейка: +#05 db %10000010 db #3B ;переменная: xE014+#3B, ячейка: +#06 db %10000010 db #3D ;переменная: xE014+#3D, ячейка: +#07 db %10000010 db #26 ;переменная: xE014+#26, ячейка: +#08 db #80 ;конец ;АДРЕС: #0512 запись на диск сектора с конфигурацией (C. save Set Up to disk) x0512 ld de,xDB69 push de ;копируем подпрограмму в буфер ld hl,x0549 ld bc,#0100 ldir ;установка переменных в буфере для записи на диск ld hl,xDB69+#36 ;xDB9F ld (xDDA7),hl call x03B0 ;установка переменных в буфере для записи на диск ld hl,xDB69+#64 ;xDBCD ld (xDDA7),hl ld hl,x04FF call x03B3 ;установка переменных в буфере для записи на диск ;запись сектора с настройками на дискету rst #30 dw rom7_x107B ;инициализация дисковода и настройка на дискету db #07 pop hl jr c,x0545 ;ошибка инициализации диска ld bc,#0106 ld de,#000F ;trk 0, sec #0F rst #30 dw rom7_x0229 ;R8DOS #06(6) запись группы секторов db #07 ret nc ;ошибок не было x0545 rst #30 ;печать сообщения об ошибке dw rom6_x06A6 ;печать сообщения об ошибке и продолжение работы монитора db #06 ;(без возврата) ;процедура установки настроек из сектора диска (сохраняется на диск вместе переменными) x0549 db "AM" ;сигнатура начала данных ld a,(#00F1) ;rom 2 cp #61 jr z,x0557 ;проверка текущей страницы ПЗУ ld a,#03 out (#FE),a ret x0557 ld hl,xDB69+#36 ;xDB9F ld (xDDA7),hl rst #30 dw rom4_x0312 ;установка переменных по данным в CMOS db #04 ld hl,xDB69+#64 ;xDBCD ld (xDDA7),hl ld hl,x04FF rst #30 dw rom4_x0315 ;установка переменных по данным в CMOS db #04 rst #20 db #0D db "AutoConfig Ok" db #8D ret ;АДРЕС: #057F распаковка шрифта в rom 8 x057F ld hl,xE483 ;адрес ret rst #30 dw rom6_x0D60 ;установка п/п jp xE483 по адресу xE338 db #06 ld hl,x059F ;адрес сжатого шрифта ld de,xEBF5 ;буфер push de ld bc,#04BB ;размер ldir ;кипируем в буфер pop hl ld de,xEBF5+#04BB ;xF0B0 exx ld hl,xF7C0 rst #30 dw rom6_x1108 ;распаковка блока db #06 ret ;АДРЕС: #059F запакованный шрифт x059F INCBIN "prof_roms/rom4_fnt.bin" ;АДРЕС: #0A5A инициализация системы и печать сооветствующих сообщений x0A5A bit 6,(iy+#14) jr nz,x0A67 ;"теплый" сброс rst #30 dw rom2_x3005 ;установка текущим окна: main menu db #02 ld a,#0C rst #10 ;очистка окна x0A67 ld hl,x0D24 call x0CDF ;копирование дескриптора окна в рабочуюю область и рисование рамки вокруг него rst #20 db " ",#7F," " ;знак копирайта dc "1993-1997 MOA Shadow Service Monitor" bit 6,(iy+#14) jr nz,x0B07 ;теплый сброс ld hl,x0D08 call x0CDF ;копирование дескриптора окна в рабочуюю область и рисование рамки вокруг него rst #20 db #1B,#00,#07 ;координаты печати dc "* fast test of computer *" ld hl,x0CFA call x0CDF ;копирование дескриптора окна в рабочуюю область и рисование рамки вокруг него rst #20 db " Computer :",#0D db " RAM :",#0D db " ROM :" db #1B,#00,#8C ;координаты call x0C8A ;вывод сообщения с названием компьютера ld (ix+0),#01 ;crdY=1 ld (ix+1),#0C ;crdX=12 call x0C74 ;сообщение: 256 K ld (ix+0),#02 ;crdY=2 ld (ix+1),#0C ;crdX=12 call x0C7B ;вывод сообщения с размером ПЗУ call x0B3B ;инициализация SMUC ;обнуление bit4 спецификации дисководов x0B07 ld a,(xFFCA) push af xor a x0B0C ld (xFFCA),a ld c,#11 ;R8DOS #11(17) чтение кода спецификации дисковода push af rst #30 dw rom7_x0229 ;вызов функции R8DOS db #07 res 4,(hl) pop af inc a cp #04 jr c,x0B0C pop af ld (xFFCA),a ;установка координаты Y курсора в окне, при необходимости ld de,xE0C9 or a push ix pop hl sbc hl,de ret z ld a,(ix+2) add a,(ix+4) inc a ;координата Y нижней строки окна rst #30 dw rom2_x3005 ;установка текущим окна: main menu db #02 ld (ix+0),a ;координата Y курсора в окне ret ;инициализация SMUC x0B3B ld bc,#FEFE in a,(c) rrca jr c,x0B58 ;cs не нажата ld b,#EF in a,(c) bit 2,a jr nz,x0B58 ;8 не нажата ; SMUC не проверяем ld hl,xE02E ;cs+8 нажата ld a,(hl) and #07 ld (hl),a inc hl ld a,(hl) and #37 ld (hl),a ret x0B58 bit 6,(iy+#14) ret nz ;"теплый" сброс ;определение наличия SMUC, и вывод сообщения с версией rst #30 dw rom7_x2422 ;определение наличия SMUC db #07 ret c ;SMUC не найден push de ld hl,x0D16 call x0CDF rst #20 dc " SMUC : " pop de call x0CC2 ;печать версии и ревизии SMUC ;определение наличия CMOS, и вывод сообщения ld a,(ix+2) add a,(ix+4) inc a rst #30 dw rom2_x3005 ;установка текущим окна: main menu db #02 ld (ix+0),a rst #30 ;определение наличия CMOS dw rom7_x2047 ;a=#5A CMOS checksum error db #07 ;a=#5B CMOS not found ;a=#5C _число_ bytes CMOS found call x0C5C ;печать сообщения db #00 ;определение наличия NVRAM, и вывод сообщения rst #30 ;определение наличия NVRAM dw rom7_x0D62 ;a=#26 NVRAM not found db #07 ;a=#27 NVRAM found ;a=#33 NVRAM checksum error call x0C5C ;печать сообщения db #02 ;определение наличия interrupt controller, и вывод сообщения call x0305 ;установка переменных из NVRAM/CMOS128 rst #30 ;определение наличия interrupt controller dw rom7_x1572 ;a=#24 interrupt controller not found db #07 ;a=#25 interrupt controller found call x0C5C ;печать сообщения db #02 ;определение наличия последовательного порта/модема, и вывод сообщения rst #30 dw rom7_x15C7 ;определение наличия последовательного порта/модема db #07 ;a=#28 modem not found call x0C5C ;a=#29 modem found db #02 ;a=#2A serial port not found ;индентификация HDD и печать информиции о винчестере ld e,#00 rst #30 dw rom5_x30B9 ;идентификация жесткого диска db #05 jr nc,x0BB9 ;нет ошибок call x0C5C ;печать сообщения с ошибкой db #00 jr x0C27 x0BB9 ld a,%00101011 ;paper 5, ink 3 ld (ix+6),a rst #20 dc " IDE/AT " ; печать размера винчестера ld hl,(xE5A5) ld de,#0000 exx ld bc,(xDFF2) rst #30 dw rom7_x0FB7 ;умножение dehl=de'hl' * bc db #07 rst #30 dw rom5_x2AA4 ;преобразование количества секторов в мегабайты db #05 ld a,#59 or a call x0C5C ;печать размера винчестера db #00 ; печать названия(модели) винчестера ld a,%00101000 ;paper 5, ink 0 ld (ix+6),a ld hl,xE5A9+#036 ;xE5DF ld b,#14 call x0C4D ; печать серийного номера винчестера rst #20 db #0D dc "Serial Number: " ld hl,xE5A9+#014 ;xE5BD ld b,#0A call x0C4D ; печать версии прошивки винчестера rst #20 db #0D dc "Firmware rev.: " ld hl,xE5A9+#02E ;xE5D7 ld b,#04 call x0C4D ld a,%00101001 ;paper 5, ink 1 ld (ix+6),a rst #20 db #8D ;монтирование подключенных образов x0C27 bit 7,(iy+#1B) jr z,x0C39 ;HDD не найден set 5,(iy+#0B) rst #30 dw rom5_x2503 ;монтирование всех образов с винчестера db #05 res 5,(iy+#0B) ;проверка нажатия клавиши x0C39 ld hl,xE028 bit 6,(hl) ret nz ;"теплый" сброс x0C3F xor a in a,(#FE) and #1F xor #1F ret nz dec hl ld a,l or h ret z jr x0C3F ;печать сообщения из (hl), длиной не более b*2 x0C4D ld e,(hl) inc hl ld d,(hl) inc hl ld a,d or a ret z rst #10 ld a,e or a ret z rst #10 djnz x0C4D ret ;печать сообщения ;вх: a - номер сообщения ; db ? номер блока сообщений x0C5C ld b,a ex (sp),hl ld c,(hl) inc hl ex (sp),hl set 0,(iy+#05) ;десятичная система ld a,%00101001 ;paper 5, ink 1 jr c,x0C6B ld a,%00101011 ;paper 5, ink 3 x0C6B ld (ix+6),a ;атрибуты печати rst #20 dc " " rst #08 rst #20 db #8D ret ;сообщение: 256 K x0C74 rst #20 dc "256 K" ret ;вывод сообщения с размером ПЗУ x0C7B rst #30 ;для провреки размера ПЗУ: при 128k включится rom 2 и a=#00 dw romA_x001B ;при 256k включится rom #A и a=#02 db #0A cp #02 jr z,x0C74 ;256k ПЗУ rst #20 dc "128 K" ret ;вывод сообщения с названием компьютера x0C8A ld de,(xDFFC) rst #30 ;ЗАЧЕМ!!! можно напрямую dw rom4_x02E8 ;проверка оригинальный/совместимый компьютер db #04 jr nz,x0CA9 rst #20 dc "Scorpion ZS 256 (R)" ret x0CA9 rst #20 dc "Scorpion (R) compatible" ret ;печать версии и ревизии SMUC ;вх: d - номер версии ; e - номер ревизии x0CC2 push de rst #20 dc "Ver. " pop de ld a,d push de rst #30 dw rom2_x16EC ;печать числа a=[#0..#F] db #02 rst #20 dc ", rev. " pop de ld a,e rst #30 dw rom2_x16EC ;печать числа a=[#0..#F] db #02 ret ;АДРЕС: #0CDF копирование дескриптора окна в рабочуюю область и рисование рамки вокруг него ;вх: hl - дескриптор окна x0CDF call x0CEA ld hl,#0000 rst #30 dw rom5_x2054 ;печать рамки вокруг окна db #05 ret ;копирование дескриптора окна в рабочуюю область x0CEA ld de,xE102 push de ld bc,#000D ldir pop ix ld (xE3B7),ix ret ;АДРЕС #0CFA дескрипторы окон: ;окно высотой 3 знакоместа на всю ширину экрана x0CFA db #00,#00 db #05,#01 db #03,#1E db %00101001 db #07,#90,%00101000 db #06,#28,#20,#00 ;окно высотой 1 знакоместо на всю ширину экрана x0D08 db #00,#00 db #03,#01 db #01,#1E db %00101001 db #03,#88,%00101000 db #06,#28,#20,#00 ;окно высотой 9 знакомест на всю ширину экрана x0D16 db #00,#00 db #09,#01 db #01,#1E db %00101001 db #03,#88,%00101000 db #06,#28,#20,#00 ;окно высотой 1 знакоместо на всю ширину экрана x0D24 db #00,#00 db #01,#01 db #01,#1E db %00101001 db #03,#80,%00101000 db #06,#28,#20,#00 ;АДРЕС #0D32 копирайты x0D32 db "Copyright(c) 1993, 1997 by Andrew MOA",#00 db "FidoNet 2:5030/25.1",#00 db "E-mail: moa@deeds.spb.ru",#00 db "Compiled: Jul 13 1997 14:24:13 (IBM PC, MA80 crossassembler)",#00 x0DC2 ds ROMdisk-$,#00 ;АДРЕС: #0E00 ROM-disk x0E00 INCBIN "prof_roms/rom4_ROMdisk.bin" SAVEBIN "../Build/scorp/NewROM4.bin",#0000,#4000