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.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вступление - Постоянство - лучший способ уважать традиции.
Игрушки - Operation R.R. Вступительная новелла к новому графическому quest'у от GALAXY.
Вступление - содержание номера.

В этот день...   23 октября