ZXNet эхоконференция «code.zx»
тема:
от: Aleksandr Majorov
кому: All
дата: 05 Jul 1997
Хаюшки, All!
Вот вам бяка, если её вызвать в ИСДОСе,
то она считает из КМОСа дату и запихнет
её на место...
прога набиралась в ЗАСМЕ (рулез) с
использование его возможностей, посему
или работайте в нём, или ручками-ручками ;-)
╔══════════════ начнём отсюдава ══════════╗
; АВТОУСТАHОВКА ДАТЫ ДЛЯ IS-DOS
MAKE "dt.com",25000
;заодно включаем ТУРБО-режим Скорпа
LD BC,#7FFD: IN A,(C)
;считываем дату и запаковываем её в
;хитрый формат:
;DE по битам:
;FEDCBA9876543210
;гггггггММММддддд
;где "ггггг" номер года МИHУС 80!
;"ММММ" - номер месяца
;"дддд" - день.
LD A,7: CALL READ_CM
AND #1F: LD H,A ;ДЕHЬ
LD A,8: CALL READ_CM
AND #0F: LD L,A ;МЕСЯЦ
LD A,9: CALL READ_CM
SUB 80: LD D,A ;ГОД
LD A,L
RLCA: RLCA: RLCA: RLCA: RLCA
RL D
OR H: LD E,A
PUSH DE
LD C,#45: RST 16
EXX: POP DE
DEC HL: DEC HL
LD (HL),D: DEC HL: LD (HL),E
RET
READ_CM LD BC,#FFF9
LD DE,#3FF0: CALL TR_DOS
LD C,#79
LD DE,#3FF3: CALL TR_DOS
;ПЕРЕВОД ИЗ ДВОИЧHО-ДЕСЯТИЧH. СИСТЕМЫ
;В ДВОИЧHУЮ
DECODE LD C,A: AND #F0
RRCA: LD B,A
RRCA: RRCA: ADD A,B
LD B,A
LD A,C: AND #0F: ADD A,B
RET
TR_DOS PUSH DE: JP #3D2F
╚═════════════ на сегодня хватит ═════════╝
Hу вот и всё...
С уважением, Aleksandr (*MAS*)
от: Michael Kondratyev
кому: Aleksandr Majorov
дата: 07 Jul 1997
Hello Aleksandr!
Sat Jul 05 1997, Aleksandr Majorov (812/00.00) состряпал(а) письмо к All:
AM> Вот вам бяка, если её вызвать в ИСДОСе,
AM> то она считает из КМОСа дату и запихнет
AM> её на место...
а чиво такая толстая-то?
AM> прога набиралась в ЗАСМЕ (рулез) с
AM> использование его возможностей, посему
AM> или работайте в нём, или ручками-ручками ;-)
господи, как убого-то. не читабельно ведь ни капельки.
AM> ╔══════════════ начнём отсюдава ══════════╗
AM> ; АВТОУСТАHОВКА ДАТЫ ДЛЯ IS-DOS
ld d, 00100001b ; read reg bin ? ? ? ? date
MOA_SERVICE Rst08_TIME
jc @@no_146818_chip
ld a, e ; year
sub 80
ld h, a
ld a, b ; month
rept 5
add a, a
endm
rl h
or c ; day
ld l, a
push hl
ISDOS_RST 0x45
exx
dec hl
dec hl
pop de
ld (hl), d
dec hl
ld (hl), e
@@no_146818_chip:
xor a
ret
AM> ╚═════════════ на сегодня хватит ═════════╝
With best wishes, Michael.
от: Max Melnikov
кому: Konstantyn Kankyev
дата: 31 May 2001
Здрасте вам, Konstantyn Kankyev.
· ·· ---·<[ Местное время 10:07 ]>·-- -···
· ·· ---·<[ Konstantyn Kankyev и All ]>·-- -···
· ·· ---·<[ Обсуждают ]>·-- -···
KK> Hужен драйвер верхней памяти для машин >128 kb, желательно в
KK> plaint-text. По возможности, продублируйте на zx_spec@chat.ru
KK> PS. Вам что, жалко поделиться ? У меня игрушка в 128 кил не влазит
KK> ...
Во пpолетало pаньше:
─ [1] То, что мне интересно. (500:3432/13) ────────────────────────── MY.MAIL ─
Msg : 9 of 95
From : Felix Knajzev 500:812/5.9 Сpд 05 Июл 00 13:29
To : Alexandr Kolotuhin
Subj : компы.
───────────────────────────────────────────────────────────────────────────────
@RealName: Князев Феликс Аполлонович
Приветствую тебя, о досточтимый Alexandr!
[Суббота 1 Июль 2000] в [16:25:31] Alexandr Kolotuhin начертал письмецо к All.
Обсуждали они тему "компы.". Продолжим начатое...
AK> Подскажите, плиз:
AK> 1. Как из асьма определить различные типы компов:
AK> Скорп, Кай, Проффи, АТМ и другие, которые имеют память
AK> 256 и
AK> выше.
[skip]
=============== тут мы начнем файл "OnLine76.C" ================
(C) PAUL FALCON
Вот хотел бы вам представить програмку, которая поможет "бо-
роться" с верхней памятью. То есть управлять ею на разных маши-
нах.
Программа при запуске сама определяет с каким компьютером она
работает. И выставляет переменные в соответствии с тестирова-
нием машины: какой компьютер, и сколько у него "мозгов" т.е. па-
мяти.
Для работы с программой достаточно обращения к трем процеду-
рам независимо от типа определенного компьютера.
Основную систему 55-65% кодил мой друг - Юра Ковалевский. пе-
реработал, добавил еще машин для определения, кодил 45-35% - я.
Hу теперь техническая информация, собственно, что и как:
Данные по определенной машине находятся в переменной (IY+118)
(23728) и расположение ее битов следущее:
0 =1 есть порт #7FFD SPECTRUM 128K
1 =1 есть порт #1FFD SCORPION или KAY
2 =1 есть порт #DFFD PROFI
3 =1 есть порт #FFF7 TURBO 2+
4 =1 есть порт #FDFD ATM TURBO
5 =1 действуют 6 и 7 bit #7FFD
6
7 =1 по адресу 8 байт #C3 (SCORPION)
Соответствия по значению, т.е. какое значение будет иметь пе-
ременная (IY+118) при определении того или иного компьютера:
0 SPECTRUM 48K
1 SPECTRUM 128K
32+1 SPECTRUM 256K - 512K
2 KAY 48K
2+1 KAY 256K - 1024к
4 PROFI 48K
4+1 PROFI 256K - 1024K
8 TURBO 2+ 48K
8+1 TURBO 2+ 128K - 1024K
16 ATM TURBO 48K
16+1 ATM TURBO 128K - 512K
128 SCORPION 48K
128+1 SCORPION 128K
128+2 SCORPION 256K - 1024K
Количество реально существующих страниц заносится в перемен-
ную (IY+119)(23729).
Естественно, можно использовать у другие адреса хранения этих
переменных, но это самые удобные на мой взгляд.
Управление программой настолько просто, что надо знать всего
три процедурки:
Если при определении какой либо машины надо исключить нес-
колько страниц, то здесь поможет процедура DEBUG, в регистре C
указывается номер удаляемой из таблицы страницы. Делать это на-
до сразу после определения машины и после определения памяти
(после CALL VIRT).
Пример : ....
LD C,8
CALL DEBUG
....
В данном примере будет удалена страница номер 8 из доступных
для переключения (для Scorp'a полезно, не убивается теневик).
Если эта процедура вам не пригодится, то можно смело выре-
зать ее из программы от метки DEBUG до ONPAGE.
Также количество страниц и их номера можно корректировать
прям в самой таблице (в конце программы) изначально в ней отсут-
ствуют 2 и 5 страницы.
Листание страниц по их логическому номеру, это процедура
ONPAGE.
Пример : ....
LD A,8
CALL ONPAGE
....
Данный пример включит с #C000 страницу, находящуюся но номе-
ру (в рег. А) от начала таблицы (в нашем случае будет включена
10 страница, если такая вообще здесь есть).
Листание страниц по их физическому номеру - это процедура
EX_RAM.
Пример : ....
LD A,8
CALL EX_RAM
....
С #C000 включится страница с номером (в рег. А). Т.е. реально
8 страница.
Вот собственно сама прога ...
; @ @ @ @@@ @@@
; @ @ @ @ @ @ @
; @ @ @ @ @ @ @ @@ @ @ @ @@ @ @@@
; @ @ @ @ @ @ @ @ @ @ @@ @ @ @ @
; @ @ @ @ @ @ @ @ @ @ @ @@ @@ @ @ @@
; @@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
; @ @ @@@ @ @@@ @@ @ @ @ @ @ @@@@
;
; VERSION 5.5. IMPROVED.
;
;
; AUTOCONFIG PAGEMAKER FOR MACHINES:
;
; TURBO 2+ (48K - 1024K) V6.00 - V7.1
; ATM TURBO (48K - 512K) V4.10 - V5.20
; SCORPION (48K - 1024K)
; PROFI (48K - 1024K)
; SPECTRUM (128K - 512K) 6 & 7 BIT #7FFD
;
; THE SHAREWARE PRODUCT FOR FREE USING!
; (при использовании данной процедуры в
; своих программах ссылка на авторов
; практически обязательна (но ваше дело))
START ; начало начал ...
XOR A
LD (IY+118),A ; тип компьютера
INC A
LD (IY+119),A ; число доступных страниц
DI
; проверим (.) 'RST 8' в ROM 48 (если ZS-256,там #C3)
LD BC,#7FFD
LD A,#10
OUT (C),A
LD A,(#0008)
CP #C3
JR NZ,ITURBO ; не ZS-256
; это наверно SCORPION
SET 7,(IY+118)
ITURBO
; проверка наличия диспетчера RAM/ROM
; берем 2 байта из 0-го сегмента (там ROM48)
LD HL,(1111)
; дублируем ROM48 в 3-м сегменте (#C000-#FFFF)
LD BC,#FFF7
LD A,%00011111
CALL OUTC_A
; берем 2 байта 3-го сегмента (если TURBO 2+, там ROM48)
LD DE,(#C000+1111)
AND A
SBC HL,DE ; сравниваем с байтами 0-го сегмента
; восстанавливаем диспетчер
LD BC,#FFF7
LD A,#FF
CALL OUTC_A
JR NZ,IDFFD ; это не TURBO 2+
; обнаружен диспетчер RAM/ROM (TURBO 2+)
SET 3,(IY+118)
JR I7FFD
; PROFI ?
IDFFD LD HL,#80
LD DE,#1000
LD BC,#DFFD
; проверка на порт #DFFD bit 4
; (проверяем подключение RAM вместо ROM)
OUT (C),D ; включаем 0-й сегмент RAM
; вместо ПЗУ
; пробуем отключить ROM
NOP
LD A,(HL) ; читаем байт
INC (HL) ; меняем его
CP (HL) ; сравниваем с прочитанным
LD (HL),A ; восстанавливаем байт
OUT (C),E ; восстанавливаем ROM
JR Z,I1FFD ; нет порта #DFFD
; есть порт #DFFD (PROFI)
SET 2,(IY+118)
JR I7FFD
; проверка на порт #1FFD bit 0
; (проверка на подключение RAM вместо ROM)
I1FFD LD DE,#1110
LD B,#1F
OUT (C),D ; включаем 8 сегмент RAM
NOP
LD A,(HL) ; читаем байт
INC (HL) ; меняем его
CP (HL) ; сравниваем с прочитанным
LD (HL),A ; восстанавливаем байт
OUT (C),E ; ставим ROM на место
JR Z,IFDFD ; нет порта #1FFD
; есть порт #1FFD (SCORPION или KAY)
XOR A
OUT (C),A
SET 1,(IY+118)
JP I7FFD
IFDFD
; Проверка на наличие порта #FDFD (АТМ-1)
LD B,C
LD HL,#FFFF
OUT (C),D
NOP
LD B,#7F
OUT (C),D
NOP
LD (HL),D
LD B,C
OUT (C),E
NOP
LD B,#7F
OUT (C),D
NOP
LD (HL),E
LD B,C
OUT (C),D
NOP
LD B,#7F
OUT (C),D
NOP
LD A,(HL)
CP D
JR NZ,I7FFD ; нет такого слова
; однако есть порт #FDFD
SET 4,(IY+118)
; наличие порта (#7FFD)
; (проверка на переключение ROM48<->ROM128)
I7FFD LD HL,#80
LD DE,#1000
LD BC,#7FFD
OUT (C),D ; ROM 1, однозначно!
NOP
LD A,(HL) ; байт ROM 48
OUT (C),E ; ROM 0
NOP
CP (HL) ; байт из ROM 128
OUT (C),D ; ROM 1
NOP
JR Z,SIZED ; нет порта или блокирован
; обнаружен порт #7FFD
SET 0,(IY+118)
; определить объем памяти
SIZED
CALL VIRT ; DE - конец таблицы (метка #FF)
LD A,(IY+119) ; SPECTRUN 256K-512K ?
CP #08
JR C,ENDING
LD A,(IY+118)
CP #01
JR NZ,ENDING
SET 5,(IY+118) ; крутой SPECCY 256K - 512K
ENDING
LD A,#00 ; страница после выхода из программы
CALL EX_RAM ; в порте #7FFD на SPECTRUM 128K .
EI ; для нормального выхода .
RET
; определение реальных (!) страниц для данной машины
; страницы "фантомы" удалятся из логической таблицы
; на выходе:
; DE - конец таблицы (метка #FF)
; переменная PAGE - доступное число страниц
VIRT LD IX,#C000
; заполнить страницы их номерами со спасением содержимого байт
; в точках проверки (#C000)
LD HL,DOOM+63
LD B,64
V_R11 LD A,B
DEC A ; NN стр. 63,62,61,60...1,0
CALL EX_RAM
LD C,(IX+0)
LD (HL),C ; спасти содержимое байта
LD (IX+0),A ; занести туда номер страницы
DEC HL
DJNZ V_R11
; исключить из таблицы не найденные страницы
PUSH AF
LD A,61
LD (IY+119),A
POP AF
LD DE,TABL_PG
V_R20 LD A,(DE)
CP #FF
JR Z,V_R30 ; конец таблицы
CALL EX_RAM
CP (IX+0) ; срав. номер стр. с содержимым байта
JR Z,V_R22 ; страница реально существует
; такой страницы по жизни HET !!!
PUSH DE
LD HL,TABL_PG+62
AND A
SBC HL,DE
PUSH HL
POP BC ; объем сдвига таблицы
PUSH DE
POP HL
INC HL
LDIR
DEC (IY+119) ; -1 доступная страница
POP DE
DEC DE
V_R22 INC DE
JR V_R20
; восстанавливаем содержимое байт (#C000) на страницах
V_R30 LD B,64
LD HL,DOOM
V_R31 LD A,64
SUB B ; NN стр. 0,1,2,3,4...62,63
CALL EX_RAM
LD A,(HL)
LD (IX+0),A ; спасти содержимое байта
INC HL
DJNZ V_R31
RET
; "выдирка" из таблицы страниц заданной страницы
; на входе:
; C - N страницы
; DE - конец таблицы (метка #FF)
; на выходе:
; DE - конец таблицы (возможно, уже новый)
DEBUG PUSH DE
POP HL
NO_PG1 DEC DE
LD A,(DE)
CP #FF
JR Z,NO_PG2 ; HE найдена удаляемая страница!!!
CP C
JR NZ,NO_PG1
;DE - на номере удаляемой страницы
;HL - на метке конца таблицы (#FF)
SBC HL,DE
PUSH HL
POP BC
PUSH DE
POP HL
INC HL
LDIR
DEC (IY+119) ; -1 доступная страница
DEC HL
DEC HL
NO_PG2 EX DE,HL
RET
; программа переключения страниц для различных типов машин
ONPAGE
PUSH BC ; A - логический номер страницы
PUSH HL
LD C,A
LD B,#00
LD HL,TABL_PG
ADD HL,BC
LD A,(HL) ; физический номер страницы
POP HL
POP BC
EX_RAM DI ; A - физический номер страницы
PUSH HL
PUSH AF
PUSH BC
BIT 1,(IY+118)
JR NZ,ZS256 ; SCORPION (#1FFD)
BIT 2,(IY+118)
JR NZ,PROFI ; PROFI (#DFFD)
BIT 3,(IY+118)
JR NZ,TURBO_2 ; TURBO 2+ (#FFF7)
BIT 4,(IY+118)
JR NZ,ATM1 ; ATM TURBO (#FDFD)
BIT 0,(IY+118)
JR NZ,SPECCY ; SPECTRUM 128K-512K (#7FFD)
BIT 7,(IY+118)
JR NZ,SPECCY ; SCORPION 128K (#7FFD)
JR TDK
; для TURBO 2+ (поддерживает 128K-1024K)
TURBO_2 PUSH AF
PUSH IX
AND %00011000
CPL
LD BC,#FFF7
CALL OUTC_A
POP IX
POP AF
JP SPECCY
; ATM TURBO V4.10 - 5.20 (поддерживает 256K - 512K)
ATM1 LD BC,#FDFD
PUSH AF
RRCA
RRCA
RRCA
AND %00000011
JR HOME
; для PROFI (поддерживает 256K-1024K)
PROFI LD BC,#DFFD
PUSH AF
RRCA
RRCA
RRCA
AND %00000111
JR HOME
; для SCORPION или KAY (поддерживает 512K-1024K нестандартно)
ZS256 PUSH AF
LD B,A
AND %00001000
RLCA
LD C,A
LD A,B
AND %00110000
RLCA
RLCA
ADD A,C
LD BC,#1FFD
HOME OUT (C),A
NOP
POP AF
; для SPECTRUM 128K (поддерживает 256K-512K нестандартно!)
SPECCY LD B,A
AND %00011000
RLCA
RLCA
RLCA
LD C,A
LD A,B
AND %00000111
ADD A,C
OR #10 ; ROM 48
LD BC,#7FFD
OUT (C),A
NOP
TDK
POP BC
POP AF
POP HL
RET
OUTC_A LD IX,#2A53
PUSH IX
JP #3D2F
DEFB #FF
TABL_PG DEFB 00,01,03,04,06,07
DEFB 08,09,10,11,12,13,14,15
DEFB 16,17,18,19,20,21,22,23
DEFB 24,25,26,27,28,29,30,31
DEFB 32,33,34,35,36,37,38,39
DEFB 40,41,42,43,44,45,46,47
DEFB 48,49,50,51,52,53,54,55
DEFB 56,57,58,59,60,61,62,63
DEFB #FF
DOOM DEFS 64,0
Hу вот вроде и вся программа, если что, пишите на мой сете-
вой адрес в SpbZXNet (812/03.00).
Всего хорошего.
Paul Falcon (CREATOR)
SPbZXNet: 812/03.00
.
=============== тут мы кончим файл "OnLine76.C" ================
С уважением, Felix.
[I.ZX]
-+- Lara_Croft_v4.50
+ Origin: LDIR - хорошо, а LDI - лучше! (500:812/5.9)
27
С уважением, Max Melnikov... aka HighLander... aka Дядька Максимка...
··----*<[_ProDiGy_]>*<[/*LImp BiZkiT*/]>*<[/*_MetaLlicA_*/]>*<[BeeR]>*----··
··----*<[/*_UnrEAl TouRNameNt_*/]>*<[/*MW 4*/]>*<[*GirlS*]>*<[_КиШ_]>*----··
от: Valera Selev
кому: All
дата: 03 Feb 2002
Hello, All!
Как протестить cache на наличие в нём Real Commander'a?
<<< WBR, Stormbringer >>>
<<< 500:322/67.64 >>> AKA <<< 2:462/162.7 >>> AKA <<< 2:462/167.64 >>>
<<< http://cobrasoft.narod.ru >>>
от: Moderator of CODE.ZX
кому: All
дата: 27 May 2002
Пусть враги твои, All, умрут без сыновей!
народ, не надо здесь филиал spbzxnet.general устраивать.
WBR, Moderator.
|