ZXNet эхоконференция «code.zx»
тема: драйвер памяти в Alasm
от: Valerij Kozhevnikoff
кому: All
дата: 08 Oct 2002
Здравствуй, All!
Сабж как-то хитро устроен. Всю жизнь пользовался, и только сейчас
потребовалось разобраться в его устройстве.
Hепонятно, для чего нужны процедуры PREPOD и SPCPROG, а также что такое
JUMPER 23600.
PREPOD вообще что-то непонятное. Если предположить, что это основная точка
входа, то в одних драйверах она зачем-то сохраняет регистры, а в других
наоборот изменяет.
JUMPER 23600 скорее всего используется при возврате в ассемблер.
Поскольку драйвер скорее всего перемещаемый, то SPCPROG наверное служит для
настройки на новый адрес. Блин, фигня какая-то.
Трудно ли кому-нибудь прямо здесь уточнить эту инфу?
_······------====== Стеклорез мониторный ======------······_
;PENTAGON HIGH MEMORY DRIVER
ORG #7000
MEMDRV
DW #0010 ;*это зачем???*
ADAS LD A,#04
ZAP LD BC,#7FFD
OR #10
OUT (C),A
RET
DS 8
LD HL,#C000 ;JUMPER 23600 *куда jumper?*
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD LD BC,#7FFD
OR #10
OUT (C),A
RET ;8 BYTES
HIMEM DB #C7 ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "PENT" ;DRIVER NAME
STRTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG RET
_······------====== Стеклорез мониторный ======------······_
;SCORPION HIGH MEMORY DRIVER
ORG #7000
MEMDRV
ADAS LD A,#04
ZAP LD BC,#1FFD ;SCORP MEM DRV
LD D,A
AND #07
LD E,A
XOR D
RLCA
OUT (C),A
LD B,#7F
SET 4,E
OUT (C),E
RET
LD HL,#C000 ;JUMPER 23600
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD EXX
KAPS CALL 0
EXX
RET
DW 0 ;8 BYTES
HIMEM DB #0F ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "SCRP" ;DRIVER NAME
STARTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG LD HL,KAPS+1-MEMDRV
ADD HL,BC
EX DE,HL
LD HL,ZAP-MEMDRV
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
RET
_······------====== Стеклорез мониторный ======------······_
;PROFI HIGH MEMORY DRIVER
ORG #7000
MEMDRV
ADAS LD A,#04
ZAP LD BC,#DFFD ;PROF MEM DRV
LD E,#7F
LD D,A
AND #07
LD L,A
XOR D
RRCA
RRCA
RRCA
SET 4,L
JP #3899
LD HL,#C000 ;JUMPER 23600
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD EXX
PUSH HL
KAPS CALL 0
POP HL
EXX
RET ;8 BYTES
HIMEM DB #3F ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "PROF" ;DRIVER NAME
STARTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG LD HL,KAPS+1-MEMDRV
ADD HL,BC
EX DE,HL
LD HL,ZAP-MEMDRV
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
RET
WBR, Jason.
/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/
/np:/ *silence*
от: Valerij Kozhevnikoff
кому: All
дата: 08 Oct 2002
Здравствуй, All!
Сабж как-то хитро устроен. Всю жизнь пользовался, и только сейчас
потребовалось разобраться в его устройстве.
Hепонятно, для чего нужны процедуры PREPOD и SPCPROG, а также что такое
JUMPER 23600.
PREPOD вообще что-то непонятное. Если предположить, что это основная точка
входа, то в одних драйверах она зачем-то сохраняет регистры, а в других
наоборот изменяет.
JUMPER 23600 скорее всего используется при возврате в ассемблер.
Поскольку драйвер скорее всего перемещаемый, то SPCPROG наверное служит для
настройки на новый адрес. Блин, фигня какая-то.
Трудно ли кому-нибудь прямо здесь уточнить эту инфу?
_······------====== Стеклорез мониторный ======------······_
;PENTAGON HIGH MEMORY DRIVER
ORG #7000
MEMDRV
DW #0010 ;*это зачем???*
ADAS LD A,#04
ZAP LD BC,#7FFD
OR #10
OUT (C),A
RET
DS 8
LD HL,#C000 ;JUMPER 23600 *куда jumper?*
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD LD BC,#7FFD
OR #10
OUT (C),A
RET ;8 BYTES
HIMEM DB #C7 ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "PENT" ;DRIVER NAME
STRTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG RET
_······------====== Стеклорез мониторный ======------······_
;SCORPION HIGH MEMORY DRIVER
ORG #7000
MEMDRV
ADAS LD A,#04
ZAP LD BC,#1FFD ;SCORP MEM DRV
LD D,A
AND #07
LD E,A
XOR D
RLCA
OUT (C),A
LD B,#7F
SET 4,E
OUT (C),E
RET
LD HL,#C000 ;JUMPER 23600
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD EXX
KAPS CALL 0
EXX
RET
DW 0 ;8 BYTES
HIMEM DB #0F ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "SCRP" ;DRIVER NAME
STARTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG LD HL,KAPS+1-MEMDRV
ADD HL,BC
EX DE,HL
LD HL,ZAP-MEMDRV
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
RET
_······------====== Стеклорез мониторный ======------······_
;PROFI HIGH MEMORY DRIVER
ORG #7000
MEMDRV
ADAS LD A,#04
ZAP LD BC,#DFFD ;PROF MEM DRV
LD E,#7F
LD D,A
AND #07
LD L,A
XOR D
RRCA
RRCA
RRCA
SET 4,L
JP #3899
LD HL,#C000 ;JUMPER 23600
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD EXX
PUSH HL
KAPS CALL 0
POP HL
EXX
RET ;8 BYTES
HIMEM DB #3F ;MEMORY MASK
SYSPASH DB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DB "PROF" ;DRIVER NAME
STARTSH DB ZAP-MEMDRV ;START SHIFT
SPCPROG LD HL,KAPS+1-MEMDRV
ADD HL,BC
EX DE,HL
LD HL,ZAP-MEMDRV
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
RET
WBR, Jason.
/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/
/np:/ *silence*
от: Aleksey Senilov
кому: Valerij Kozhevnikoff
дата: 11 Oct 2002
||*()*|| Привет тебе, _/Valerij/_!
08 октября 2002 02:01, Valerij Kozhevnikoff писал(а) All:
VK> Сабж как-то хитро устроен. Всю жизнь пользовался, и только сейчас
VK> потребовалось разобраться в его устройстве.
Когда-то разбирался, когда переделывал под свой способ нумерации банков для
Пент512 (маска #C7 жутко неудобна, #1F намного лучше).
VK> Hепонятно, для чего нужны процедуры PREPOD и SPCPROG, а также что
VK> такое JUMPER 23600.
Сейчас... смотри ниже.
VK> PREPOD вообще что-то непонятное. Если предположить, что это основная
VK> точка входа, то в одних драйверах она зачем-то сохраняет регистры, а в
VK> других наоборот изменяет.
Как видишь, на Пентагоне для переключения страницы нужна лишь BC. А её видимо
можно и не сохранять. А вот на других используются и другие регистры, потому
они и сохраняются. Для Профи вообще ПЗУ вызывается.
А так, да, PREPOD - основная точка входа.
VK> JUMPER 23600 скорее всего используется при
VK> возврате в ассемблер.
Именно.
VK> Поскольку драйвер скорее всего перемещаемый, то
VK> SPCPROG наверное служит для настройки на новый адрес. Блин, фигня
VK> какая-то.
И это тоже именно так. Hа входе в SPCPROG в BC текущий адрес драйвера.
VK> Трудно ли кому-нибудь прямо здесь уточнить эту инфу?
Вовсе нет.
VK> ;PENTAGON HIGH MEMORY DRIVER
VK> ORG #7000
VK> MEMDRV
VK> DW #0010 ;*это зачем???*
Вот насчет этого хоть убей, не знаю.
VK> ADAS LD A,#04
VK> ZAP LD BC,#7FFD
VK> OR #10
VK> OUT (C),A
VK> RET
VK> DS 8
VK> LD HL,#C000 ;JUMPER 23600 *куда jumper?*
VK> PUSH HL
VK> JR ADAS ;26 БАЙТ
Этот кусок драйвера обычно перекидывается как резидент, и адрес этой точки
равен 23600. Теперь ясно?
VK> PREPOD LD BC,#7FFD
VK> OR #10
VK> OUT (C),A
VK> RET ;8 BYTES
Здесь программа переключения входит в 8 байт, и потому без всяких CALL.
VK> HIMEM DB #C7 ;MEMORY MASK
И ты им пользуешься? #1F ведь лучше и совместимее с другими драйверами. А то
при попытке компиляции такого исходника (с подгрузкой в банки по маске #C7)
например на Профи ни к чему хорошему не приведет.
Всего наилучшего! С вами был /*Boh*/ / /Image Crew/. ||*()*||
от: WoWan Nickolaev
кому: Valerij Kozhevnikoff
дата: 12 Oct 2002
Как твоё ничего, Valerij?
08 Oct 02 02:01, Valerij Kozhevnikoff -> All:
VK> DS 8
Мну эта строчка интересует! Что сюда генерится?
VK> LD HL,#C000 ;JUMPER 23600 *куда jumper?*
VK> PUSH HL
VK> JR ADAS ;26 БАЙТ
WBR, Lynx // J!ZzZ!
[team ZX] [Dark Jungle] [GoA] [J!ZzZ project] [PLUt0N!um]
[GmD] [club ЛюК] [black-sand.da.ru]
от: Valerij Kozhevnikoff
кому: Aleksey Senilov
дата: 16 Oct 2002
Здравствуй, Aleksey!
11 Окт 02 20:21, Aleksey Senilov -> Valerij Kozhevnikoff:
VK>> Сабж как-то хитро устроен. Всю жизнь пользовался, и только сейчас
VK>> потребовалось разобраться в его устройстве.
AS> Когда-то разбирался, когда переделывал
Давай его сюда.
AS> под свой способ нумерации банков для Пент512 (маска #C7 жутко неудобна, #1F
AS> намного лучше).
Угу. У Скорпа #0F. Я когда-то сильно ругался на эту #C7...
[хомякъ сожралъ]
Thnx. Уже не надо. Я свой формат придумал.
WBR, Jason.
/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/
/np:/ *silence*
от: Aleksey Senilov
кому: Valerij Kozhevnikoff
дата: 19 Oct 2002
||*()*|| Привет тебе, _/Valerij/_!
16 октября 2002 05:14, Valerij Kozhevnikoff писал(а) Aleksey Senilov:
VK>>> Сабж как-то хитро устроен. Всю жизнь пользовался, и только
VK>>> сейчас потребовалось разобраться в его устройстве.
AS>> Когда-то разбирался, когда переделывал
VK> Давай его сюда.
Вот, лови.
=== Цитирую файл PENT_MY.ASM ===
ORG #7000
MEMDRV
ADAS LD A,#04
ZAP
LD C,A
RLCA
RLCA
RLCA
XOR C
AND #C0
XOR C
AND #C7
OR #10
LD BC,#7FFD
OUT (C),A
RET
LD HL,#C000 ;JUMPER 23600
PUSH HL
JR ADAS ;26 БАЙТ
PREPOD EXX
KAPS CALL 0
EXX
RET
DEFW 0 ;8 BYTES
HIMEM DEFB #1F ;MEMORY MASK
SYSPASH DEFB ADAS+1-MEMDRV ;SYSPAGE SHIFT
DRVNAM DEFB "PENT" ;DRIVER NAME
STARTSH DEFB ZAP-MEMDRV ;START SHIFT
SPCPROG LD HL,KAPS+1-MEMDRV
ADD HL,BC
EX DE,HL
LD HL,ZAP-MEMDRV
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
RET
=== Конец цитаты ===
AS>> под свой способ нумерации банков для Пент512 (маска #C7 жутко
AS>> неудобна, #1F намного лучше).
VK> Угу. У Скорпа #0F. Я когда-то сильно ругался на эту #C7...
Да кому-то лень было :)
VK> [хомякъ сожралъ]
VK> Thnx. Уже не надо. Я свой формат придумал.
Это ты для чего-то своего драйвера делаешь? Тогда как тебе такое... Упаковал
хрипом, посмотри. Вот только mem256 там лишний, не в том формате.
=== Цитирую файл MEMDRVS.HRP ===
begin 644 MEMDRVS.HRP
M2%)I!$*``%(
M93'C,C@@[$@`_A?_R@$/P0E_^?-VQ]W][=FPV1#X0$.@")??UA35$&+4B+_
M+#D!"EA$4E]W@>:2,W.3#.[J(BN.Q-1<#_`0E47U!!1_-%HC`*]U9Y]N$!
M"U05T>*3U?O54P'0]5YY]59)1/4?`0Q6]
M4W1A;F18
M[^KB++[H`K0!`WZ#!=3U+#AD]0.)7K(Q#=O+IEC*]4O4YNG4X8M-B)O@WC?[
MJ?4RQ?#[7
M-4*W0/!GM#[`[7@HGK%S;D-S:PD1'M`,`$(7:UMQK-^$SW/>[P+?Q_E0$I
MH"++4V$0V`HX87.EQOGBERSTE?+$ZP$8",90!S$LES#KSP1X/
M;Q[[RXV$O=A%Z6J_&'V!I:6$QE;F?>=&CG5CIG)"UXU-D`[^_G^F8
MZIL:T#86QT``2')S=#("``6H`A+F&;65M,C4V("!(```!`4```````!M
MC64RXS4V(.Q(`/X7__P#
|