asembler.1mibak,
Interesuje me uloga određenih(a može i svih) I/O aresa kao na primer
in al,60h ; sourcer javlja keybd scan or sw1 ali šta se stvarno
tamo nalazi
in al,61h
out 61h,al ; al=80h
out 20h,al ; al=20h
Možda postoji neki faj sa kompletnim(mada sumnjam) opisom portova
ili programabilnih kontrolera kao 8255,8259
asembler.2evlad,
>> Možda postoji neki faj sa kompletnim(mada sumnjam) opisom portova
>> ili programabilnih kontrolera kao 8255,8259
i82C55A programmable peripheral interface
-----------------------------------------
┌──────────────────┐
PA3 ─┤ 1 40 ├─ PA4
PA2 ─┤ 2 39 ├─ PA5
PA1 ─┤ 3 38 ├─ PA6
PA0 ─┤ 4 37 ├─ PA7
đRD ─┤ 5 36 ├─ đWR
đCS ─┤ 6 35 ├─ RESET
GND ─┤ 7 34 ├─ D0
A1 ─┤ 8 33 ├─ D1
A0 ─┤ 9 32 ├─ D2
PC7 ─┤ 10 31 ├─ D3
PC6 ─┤ 11 30 ├─ D4
PC5 ─┤ 12 29 ├─ D5
PC4 ─┤ 13 28 ├─ D6
PC0 ─┤ 14 27 ├─ D7
PC1 ─┤ 15 26 ├─ VCC
PC2 ─┤ 16 25 ├─ PB7
PC3 ─┤ 17 24 ├─ PB6
PB0 ─┤ 18 23 ├─ PB5
PB1 ─┤ 19 22 ├─ PB4
PB2 ─┤ 20 21 ├─ PB3
└──────────────────┘
CONTROL WORD
┌────┬────┬────┬────┬────┬────┬────┬────┐ ┌───────────────┐
│ D7 │ D6 │ D5 │ D4 │ D3 │ D2 │ D1 │ D0 │ │ GROUP B │
└─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┘ ├───────────────┤
│ └─┬──┘ │ │ │ │ └──────────┤ PORT C (LOWER)│
│ │ │ │ │ │ │ 1 = INPUT │
│ │ │ │ │ │ │ 0 = OUTPUT │
│ │ │ │ │ │ ├───────────────┤
│ │ │ │ │ └───────────────┤ PORT B │
│ │ │ │ │ │ 1 = INPUT │
│ │ │ │ │ │ 0 = OUTPUT │
│ │ │ │ │ ├───────────────┤
│ │ │ │ └────────────────────┤ MODE SELECTION│
│ │ │ │ │ 1 = MODE 1 │
│ │ │ │ │ 0 = MODE 0 │
│ │ │ │ └───────────────┘
│ │ │ │ ┌───────────────┐
│ │ │ │ │ GROUP A │
│ │ │ │ ├───────────────┤
│ │ │ └─────────────────────────┤ PORT C (UPPER)│
│ │ │ │ 1 = INPUT │
│ │ │ │ 0 = OUTPUT │
│ │ │ ├───────────────┤
│ │ └──────────────────────────────┤ PORT A │
│ │ │ 1 = INPUT │
│ │ │ 0 = OUTPUT │
│ │ ├───────────────┤
│ └──────────────────────────────────────┤ MODE SELECTION│
│ │ 00 = MODE 0 │
│ │ 01 = MODE 1 │
│ │ 1X = MODE 2 │
│ └───────────────┘
│ ┌───────────────┐
└─────────────────────────────────────────────┤ MODE SET FLAG │
│ 1 = ACTIVE │
└───────────────┘
da napomenem 55-tica ima 3 moda rada ...
za 59-ku bih morao punooo da kucam iz intelovog kataloga ...
ima 4 ICW-a i 3 OCW-a, ono 20h je EOI za OCW2
asembler.3bkaradzic,
> Mozda postoji neki faj sa kompletnim(mada sumnjam) opisom portova
Postoji:) TECH HELP mozda ga ima na sezamu(?).
asembler.4pedjak,
> Interesuje me uloga određenih(a može i svih) I/O aresa kao na primer
> Možda postoji neki faj sa kompletnim(mada sumnjam) opisom portova
> ili programabilnih kontrolera kao 8255,8259
Postoji, fajlovi su inter*.*, ima ih na Sezamu, ne znam koji
direktorijum.
asembler.5bulaja,
│Postoji:) TECH HELP mozda ga ima na sezamu(?).
└───
MSDOS - R:\INFOPROG
----------------------
techelp zip 167638 Tech Help, PC tehničke informacije za programere
asembler.6mibak,
> da napomenem 55-tica ima 3 moda rada ...
>
> za 59-ku bih morao punooo da kucam iz intelovog kataloga ...
> ima 4 ICW-a i 3 OCW-a, ono 20h je EOI za OCW2
Zaista ti hvala na trudu, ali ova sličica mi ne govori puno(jer još
nisam dublje upoznat u same kontrolere). Mene(kao pocetnika u asm prog.)
interesuju neki primeri programiranja kontrolera sa opisom portova.
asembler.7mibak,
> MSDOS - R:\INFOPROG
> ----------------------
> techelp zip 167638 Tech Help, PC tehničke informacije za
> programere
Hvala svima na info.
asembler.8jkpbvk,
U drugom broju Altera je bio source za scroll ali izgleda da ne radi kako
treba, naime kad se kompajlira javi gresku kod SHL AX,4 ,
kad sam smanjio vrednost na 1 , dakle SHL AX,1 , prosao je kroz kompajler
ali zato umesto slova izbacuje neke brljotine.
Jel' zna neko resenje ?
Za one koje nisu skinuli Alter uz poruku je source.
intro.arjasembler.9bceklic,
> U drugom broju Altera je bio source za scroll ali izgleda da ne
> radi kako treba, naime kad se kompajlira javi gresku kod SHL
> AX,4 , kad sam smanjio vrednost na 1 , dakle SHL AX,1 , prosao
> je kroz kompajler ali zato umesto slova izbacuje neke
> brljotine. Jel' zna neko resenje ?
Problem je u tvom kompajleru. Ako koristis tasm ne bi trebalo da
bude bilo kakvih problema. E sad, sama sustina naredbe namece resenje.
Ako vec kompajler ne mozes da nateras da ti uspesno prevede shl ax,4
umesto ove naredbe stavi cetiri (4) naredbe shl ax,1 koje imaju isti
efekat. Ovo mora da radi bez obzira na kompajler. Brljotine su posledica
pogresnog izracunavanja adrese karaktera fonta u memoriji.
Pozdrav!
asembler.10jkpbvk,
||| Problem je u tvom kompajleru. Ako koristis tasm ne bi trebalo da
||| bude bilo kakvih problema. E sad, sama sustina naredbe namece resenje.
||| Ako vec kompajler ne mozes da nateras da ti uspesno prevede shl ax,4
||| umesto ove naredbe stavi cetiri (4) naredbe shl ax,1 koje imaju isti
||| efekat. Ovo mora da radi bez obzira na kompajler. Brljotine su posledica
||| pogresnog izracunavanja adrese karaktera fonta u memoriji.
Imam TASM 2.01 i kompajlirao sam ga sa /m2 switche-om i nije hteo.
Inace radi sa 4 shl ax,1
Thanx
asembler.11mdimitrijevic,
Hi, ja sam autor SKROL-a.
Stvar je u tome sto sam SKROL pisao TASM-om 3.1 mada me cudi sto
nece da prevede SHL AX,4 ????
Uzgred citaj novi broj bice jos nesto lepse od mene. Trenutno se
bavim obicnijim rutinama da bi ljudi mogli da shvate neke fazone od nule
mozda cu vec za sledeci broj napisati tekst o sprajtovima u X-MODE-u, ali
videcemo ko zna sta mi padne na pamet. :)
Pozdrav,
Marjan
asembler.12mdimitrijevic,
Uzgred mala napomena skrol je napisan da bi pazljivo prateci tok
primera naucili neke osnovne stvari. Mnoge od najlepsig rutina za INTRO-e
su napisane vrlo prosto ali je zato ideja komplikovana :).
Pozdrav,
Marjan
asembler.13kriss,
˙˙ Stvar je u tome sto sam SKROL pisao TASM-om 3.1 mada me cudi
˙˙ sto nece da prevede SHL AX,4 ????
Problem je što SHL kod 808x procesora "radi" samo sa jedinicom ili sa
CL registrom, tj. može da se piše
SHL reg,1 ako se šiftovanje vrši za jedno mesto ili
SHL reg,CL ako treba da se pomeri ulevo za više mesta, što naravno
uslovljava punjenje CL registra pre toga
Kasnije je to izmenjeno, pa SHL ax,4 prolazi bez problema. Međutim ...
:) problem je u starom TASM-u, koji izgleda nema SMART direktivu, koja
rešava ovaj i još neke specifične slučajeve (dodatni JMP, CALL FAR u
NEAR opsegu itd.), pa su rešenja sledeća:
- ili program prevesti nekim novijim TASM-om, kod koga je SMART
default stanje
- ili zameniti SHL ax,4 sa 4 SHL ax,1
No to ste već znali, ali eto, možda neko nije ... O:)
asembler.14mdimitrijevic,
Evo sta uradi TASM kada napisem SHL AX,8. On napise u fajl 8 puta SHL AX,1
logicno zar ne ? :)))
Pozdrav,
Marjan
asembler.15bkaradzic,
> Evo sta uradi TASM kada napisem SHL AX,8. On napise u fajl 8 puta SHL AX,1
> logicno zar ne ? :)))
Zaboravio si da na pocetak programa stavis .286 :)
čatßoy
asembler.16rcolic,
E ljudi ovako, posto se dugo nisam javljao, da postavim pitanje da li se vde
slao sors programa za pustanje VOC semplova, i ako jeste Please lupite mi jedan
pointer na poruku :)
Ako nije bio anek neko ga ima molio bi za jedan mail
fala
asembler.18djuradj,
hi!
Zanima me kako se vrsi unos neke recenice u
string.
Npr.:
stampam 'Koliko imate godina :'
ukuca dvadeset
ocu da u promenljivu god bude upisano 'dvadeset'
Valjda ste shvatili.
Izvinite ako je ovo nesto prosto,ali ja sam pocetnik.
Pozdrav,
Mindza.
asembler.19jkpbvk,
Renaissance '93 Presents PMODE v2 1232 Coded
By: Tran Of Renaissance Finally! A raw, DPMI,
VCPI, and XMS Compliant Protected Mode System
Designed For The Serious 386 Programmer Works
Flawlessly Under DesqView, QEMM, and even.
asm32pm.arjasembler.20bkaradzic,
PMODE/W (PMode za Watcom C)
secnuto iz DEMONEWS-a;)
------------------------------------------------------------------------------
______ _ _ _ _
(_____ \ | | | || || | _
_____) )___ ___ _ | | ____ | || || | ____| |_ ____ ___ ____
| ____/ \ / _ \ / || |/ _ ) | ||_|| |/ _ | _)/ ___) _ \| \
| | | | | | |_| ( (_| ( (/ / | |___| ( ( | | |_( (__| |_| | | | |
|_| |_|_|_|\___/ \____|\____) \______|\_||_|\___)____)___/|_|_|_|
----------------------------------------------------------------------------
PMODE/W (PMode for Watcom C) review by StarScream of Renaissance
------------------------------------------------------------------------------
This is an article about Tran and Daredevil's new PMODE/W (Pmode for
Watcom C/C++). This new PMODE looks to be a very exciting new product and
it could be quite groundbreaking for the demoscene! Special thanks to
StarScream for contributing this article. For more information, be sure
to check out the advertisement for PMODE/W in the advertisements section
of DemoNews. -Ryan
Why Watcom?
~~~~~~~~~~~
Over the past year, a lot of talk has been generated in the demo
scene about the WATCOM C/C++ compiler. Almost all of the new games coming
out for the PC seem to be using it, and with good reason! WATCOM C has many
great features to boast; It uses the Protected Mode of the 386 or higher
processor, and generates highly optimized code which often runs many times
faster than the code generated by a competing compiler such as Borland.
The benefits of increased speed are obvious - if one can develop with
more C and less Assembly but not lose a great deal of speed in the process,
development time can be greatly reduced. Many people are even debating
whether they need to use Assembly anymore! Although WATCOM C can generate
fast code, it can not beat an expert Assembly coder, and I have personally
outwritten it many times with relative ease. Nevertheless, a lot of game
authors have been noticing that a slightly slower routine written in WATCOM
will often do just as well for them as if they had coded the same thing in
Assembly. For this reason, many games are being written with WATCOM.
Protected Mode and Tran's PMODE
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Protected Mode of the 386 and higher processors was first put to
use in the demo scene when Tran wrote the first version of his
revolutionary DOS extender entitled 'PMODE', and began using it in Renaissance
productions. Protected Mode allows programmers a lot more flexibility, ease
of coding, and lets them access ALL of memory with NO speed loss. Programs
which use what is known as Real Mode are limited to the bottom 640k of memory
and can only access the other x megs on the computer by slowly swapping them
back and forth.
Tran's PMODE is probably the standard for DOS extenders in the demo
scene today. It has been since its release a few years ago. Tran has been
constantly updating it, and from using it I can tell you that it is nearly if
not 100% bug free now. In fact, the only drawbacks to using PMODE up until
now had been that you usually had to code in all Assembly with it because the
libraries in C didn't work, and that all of the DOS Interrupts had been
remapped, making it take a little time to learn how to use. However,
Daredevil & Tran's new PMODE/W (PMODE for WATCOM!) completely removes these
drawbacks and adds great new advantages as well as we will see later in the
review.
What ISN'T cool about WATCOM C
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Actually, WATCOM C is VERY cool. However, it is packaged with an
extender called DOS4GW, which you may recognize because it pops up an
annoying little thing telling you that's its name every time you run
something coded in WATCOM C. The DOS4GW extender leaves many things to be
desired, but it also has some nice features. Together with WATCOM C it's
allright.
DOS4GW has two great things about the way it works with WATCOM C.
First of all, memory is considered as being TOTALLY linear in most cases.
If you want to access the address 0a0000h, you can without having to change
that number in any way. All of the pointers correctly point to their
respective addresses with no change needed. The other nice thing is the
support DOS4GW has for DOS and BIOS Interrupts. All of these are mapped
directly to their normal Interrupts, so you can access the Interrupts just
as if you were coding in Real Mode. That's nice because you don't have to
learn anything new!
Unfortunately, DOS4GW can NOT be used in the demo scene for a few
reasons which are totally annoying. One of these reasons is its size. DOS4GW
takes up about 250K on disk! That's not so cool for an intro or something.
Another is that it HORDES memory when your program is running - it takes
about 300k (more i think) of memory AWAY from your program for its own
personal use! Finally, it has slow Real Mode/Protected Mode transitions. For
a timing critical routine, it is totally not accurate enough for use. These
are all major problems with the extender that don't seem like they will ever
be resolved - they are just fundamental flaws in the way it was programmed.
PMODE/W
~~~~~~~
For the good part of a year now, I have been wishing that I could use
WATCOM C in things we at Renaissance do for the demo scene. It would make my
life much easier and really help me out a lot. Daredevil and I have discussed
the idea of a using PMODE with a C compiler any times in the past, and at one
point Tran tried adding partial PMODE support to Borland C. However, Borland
turns out to be an extremely buggy compiler (as Tran found out :) and, due to
the nature of the compiler, the support was not even good enough for it to be
a useful tool for me.
Wonderfully, Daredevil and Tran decided to really get down to work a
couple of months ago and made the decision to make a full blooded PMODE for
use with WATCOM C. All that needed to be done was to replace the DOS4GW
extender with their own new version of PMODE. However, this proved not to be
such a simple task. In fact, at least two other people who I know have tried
to do the same thing - their versions, although technically they 'work', do
not allow the same flexibility of coding styles (i.e. the ability to add your
old Real Mode code/libs into your Protected Mode program) and do not emulate
many of the features necessary to WATCOM C well enough or at all.
Tran and Daredevil have written a new and updated version of PMODE
especially for their system with WATCOM C. This new version has a bundle of
great things, one of which is the size! PMODE/W IS UNDER 8K! Compare than
to DOS4GW's whopping almost 300K! PMODE/W also adds a lot of speed to the
switching done between Real and Protected Modes. These are great features,
but the best feature of all I find to be the fact that it is TOTALLY
COMPATIBLE with DOS4GW and WATCOM C! That means that you can add it to your
code later on even if you decide to develop with DOS4GW to begin with and not
have to change ANYTHING! I hear it even runs DOOM and Epic Megagames' ONE
MUST FALL with no differences except for lots more free memory and that the
two games run a bit better.
Here are some of the features listed in the PMODE/W docs:
) No external extender required (everything needed to execute is in the EXE).
) Small size (less than 8k for the entire extender program).
) Low memory overhead.
) Does not require ANY extended memory to load OR execute.
) No annoying initialization messages.
) Fast execution time.
) Free for non-commercial use.
PMODE/W costs $500 USD for use in a commercial or shareware program.
The professional version of DOS4/G costs around $1000. I would opt to buy
PMODE/W in a second because it runs better, gives you memory and will most
likely pay for itself in disk duplication costs! It's use is free if you
want to code any kind of public domain (freeware) software with it, making it
ideal for demo use. In fact, this is one place where it really shines - if
you are thinking of writing a demo I suggest that you use PMODE/W. It makes
life so much easier and allows so much flexibility that I've come to see it
as an indispensible tool.
There are a few features which I have found in PMODE/W which are not
listed in the documentation, but I have come to know about both by using it
and talking to Daredevil. I will list them here:
> Full Interrupt support
> You can STILL use the Watcom debugger! (yes, a debugger for PMODE!:)
> You don't need to worry about developing with it in mind.. you can add it
or take it away at any time
> Zip sizes become much smaller (great for commercial OR bbs distribution)
> Speeds up floating point emulation many 100s of percent
> You can use your old Real Mode code!
> Code can be loaded into extended/expanded memory!
> Full setup program which allows configuration of memory usage etc
There are doubtless many more features I haven't thought of or seen yet, so
I suggest you try it for yourself and see what else you can come up with. :)
Anyway, PMODE/W has been like a godsend for me, so I REALLY suggest you try
it.. it's WELL worth the 50k download! :)
---------------------------------------------------
PMODE/W v1.10 - Finally A Replacement For DOS/4GW
---------------------------------------------------
PMODE/W is a replacement for DOS/4GW and is fully compatible with
Watcom C/C+. PMODE/W provides you with a number of advantages over
DOS/4GW. The following is just a small list of what you can expect:
- Small Size (Less than 9Kbytes!)
- Fast Execution Time
- Low Memory Overhead
- No Annoying Initialization Messages
- Self Contained Extender Requires Nothing External To Your EXE
- Does Not Require ANY Extended Memory To Load OR Execute
- Minimal Interrupt Latency
- PMODE/W Programs Can Be Run Under DOS/4GW Without ANY Modifications
- Free For Non-Commercial Use
Simply put, PMODE/W has been designed with two things in mind: size and speed.
PMODE/W undergone rigorous optimization, making it the smallest and fastest
extender available for Watcom C/C++. PMODE/W does not provide many of the
frills found in other extenders. It does not provide virtual memory, exception
trapping, or anything else that could possibly slow down the execution of your
code. For this reason, we have designed PMODE/W specifically with the
developer in mind. You can perform all of your development and debugging using
DOS/4GW if necessary, and then plug PMODE/W in for the release version of your
program. If at any time you are dissatisfied with PMODE/W, you can switch back
to DOS/4GW with absolutely no hassle whatsoever. PMODE/W has been thoroughly
tested with popular programs like Doom, Doom ][, and One Must Fall 2097 in
order to insure compatibility. But don't take our word for it, try it out for
yourself today!
The current version of PMODE/W as of this writing can be found in PMW110.xxx,
where xxx is some archive extension (ZIP, ARJ, etc.)
------------------------------------------------------------------------------
PMODE/W Is Currently Available From The Following Sources:
------------------------------------------------------------------------------
- Data Connection BBS (703)506-8598 or (703)847-0861.
- oak.oakland.edu /SimTel/msdos/c (or any SimTel mirror)
- By E-Mail daredevi@dorsai.dorsai.org
------------------------------------------------------------------------------
PMODE/W is Copyright (C) 1994, Charles Scheffold and Thomas Pytel.
All rights reserved.
------------------------------------------------------------------------------
All other trademarks are property of their respective owners.
------------------------------------------------------------------------------
čatßoy
asembler.21jkpbvk,
+| PMODE/W (PMode za Watcom C)
+| secnuto iz DEMONEWS-a;)
Ako naidjes negde na ovo salji.
asembler.22mmaric,
Da li neko zna na koji nacin se pristupa memoriji VGA kartice ?
Mislim na onih 512 Kb, ili 1024 itd. (Zavisi od kartice)?
Uzgred ako neko programira u PROTECTED modu neka mi se javi radi razmene
iskustava. Hteo bih da ga pitam o TASK-ovima uopste o njihovoj strukturi
nacinu upotrebe itd.
P.S. Ako neko ima noviji Debbuger od Borlanda 4.0 ili neceg slicnog
(WATCOM C-a) neka mi se javi radi prenosa.
Uskoro ce moja programerska grupa napraviti program kompletno u 386 protected
modu koji ce predstavljati mali operativni sistem iz koga cete moci da
razbijate bilo koju igru (bice mnogo mocniji od bilo kakvih GAMETOOL-sova
,Actiona) moci ce da editouje memoriju do 4GB-a i jos mnogo mnogo toga
32 Debbuger itd...)KKKKK
asembler.23nemko,
)>Ć- Da li neko zna na koji nacin se pristupa memoriji VGA
)>Ć- kartice ? Mislim na onih 512 Kb, ili 1024 itd. (Zavisi od
)>Ć- kartice)?
Sto se memorije tice to je bar jednostavno. Za razne kartice se posao
obavlja drugacije! Reci za koju ti treba i poslacu ti. Ako hoces poslacu
ti za sve koje imam. Fora je u tome sto se memoriski segment a000 preklapa
sa odredjenim 'segmentom' u video memoriji! Obicno se ta funkcija zove
load_write bank i mozes je naci i u pojedinim uputstvima za poneke kartice!
Javi sta ti sve treba!
Trazim tabelu grafickih modova za razne graficke kartice (imam vec podosta,
ali toga nikad dosta :)) )!!
asembler.25nemko,
)>Ć- Ovako moj kucni telefon je 137728 ove nedelje idem popodne u
)>Ć- skolu tako da mozes
...
)>Ć- Dakle, ocekujem tvoj poziv!!!
Javicu ti se, u to nemoj da sumnjas. Samo mi se cini da si hteo da mi posaljes
private mail! :))))))
asembler.26duzle,
>**> Uzgred nebavim se grafikom kao ostali paceri u konferenciji
>**> sto ce se videti u javnosti kada izadje nesto slicno DOS
>**> Navigatoru Nortonu itd. sa mnogo mnogo originalnih ideja i
>**> mnogo brze i bolje uradjeno. (Mali operativni sistem
>**> kompletno radjen u protected modu)
Nemoj ovo da kazuješ ovako javno. Mog'o bi neko u Microsoftu ili Symantec-u
da se uplaši i završi kod svog psihijatra ;)).
>**> naravno u Assembleru a ne
>**> ko sto to neki paceri rade u WATCOM C-u i ostalim shitovima.
Jeste, svi pravi programeri pišu u asembleru. Ono, vi ste paceri za MOJU
programsku grupu (mi smo Windows napisali odnovo i to upotrebom samo 0 i
1-ce). ;)
Ognen
P.S. No offence :)
asembler.27vitez.koja,
#=> Ono, vi ste paceri
#=> za MOJU programsku grupu (mi smo Windows napisali odnovo i to
#=> upotrebom samo 0 i 1-ce). ;)
JA SAM sam to uradio isto, ali bez jedinice... Sada pišem
OS/3 4 Win i biće gotovo do kraja godine...
sk
asembler.28mmitrovic,
:::::# => Ono, vi ste paceri
:::::# => za MOJU programsku grupu (mi smo Windows napisali odnovo i to
:::::# => upotrebom samo 0 i 1-ce). ;)
:::::
::::: JA SAM sam to uradio isto, ali bez jedinice... Sada pišem
::::: OS/3 4 Win i biće gotovo do kraja godine...
::::::::::
:)))))
E sad sam se setio jednog manijaka koji nas je proganjao kroz
srednje školovanje (tip je bio vezara, al naduven k'o balon, stalno nas
je obletao i "savetovao" šta i kako da radimo). Jes da je za viceve, al
ajd da se nadovežem:
Moj ortak (bio je jedno vreme na sezamu pod zavereničkim imenom shox)
je spremao maturski rad na temu "Grafičke mogućnosti amige" i
uradio je (između ostalog) fini skrol celog ekrana i sad pravi iz Real
3D-a sliku koju će da skroluje. E sad mu dođemo ja, pa kretenčić.
Pričamo mi tako, on nas guši, kad odjednom:
Kret: A jeli, šta to radiš sad? (u tom trenutku vrši se renderovanje i
vidi se pola slike)
ort: Pravim u Real 3D-u sliku za rad.
Kret: (sav nadmen, potcenjivački) E jak si mi ti programer, pravi
programeri prave slike u asembleru, bajt po bajt!
Ne mogu da vam opišem kako je to izgledalo, al mene su tri put
dizali na stolicu.
asembler.29sbrcin,
Pisem programcic koji po svom startovanju treba da simulira rad tastarure.
Ali postoji jedan "mali problemcic" i sastoji se u tome da se sa IO adrese
60h moze samo citati. Interesuje me kako poslati podatak tastaturi tj da taj
podatak ostane zapamcen na doticnoj adresi.
mov dx,60h
mov al,50
out 60h,al
in al,dx
Kako da u al bude broj 50.
asembler.30nemko,
)>Ć- mov dx,60h mov al,50 out 60h,al in al,dx
)>Ć- Kako da u al bude broj 50.
Predpostavljam da hoces da zeznes neki program! Ako se nekaci na tastaturu
tada ti je dovoljno da prepravis INT9 (keyboard) da do pritiska nekog tastera
puni tastaturni bafer vrednostima iz nekog fajla.
Ali daleko lakse je izvrsiti redirekciju ulaza ... .
asembler.31sbrcin,
:( > puni tastaturni bafer vrednostima iz nekog fajla.
:( > Ali daleko lakse je izvrsiti redirekciju ulaza ... .
Problem nije u punjenju bafera nego to sto vecina igara ima svoju kontrolu
tastature. Ja sam napravio programcic koji kada ga aktiviram pocinje slanje
odredjenog niza kodova preko vremenskog interapta. I to je idejno zamisljeno
da na port 60h upisem podatak i da softverski aktiviram int 09, koji treba
da taj podatak protumaci kao podatak koji stize od tastature. Inace od kacenja
na int 09 nema nista posto me igra izbaci sa njega, a i da ostanem nista mi
nebi znacilo posto igra ne ocitava bafer tastature.
Ako neko ima opsirno uputstvo za programiranje tatsature preko io adresa
molio bih ga da mi ga ostavi uz odgovor. Nadam se da ce mi neko dati odgovor
na ovo ne bas poznato pitanje: ":-( kako upisati podatak na output adresu
60h?".
Pitao bih jos jednu stvar. Prilikom programiranja izgleda karaktera javlja mi
se sledeci problem. Naime kakater bi trebao da bude velicine 8x16 tacaka ali
on je u stvari velicine 9x16. U taj 9 bit neki karakteri preslikavaju 8 bit.
Interesuje me da li moze da se taj 9 bit definise kao i ostali bitovi da ima
nezavisnu vrednost, ili KAKO naznaciti video kartici koji karakteri mogu da se
preslikavaju u 9 bit.
asembler.32mmaric,
Izvinjavam se svim korisnicima ovog BBS-a i uopste, ako sam bilo cime ;)
uvredio unapred spomenute. Ali i dalje mislim na to da li su oni iz nekog
Debbugera pogledali "cisti" kod nadaleko omiljenog C-a. Programiranje u C-u ima
svoje dobre strane, brzo se radi, medju visokim i srednjim jezicima je najbrzi
i tu se priblizio ;> Assembleru ali ipak.
Jos jedanput izvinjenje, i neka glupa poruka ne unisti neku buducu saradnju!
asembler.33vision,
Hi. Kako procitati parametre koje se dodeljuju programu, i ime samog programa
- i u verziji .com i u .exe.
Hvala :).
asembler.34msavkovic,
Da li neko ima IceSoft Debugger?
asembler.35sbrcin,
Trebao bi da ostavis konkretnije pitanje.
asembler.36jkpbvk,
+| Da li neko ima IceSoft Debugger?
Of course.
icedebug.rarasembler.37msavkovic,
### +| Da li neko ima IceSoft Debugger?
### Of course.
Hvala...
asembler.38vision,
> Trebalo bi da ostavis konkretnije pitanje.
Pa nezmam kako da ga postavim konkretnije, prosto kako preuzeti (naci
offset:segment adresu u kojoj su smesteni) parametri programa, pre poziva:,
npr. program se zove: proba.com, parametar je npr. *.*, znaci 'proba *.*', e
sada da preuzmem *.* sa programa.
asembler.39msavkovic,
### ### + | Da li neko ima IceSoft Debugger?
### ### Of course.
### Hvala...
Opet ja :) Da li neko ima IceSoft Debugger za DOS?
asembler.40kriss,
˙˙ Pa nezmam kako da ga postavim konkretnije, prosto kako
˙˙ preuzeti (naci offset:segment adresu u kojoj su smesteni)
˙˙ parametri programa, pre poziva:, npr. program se zove:
˙˙ proba.com, parametar je npr. *.*, znaci 'proba *.*', e sada da
˙˙ preuzmem *.* sa programa.
PSP - DOS Program Segment Prefix Layout
Offset Size Description
80 byte count of characters in command tail; all bytes
following command name; also default DTA (128 bytes)
81 127bytes all characters entered after the program name followed
by a CR byte
Ne bi bilo loše da uzmeš HELPPC, odakle je ovo izvučeno. Ima ga na
SEZAM-u, dir INFOPROG (mislim da je tamo).
asembler.41ddotlic,
Meni treba sve u vezi programiranja grafike na PC-ju (kako izgleda paleta,
koji grafički modovi postoje, kako da upisujem vrednosti direktno na ekran
tj. u video memoriju a ne koristeći dos ili bios ...). Ako se radi o
dužim arhivama možemo se dogovoriti i da to prenesemo direktno.
Unapred hvala!
Derek
asembler.42bkaradzic,
> Pa nezmam kako da ga postavim konkretnije, prosto kako preuzeti (naci
> offset:segment adresu u kojoj su smesteni) parametri programa, pre poziva:,
> npr. program se zove: proba.com, parametar je npr. *.*, znaci 'proba *.*', e
> sada da preuzmem *.* sa programa.
Format of disk info:
Offset Size Description
00h WORD info level (zero)
02h DWORD disk serial number (binary)
06h 11 BYTEs volume label or "NO NAME " if none present
11h 8 BYTEs (AL=00h only) filesystem type--string "FAT12 " or "FAT16 "
Format of PSP:
Offset Size Description
00h 2 BYTEs INT 20 instruction for CP/M CALL 0 program termination
02h WORD segment of first byte beyond memory allocated to program
04h BYTE unused filler
05h BYTE CP/M CALL 5 service request (FAR JMP to 000C0h)
BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
06h WORD CP/M compatibility--size of first segment for .COM files
08h 2 BYTEs remainder of FAR JMP at 05h
0Ah DWORD stored INT 22 termination address
0Eh DWORD stored INT 23 control-Break handler address
12h DWORD DOS 1.1+ stored INT 24 critical error handler address
16h WORD segment of parent PSP
18h 20 BYTEs DOS 2+ Job File Table, one byte per file handle, FFh = closed
2Ch WORD DOS 2+ segment of environment for process
2Eh DWORD DOS 2+ process's SS:SP on entry to last INT 21 call
32h WORD DOS 3+ number of entries in JFT (default 20)
34h DWORD DOS 3+ pointer to JFT (default PSP:0018h)
38h DWORD DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
used by SHARE in DOS 3.3
3Ch 4 BYTEs unused by DOS versions <= 5.00
40h 2 BYTEs DOS 5.0 version to return on INT 21/AH=30h
42h 14 BYTEs unused by DOS versions <= 5.00
50h 3 BYTEs DOS 2+ service request (INT 21/RETF instructions)
53h 9 BYTEs unused in DOS versions <= 5.00
5Ch 16 BYTEs first default FCB, filled in from first commandline argument
overwrites second FCB if opened
6Ch 16 BYTEs second default FCB, filled in from second commandline argument
overwrites beginning of commandline if opened
7Ch 4 BYTEs unused
80h 128 BYTEs commandline / default DTA
command tail is BYTE for length of tail, N BYTEs for the tail,
followed by a BYTE containing 0Dh
Procitas word sa adrese PSP:2Ch i to je ENV segment.
Sad u ENV segmentu nadjes 01h. Kad si to nasao preskocis jedan bajt
i odatle ti pocinje komandna linija (put,program i parametri).
Na kraju komandne linije je 00h.
čatßoy
asembler.43kriss,
˙˙ 80h 128 BYTEs commandline / default DTA
˙˙ command tail is BYTE for length of tail, N BYTEs for the tail,
˙˙ followed by a BYTE containing 0Dh
˙˙ Sad u ENV segmentu nadjes 01h. Kad si to nasao preskocis jedan
˙˙ bajt i odatle ti pocinje komandna linija (put,program i
˙˙ parametri). Na kraju komandne linije je 00h.
Malo je zaobilazno, evo onog što njemu treba pre tvoje poruke. Dakle,
pročita koliko mu je dugačka kom. linija (bajt 80h) iza naziva
programa, pa krene da je ispituje počevši od bajta 81h. Naravno, ako
prethodno nije radio nešto sa default DTA (FindFirst, FindNext), i
tako prebrisao podatak.
asembler.44mmitrovic,
::::: Malo je zaobilazno, evo onog što njemu treba pre tvoje poruke. Dakle,
::::: pročita koliko mu je dugačka kom. linija (bajt 80h) iza naziva
Između ostalog, tražio je i kako da dođe do imena programa koji se
izvršava, a to se jedino može saznati preko ENV.
asembler.45vision,
Ovaj PSP:xx je koliko ja vidim CS:xx??
asembler.46vision,
Pravim znaci svoj program - cisti asm :) i u tinny modelu - .com output, i
treba mi jos jedan segment memorije za rad, znaci jos 64 k. memorije. Kako da
potrazim od DOS-a mesto u memoriji koje je slobodno (treba mi sa bazne memorije
zbog nekompliciranja, a moze i XMS, EMS), znaci segment.
Hvala puno.
asembler.47bkaradzic,
> Pravim znaci svoj program - cisti asm :) i u tinny modelu - .com output, i
> treba mi jos jedan segment memorije za rad, znaci jos 64 k. memorije.
> Kako da potrazim od DOS-a mesto u memoriji koje je slobodno (treba mi sa
> bazne memorije zbog nekompliciranja, a moze i XMS, EMS), znaci segment.
mov ah,48h
mov bx,1000h
int 21h
;)
i posle ovoga ti se u AX nalazi taj segment odnosno kod greske.
čatßoy
asembler.49mmaric,
Slobodane da li si probao da skines neki od programa koji se bakcu tastaturom
npr sa Mr Systems BBS-a. Mislim da tamo ima nesto tako.
Ako uspes da to uradis u Mortalu II javi se ( BY VOICE !!)
uzgred zavrsio sam sve editore Ascii Hex dva fajla u jednom prozoru itd.
asembler.50mmitrovic,
::::: Ovaj PSP:xx je koliko ja vidim CS:xx??
Samo kod COM i nekih (retkih) slučajeva EXE fajla. Veoma često nije.
asembler.51pirke,
>>> Na taj nacin se pravlinim algoritmima sprecava bilo kakvo
>>> trepatanje na ekranu!
Imam problem sa 'treptanjem' na ekranu, koji u vecini slucajeva
biva resen sa proverom Vertical retrace-a ($3DA cini mi se). Kazem
u vecini slucajeva jer na nekim karticama (moja S3 805 npr.) 3DA
bude azuriran tek kada je beam na nekih 3-4cm od vrha ekrana. Ima
li neki drugi nacin za sigurno resavanje problema? Porblem vazi
za graficki 320x200x256 mod ($13).
DP...
asembler.52kdrazan,
Je l' ima ko kakvo razumljivo uputstvo za Ass. bilo u elektronskoj
(poželjnije je), bilo u papirnatoj formi ?
gpa#aH.
asembler.53jolicm,
Nortonove knjige ???
asembler.54madamovic,
> Nortonove knjige ???
Da, ima to (cini mi se oko 300KB arh.)
onda imam neki TexhHelp for DOS (i to je potrebno praktično...)
onda Ralf's Comment NG for Assembler . . .
Ne sećam se više....
asembler.55kdrazan,
<=>> Nortonove knjige ???
<=> Da, ima to (cini mi se oko 300KB arh.)
Ma imam to - no malo je nezgrapno. Je l' ima šta
jednostavnije (semantika, sintaksa, prvi koraci, itd.)
gpa#aH.,
asembler.56ognjen,
)-> Zanima me kako se vrsi unos neke recenice u
)-> string.
)->
)-> Npr.:
)->
)-> stampam 'Koliko imate godina :'
)-> ukuca dvadeset
)-> ocu da u promenljivu god bude upisano 'dvadeset'
)->
)-> Valjda ste shvatili.
)-> Izvinite ako je ovo nesto prosto,ali ja sam pocetnik.
Svi junaci nikom ponikoše? Ovo je baš i meni trebalo, ali
izgleda niko ne može ni mesec dana da se seti. :(
asembler.58kriss,
˙˙ Znam da nema veze sa programiranjem, ali ako nekog ne mrzi
˙˙ neka mi pošalje EXE2BIN ili neki sličan programčić koji EXE
˙˙ pretvara u COM. Ajde sad, sigirno ga imaju svi koji rade u
˙˙ asembleru.
Naravno da ga imamo. Zove se tlink sa opcijom /t. :)
asembler.59vitez.koja,
#=> Znam da nema veze sa programiranjem, ali ako nekog ne
#=> mrzi neka mi pošalje EXE2BIN ili neki sličan programčić
#=> koji EXE pretvara u COM. Ajde sad, sigirno ga imaju svi
#=> koji rade u asembleru.
Takav program u 99% slučajeva neće moći da pretvori EXE u COM,
jer 99% EXE fajlova ne mogu da se pretvore u COM. Sam exe2bin
postoji da bi programi specijalno kompajlirani da postanu COM
to i postali :)
Inače, zašto ti trebaju baš COM fajlovi?
asembler.60nemko,
)>- ˙˙ Znam da nema veze sa programiranjem, ali ako nekog ne mrzi
)>- ˙˙ neka mi pošalje EXE2BIN ili neki sličan programčić koji
)>- Naravno da ga imamo. Zove se tlink sa opcijom /t. :)
Coveku to netreba. Pretpostavljam da hoce vec neki gotovi exe da
konvertuje u com. Ja ima pc-dos 6.3 i on ima exe2bin. Mogu da ti
'bacim' ali nisam siguran da ce raditi bez pc-dos-a. Ostale stvari
javljaju incorrect dos version na ms-dos-u a za exe2bin nisam siguran.
Ako jes zelis da ti saljem reci.
asembler.61flash,
>> Inače, zašto ti trebaju baš COM fajlovi?
Pa, evo. Uzeo sam onaj TSRBONES kostur za TSR programe i
koristim ga kao osnovu za moj (početnički) TSR.
masm proba;
link proba;
exe2bin proba.exe proba.com
Kao EXE neće da radi, već samo kao COM, zbog strukture programa.
Hvala svima na savetima, traženi prg sam nabavio. Vikaću ako
bude nekih problema (a biće ih sigurno).
KOLE
asembler.62nikac,
>■ )-> stampam 'Koliko imate godina :'
>■ )-> ukuca dvadeset
>■ )-> ocu da u promenljivu god bude upisano 'dvadeset'
>■
>■ Svi junaci nikom ponikose? Ovo je bas i meni trebalo, ali
>■ izgleda niko ne moze ni mesec dana da se seti. :(
Evo kad nece niko :) Prosto preko int 21h, func. 0ah buffered input:
.MODEL SMALL
.DATA
msg_out db "Koliko imate godina :",13,10,'$'
msg_pom db 20 DUP(?)
msg_in EQU BYTE PTR ds:[msg_pom+1]
.CODE
mov ax, @data
mov ds, ax
mov ah,9h
mov dx, OFFSET msg_out
int 21h
mov msg_pom,20 ; maksimalna duzina ucitanog stringa, recimo 20
mov ah,0ah
mov dx, OFFSET msg_pom
int 21h
mov ax,4c00h
int 21h
END
Ovim dobijas u msg_in pascal like string (prvi byte je duzina, onda ide
string). Pamti se i <cr>, ali se on ne racuna u duzinu koja pise u prvom
byte-u. Inace ako tekst prelazi maksimalnu zadatu duzinu ostatak ce biti
odsecen.
Mozda je moglo i bolje ali i ovo radi :)
asembler.63nemko,
Imam problema sa int 21H funkcijom 48H.
mov ah,48h
mov bx,num_of_paragrafs
int 21h
jc error
....
Uvek mi javlja gresku 8-nedostatak memorije. Napominjem da
pravim com file velicine oko 100 bajtova.
asembler.64andrejt,
Subj: Re: Alloc...
Q> Imam problema sa int 21H funkcijom 48H.
S' ovim sam i ja imao problema - konkretno problem je u tome
sto mi alocira samo UMB. Jel' zna neko zasto?
asembler.65bceklic,
> Q> Imam problema sa int 21H funkcijom 48H.
>
> S' ovim sam i ja imao problema - konkretno problem je u tome
> sto mi alocira samo UMB. Jel' zna neko zasto?
Zasto (kako) uopste alocirati novu kolicinu memorije kada Dos pri
startovanju Com fajlova tom fajlu dodeli maksimalnu kolicinu slobodne
memorije? U ovom pitanju se krije odgovor na izneti problem...:)
Pozdrav!
P.S. Pre alociranja memorije treba nesto uraditi. Hint: 49H,4AH
asembler.66andrejt,
Subj: Re: Alloc...
Q> Zasto (kako) uopste alocirati novu kolicinu memorije kada Dos pri
Q> startovanju Com fajlova tom fajlu dodeli maksimalnu kolicinu slobodne
Q> memorije? U ovom pitanju se krije odgovor na izneti problem...:)
Tacno tako :) Tenks.
asembler.67ognjen,
Kako da, recimo uz pomoć DOS funkcije 42h, pomerim pointer na
kraj fajla - const? Dakle, hoću da pročitam zadnjih N bajtova
fajla proizvoljne dužine?
Ili mora da se računa prvo filesize, pa onda da se oduzme N,
pa onda da se pozicionira od početka fajla? Nije teško, ali da li
posotji kraće?
asembler.68bceklic,
> Kako da, recimo uz pomoc DOS funkcije 42h, pomerim pointer na
> kraj fajla - const? Dakle, hocu da procitam zadnjih N bajtova
> fajla proizvoljne duzine?
> Ili mora da se racuna prvo filesize, pa onda da se oduzme N,
> pa onda da se pozicionira od pocetka fajla? Nije tesko, ali da
> li posotji krace?
Upravo tako. Pointer moze da pomeras na tri nacina:
0- apsolutno od pocetka fajla +
1- relativno od trenutne pozicije +
2- relativno od kraja fajla +
Koristis treci nacin (Dx=0,Cx=0) da procitas duzinu, oduzmes od dobijene
vrednosti ono tvoje N i ponovo pomeris pointer samo od pocetka datoteke..
Otprilike ovako.. (sorry ako ima gresaka, pisem napamet...)
--------------------------------------------
N Equ 0100H ; Zadnjih sto bajtova
Code Segment Byte
Assume Cs:Code,Ds:Code,Es:Code,SS:Code
Org 0100H ; COM File
Start Label Near
; Otvoris fajl
Lea Dx,FileName
Mov Ax,3D00h ; Samo za citanje
Int 21h
Jc Exit
Mov Bx,Ax ; File Handle
; Pointer na kraj
Xor Dx,Dx
Xor Cx,Cx
Mov Ax,4202h
Int 21h
; DX:AX sadrzi duzinu fajla
; Pronadjimo novi offset
Sub Ax,N
Sbb Dx,0h
Xchg Cx,Dx
Xchg Dx,Ax
Mov Ax,4200h ; Apsolutno od pocetka fajla
Int 21h
; I to je to
; Zatvorimo fajl
Mov Ah,3eh
Int 21h
; Kraj
Exit:
Mov Ax,4c00h
Int 21h
FileName Db 'IMEFAJLA.XXX',0
Code EndS
End Start
------------------------------------------------
Pozdrav!
asembler.69mmitrovic,
::::: Kako da, recimo uz pomoć DOS funkcije 42h, pomerim pointer na
::::: kraj fajla - const? Dakle, hoću da pročitam zadnjih N bajtova
::::: fajla proizvoljne dužine?
DOS Fn 42H: Set File Pointer -- LSEEK
Expects: AH 42H
BX file handle
CX:DX distance to move file pointer: offset is (CX * 65536) + DX
AL SubFn: 0 = move pointer to start of file + CX:DX
1 = move pointer to current position + CX:DX
2 = move pointer to end of file + CX:DX
Returns AX error code if CF is set to CY
DX:AX new position of file read/write pointer (if no error)
Znači tebi treba:
AX = 4202
BX = handle
CX:DX = -(broj bajtova pre kraja) npr:
FFFF:FF9C za -100
asembler.70ognjen,
Šta može biti uzrok poruci File alocation table bad ???
NDD kaže da je sve u redu, ali program mi tu brljavi (igrao sam
se Seek, Ffst i Fnxt dos funkcijama).
asembler.71ognjen,
Zna li neko kako da konvertujem word (integer) ili byte
(shortint) u üitljiv format, tj. kako da ispiäem na ekran?
Na primer, u ah imam ffh, i hoću da na ekranu napiäem 255.
Kako?
asembler.72nemko,
)>- Na primer, u ah imam ffh, i hoću da na ekranu napiäem 255.
)>- Kako?
Recimo ovako (mozda ima gresaka jer pisem na pamet):
mov al, input {ulazni bajt}
xor ah, ah
mov bl, 10
div bl {deljenje sa 10}
add ah, 48 {ascii kod 0 je 48}
mov byte[3], ah {jedinice}
xor ah,ah
div bl
add ah, 48
mov byte[2], ah {destice}
add al, 48
mov byte[1]. al {stotine}
e sad jos jedno:
mov ah, '$'
mov byte[4], ah
mov ah, 9
mov dx, seg byte
mov ds, dx
mov dx, ofs byte
int 21h
{byte je niz bajtova}
Ovo dva puta koristi deljenje, verovatno moze mnogo brze, ali
pretpostavljam da ti brzina nije problem. Ako ti treba nesto bolje
javi se ponovo.
asembler.73ognjen,
)-> Sta moze biti uzrok poruci File alocation table bad ???
Evo sam sebi da repliciram, naäao sam bug.
Naime, pristupao sam fajlovima preko DTA (trebao mi je za
FindFirst i FindNext), koji se nalazio na kraju code segmenta, a
tu se takoöe nalazio i neki privremeni bufer. Posle F1st, bafer
je napunjen podacima koji su uniätili DTA, pa je FNext prijavio
da je FAT loä.
asembler.74drpr,
-> Na primer, u ah imam ffh, i hoću da na ekranu napišem 255.
-> Kako?
Jedini način koji sam ja znao je da dotičan word delim sa deset
ostatak od deljenja bacam na stek i posle to sve skidam i
ispisujem sa preko int 21. Bolji način ne znam, ako nije jasno
mogu da iskopam parče koda pa da bacim.
cope
asembler.75ognjen,
JMP instrunkcija pravi relativan skok, tj. od tekuće pozicije
˝128 bajtova. Ali, šta ako hoću da napravim _apsolutan_ skok,
dakle na recimo početak izvršavanja programa.
Jasno, mogao bih da potljam da merim dužinu programa u DSu
(ako je to ikako moguće) pa onda da računam koliki je to skok
itt. Ali da li postiji neko elegantno rešenje da skočim na
početak koda?
asembler.76prvul,
-> Na primer, u ah imam ffh, i hocu da na ekranu napisem 255.
>>Jedini nacin koji sam ja znao je da dotican word delim sa deset
>>ostatak od deljenja bacam na stek i posle to sve skidam i
Ako imas word, delis sa 10000 i tako dobijas prvu cifru. Zatim
delis ostatak sa 100, uradis nad kolicnikom AAM i dobijes drugu
i trecu cifru, a onda AAM nad ostatkom daje poslednje dve cifre.
Stampanje pocinjes od prve nenulte cifre.
asembler.77andrejt,
Subj: Skok.
Q> Ali da li postiji neko elegantno resenje da skocim na pocetak koda?
push 0
retn
a moze i
push cs
push 0
retf
asembler.78ognjen,
)-> Jedini način koji sam ja znao je da dotičan word delim sa
)-> deset ostatak od deljenja bacam na stek i posle to sve
Nemko je vec poslao listing. :)
BTW, kad si već pomenuo stek (on je sve to bacao u jedna niz)
da li se on (stek) može koristiti kada se radi sa .COM filovima
(model tiny)? Tada je SS=DS, pa bi push x, uništilo kod.
asembler.79nemko,
)>- BTW, kad si već pomenuo stek (on je sve to bacao u jedna niz)
)>- da li se on (stek) može koristiti kada se radi sa .COM
)>- filovima (model tiny)? Tada je SS=DS, pa bi push x, uništilo kod.
Naravno da može, kako bi inače u com fajlu realizovao poziv
potrograma? Samo da znaš, najbolje je da sam alociras mesto
za stek (recimo 400 paragrafa) i onda si miran! :)))
asembler.80bceklic,
> )>- BTW, kad si vec pomenuo stek (on je sve to bacao u jedna
> niz) )>- da li se on (stek) moze koristiti kada se radi sa .COM
> )>- filovima (model tiny)? Tada je SS=DS, pa bi push x,
> unistilo kod.
>
> Naravno da moze, kako bi inace u com fajlu realizovao poziv
> potrograma? Samo da znas, najbolje je da sam alociras mesto
> za stek (recimo 400 paragrafa) i onda si miran! :)))
Stack segment kod com fajlova je jednak CS segmentu (CS=DS=ES=SS).
Stack pointer (SP) se kod Com fajova uvek stavlja na vrh segmenta
odnosno na 0FFFEH. Na taj nacin je omogucena maksimalna dubina steka.
Pozdrav!
asembler.81nemko,
)>- Stack segment kod com fajlova je jednak CS segmentu
)>- (CS=DS=ES=SS). Stack pointer (SP) se kod Com fajova uvek
)>- stavlja na vrh segmenta odnosno na 0FFFEH. Na taj nacin je
)>- omogucena maksimalna dubina steka.
Kod com fajlova ima jedna 'glupost'. Koliki god da je (100 ili 65000
bajtova) uvek zauzme svu raspolozivu memoriju pa je korisnik mora
modifikovati ako zeli da oslobodi prostor za druge programe.
I da vas pitam kako da od QEMM-a (taj koristim) zatrazim neki blok upper
memorije da tu smestime rezidentan program i onda osnovni terminiram?
I jos ovo da pitam jel tacno. Ako smanjim memoriju com fajlu i onda
alociram neki blok memorije, tada kad prekine izvrsavanje tog programa
dealociraju se i svi blokovi meorije koje je zahtevao?!? Kako da iste
ostavim u memoriji?
asembler.82ognjen,
)-> push 0
)-> retn
Aha... A šta radi instrukcija RETN?
---
Što je lepo kad nemš literaturu - by kriss
asembler.83ognjen,
)-> Naravno da može, kako bi inače u com fajlu realizovao poziv
)-> potrograma? Samo da znaš, najbolje je da sam alociras mesto
)-> za stek (recimo 400 paragrafa) i onda si miran! :)))
Znači nije istina da kod COM file-ova SS=CS? Aha, a kako se
onda alocira stek?
asembler.84andrejt,
Subj: Re: TSR
Q> Kako da iste ostavim u memoriji?
Po opisu u Help PC-u i Ralf Brownovoj int listi int 21h (ah=31h)
ne oslobadja memoriju alociranu sa int 21h (ah=48h).
asembler.85andrejt,
Subj: Re: Skok
Q> Aha... A sta radi instrukcija RETN?
"Vraca" se tako sto popuje ip. RETF popuje ip pa cs.
PS.
DL-uj Help PC - tamo ima dosta o asm-u za 8086-486.
asembler.86bceklic,
> Kod com fajlova ima jedna 'glupost'. Koliki god da je (100 ili
> 65000 bajtova) uvek zauzme svu raspolozivu memoriju pa je
> korisnik mora modifikovati ako zeli da oslobodi prostor za
> druge programe.
Vec sam o tome koliko memorije Dos alocira pri startovanju com
programa govorio ranije. Ne vidim nikakav poseban problem u tome.
Kod Exe programa je stvar nesto drugacija. Alocira se dovoljno memorije
za Mcb, Psp i onoliko koliko je program dugacak. Zatim se toj kolicini
doda kolicina memorije specificirana u hederu fajla (kolicina memorije
u paragrafima koja treba da bude rezervisana iza ucitanog fajla)...
> I da vas pitam kako da od QEMM-a (taj koristim)
> zatrazim neki blok upper memorije da tu smestime rezidentan
> program i onda osnovni terminiram?
U sustini bitno je da nateras dos da ti alocira blok iz umb-a a ne neki
drugi. Nemam qemm pa ne mogu tacno da ti odgovorim. U principu mogao bi
da promenis dos alocation strategy (mislim da je ova funkcija
nedokumentovana) ili da na neki drugi nacin nateras dos da ti oslobodi
memoriju bas iz umb-a (alociras svu osnovnu memoriju pa onda trazis jos koji
segment ;). Btw, citav posao ja bih odradio rucno ali taj nacin ni u kom
slucaju ne mogu da preporucim...
> I jos ovo da pitam jel
> tacno. Ako smanjim memoriju com fajlu i onda alociram neki blok
> memorije, tada kad prekine izvrsavanje tog programa dealociraju
> se i svi blokovi meorije koje je zahtevao?!? Kako da iste
> ostavim u memoriji?
Tacno. Svi memorijski blokovi imaju istog vlasnika: Program koji
je vrsio manipulaciju sa memorijom. pri izlasku iz programa (4ch ili int 20)
sva memorija koju je posedovao ovaj program biva oslobodjena.
Oslobodi svu nepotrebnu memoriju sa 49h a deo koji ti je preostao
terminiraj sa int 27h ili int 21h (31h)...
asembler.87nemko,
)>- Oslobodi svu nepotrebnu memoriju sa 49h a deo koji ti je
)>- preostao terminiraj sa int 27h ili int 21h (31h)...
Hvala za odgovore, ovo 'vec' postaje interesantno. Ako imas neki primer
rucnog alociranje 'upper' memorije baci mi isti.
asembler.88bceklic,
> Znaci nije istina da kod COM file-ova SS=CS? Aha, a kako se
> onda alocira stek?
Nisi procitao moju poruku ? ;)
asembler.89kriss,
˙˙ Što je lepo kad nemš literaturu - by kriss
Pa jeste surovo, ali se tako najbolje nauči. ;))
asembler.90jolicm,
>>Pa jeste surovo, ali se tako najbolje nauči. ;))
Ne znam na šta je bila replika, ali znam da sam kupio spectrum daleko pre nego
što je izašao prvi broj računara. Tada nije bilo NIKAKVE literature, a trebalo
je nešto uraditi u asembleru. E to je bio život. Još kad sam kupio neku skriptu
od (čini mi se Kulundžića)KKKKKKKKKK, a ono sve suprotno objašnjeno. Pa onda
potraga šta je tačno, a šta nije. Otada se samo helpovima služim. Od literature
(domaće) zazirem. :)
asembler.91nemko,
)>- potraga šta je tačno, a šta nije. Otada se samo helpovima
)>- služim. Od literature (domaće) zazirem. :)
A knjige koje idu uz Borland C++, i od njih zazires?
asembler.92dr.grba,
>> )>- služim. Od literature (domaće) zazirem. :)
>>
>> A knjige koje idu uz Borland C++, i od njih zazires?
Nije ih još ni video. A kad sam mu pokazao žuti set iz Borland C/C++ 2.0,
samo je pretrnuo, pobledeo i rekao da žuri kući (((:
asembler.93nemko,
)>- Nije ih još ni video. A kad sam mu pokazao žuti set iz
)>- Borland C/C++ 2.0, samo je pretrnuo, pobledeo i rekao da žuri kući (((:
A tek plavo-zuti i zuto-zeleni komplet uz 3.0. Milina je posle raditi. ;>
asembler.94ognjen,
)-> Stack pointer (SP) se kod Com fajova uvek stavlja na vrh
)-> segmenta odnosno na 0FFFEH. Na taj nacin je omogucena
)-> maksimalna dubina steka.
A šta je bilo za onim poslednjim bajtom ffff?
Šta se dešava kada se stek napuni do koda, da li će onda da
brlja po njemu? I kako uopšte ja da odredim veličinu učitanog
koda? Word na adresi 7 (dakle u PSPu) uvek vraća istu vrednost
bez obzira koliki je COM fajl?!
asembler.95bceklic,
> )-> Stack pointer (SP) se kod Com fajova uvek stavlja na vrh
> )-> segmenta odnosno na 0FFFEH. Na taj nacin je omogucena
> )-> maksimalna dubina steka.
>
> A sta je bilo za onim poslednjim bajtom ffff?
Nista, ostaje nedirnut.. :)
> Sta se desava kada se stek napuni do koda, da li ce onda da
> brlja po njemu?
Naravno. Ako SP bude pao na nivo koji odgovara kraju programa
bice svega!
> I kako uopste ja da odredim velicinu ucitanog
> koda?
Ako dobro razumem hoces da odredis velicinu tvog programa koji
je upravo ucitan u memoriju? :)
Ako je tako postavi jedan label na kraj programa i jedan na pocetak.
Oduzmi njihov offset i to je to.. Kasnije mozes sa tom vrednoscu da
radis sta hoces...
> Word na adresi 7 (dakle u PSPu) uvek vraca istu vrednost
> bez obzira koliki je COM fajl?!
Imas previse slobodne memorije...
Zaboravi ga, ionako ti nicemu ne sluzi... :)
Pozdrav!
asembler.96mmitrovic,
::::: A šta je bilo za onim poslednjim bajtom ffff?
Nisam baš 100% siguran, ali mislim da je 8086 imao drugačiju
organizaciju steka, tj. da je SP pokazivao ne na zadnji ostavljen
podatak već na prvu sledeću slobodnu lokaciju, tj.2. PUSH bi prvo upisao
vrednost a onda smanjio SP. Primite ovu informaciju sa rezervom, pošto ja
nikada nisam single-stepovao PUSH instrukciju na 8086, pa ne znam koliko
je istine u ovome.
::::: Šta se dešava kada se stek napuni do koda, da li će onda da
::::: brlja po njemu? I kako uopšte ja da odredim veličinu učitanog
::::: koda? Word na adresi 7 (dakle u PSPu) uvek vraća istu vrednost
::::: bez obzira koliki je COM fajl?!
- Da.
- Postaviš labelu na kraj koda, i njen offset će ti dati veličinu koda.
- U pitanju je WORD na offsetu +06 u PSPu, međutim tu meni nešto smrdi,
pošto se na lokaciji +05 nalazi far jump (5 bajtova) instrukcija koja
poziva DOS dispečer, i ne znam kako dve informacije mogu zauzimati isto
mesto u isto vreme. Paradox? ;) Svejedno, ja se na to ne bi oslanjao.
asembler.97ognjen,
)-> "Vraca" se tako sto popuje ip. RETF popuje ip pa cs.
Zar nije onda lakše
MOV ip, 0
?
asembler.99andrejt,
Subj: Re: Skok
Q> Zar nije onda lakse
Q> MOV ip, 0
Nije moguce.
asembler.100jolicm,
Da li neko ima rutine za rad sa COM portovima, čisto slanje i uzimanje asci.
?????????????????????????????????????????????????????????????????????
asembler.101paki,
> Q> Zar nije onda lakse
> Q> MOV ip, 0
>
> Nije moguce.
Jedna stvar me uvek zbunjivala, zašto u asembleru postoje ovakve
"nemoguće" instrukcije (klasičan primer sa mov ax, @data; mov ds, ax)?
asembler.102pedjak,
> Jedna stvar me uvek zbunjivala, zašto u asembleru postoje ovakve
> "nemoguće" instrukcije (klasičan primer sa mov ax, čdata; mov ds,
> ax)?
Jednostavno, stvar je do same arhitekture procesora. Ne postoji
recimo naredba mov ds,nn, gde je nn broj, nego mu je moguće
dodeliti vrednost registarskim adresiranjem. Slična stvar je i sa
ostalim registrima posebne namene (segmentni registri, ip i sl.)
asembler.103mmitrovic,
::::: Jedna stvar me uvek zbunjivala, zašto u asembleru postoje ovakve
::::: "nemoguće" instrukcije (klasičan primer sa mov ax, @data; mov ds, ax)?
Zbog načina na koji se instrukcije kodiraju. Npr. AX i IP nisu ista
klasa registara pošto AX ima svoju "šifru" (000), a IP je nema, na
njega utiču druge instrukcije (ret, jmp, call, ...). Za prenos vrednosti
u i iz segmentnog registra ne postoji forma za neposredno adresiranje
(immediate), samo iz opštih registara ili iz memorije.
Tako na pr. može: mov ds, ax ili mov ds, [123h] ili mov ds, [bx+3]
ali ne može: mov ds, 1234h
Jedna zanimljivost vezana za temu (a može se koristiti za neku zaštitu)
naravno ako proradi. opcode:
8E 0E <nearptr> će učitati CS (?!) registar iz memorije, tj iz DS
segmenta sa offseta nearptr. IP registar će
pokazivati na IP+4, kao da se ništa nije desilo.
TD definitivno umire na ovome. ;) Problem je što i
sam program umre pod DOSom.
Asembler i TD ne dozvoljavaju unos ove instrukciju u mnoemičkoj formi,
TD je prepoznaje (ispiše mov cs, [nearptr]), ali pogine pri izvršavanju.
Moj Intel 386sx neće i ne želi da izvrši ovu instrukciju (iako je u
skladu sa Inteleovom specifikacijom kodiranja instrukcija i njihovim
ograničenjima), što će reći Intel nije Intel kompatibilan. ;) Kako stvari
stoje na ostalim Intelima, AMDovima i Cirixima?
asembler.104prvul,
>>> )-> Stack pointer (SP) se kod Com fajova uvek stavlja na vrh
>>> )-> segmenta odnosno na 0FFFEH. Na taj nacin je omogucena
>>> )-> maksimalna dubina steka.
>>>
>>> A sta je bilo za onim poslednjim bajtom ffff?
>>
>> Nista, ostaje nedirnut.. :)
Dva poslednja bajta u segmentu u kome radi .COM
program su uvek 0x0000. To je zgodno jer se iz .COM
programa moze izaci i sa obicnim RET - on pokupi onu
nulu sa steka, a na ofsetu nula se nalazi instrukcija za
kraj programa - INT 20h.
asembler.105bceklic,
> programa moze izaci i sa obicnim RET - on pokupi onu
> nulu sa steka, a na ofsetu nula se nalazi instrukcija za
> kraj programa - INT 20h.
Ovakav nacin izlaska ne preporucujem i treba ga izbegavati (bilo
da se radi ret na pocetak PSP-a) ili direktan skok na int 20h.
21,4ch je resenje koje treba primenjivati uvek.
Pozdrav!
asembler.106bceklic,
> kodiranja instrukcija i njihovim ogranicenjima), sto ce reci
> Intel nije Intel kompatibilan. ;) Kako stvari stoje na ostalim
> Intelima, AMDovima i Cirixima?
Mislim da bi trebalo po svaku cenu ibegavati upotrebu nestandardnih
instrukcija jer cete se vrlo brzo naci u nezgodnoj situacija kada program
odbije saradnju na tamo 'nekoj' platformi. :(
Pozdrav!
asembler.107mmitrovic,
::::: Mislim da bi trebalo po svaku cenu ibegavati upotrebu nestandardnih
::::: instrukcija jer cete se vrlo brzo naci u nezgodnoj situacija kada
::::: program odbije saradnju na tamo 'nekoj' platformi. :(
Ko kaže da ćemo je koristiti, ko zna da li uopšte igde radi. To nije
bila poenta. Poenta je da su encode tablice koje je Intel ZVANIžNO
objavio u neskladu sa stvarnim stanjem stvari. Dotična instrukcija
postoji u tim tablicama i trebalo (čuj, morala) je da funkcioniše. U
tablici nigde ne piše da se CS ne sme učitavati direktno memorijski.
asembler.108bceklic,
> ::::: Mislim da bi trebalo po svaku cenu ibegavati upotrebu
> nestandardnih ::::: instrukcija jer cete se vrlo brzo naci u
> nezgodnoj situacija kada ::::: program odbije saradnju na tamo
> 'nekoj' platformi. :(
>
> Ko kaze da cemo je koristiti, ko zna da li uopste igde radi. To
> nije bila poenta. Poenta je da su encode tablice koje je Intel
Nisam ni rekao da cete je koristiti. Samo sam dao svoju preporuku.
Btw, poruka je bila upucena vise drugima nego vama...
asembler.109ognjen,
)-> Ovakav nacin izlaska ne preporucujem i treba ga izbegavati
)-> (bilo da se radi ret na pocetak PSP-a) ili direktan skok na
)-> int 20h. 21,4ch je resenje koje treba primenjivati uvek.
Zašto?
asembler.110bceklic,
> )-> Ovakav nacin izlaska ne preporucujem i treba ga izbegavati
> )-> (bilo da se radi ret na pocetak PSP-a) ili direktan skok na
> )-> int 20h. 21,4ch je resenje koje treba primenjivati uvek.
>
> Zasto?
Citav problem se svodi u sustini na pitanje kompatibilnosti. Bilo
da se radi o kompatibilnosti sa aktuelnom konfiguracijom ili o
kompatibilnosti sa drugim programima koji su na neki nacin vezani za
njega. U drugom slucaju postoji vise mogucnosti. Ja licno sam imao
problema sa nekim programima koji su koristili ovaj nacin izlaska
(koverzija com programa, kontrola rada programa itd.) pa otud i moj
komentar. Uostalom cini mi se da svi info programi preporucuju
izlaz sa 21,4cH. Sigurno sa razlogom.
Pozdrav!
asembler.111saricl,
Pretpostavljam da bi neko iz ove Conf mogao da mi pomogne.
Napravio sam karticu za PC i treba mi program koji će da opslužuje
interapt te kartice. Recimo IRQ 12.
Zanima me dali zahtev za interapt treba da bude setovan svo vreme dok
računar ne obradi interapt ili je dovoljno da se postavi sa jednim
kratkotrajnim inpulsom. Takođe na koji način računar šalje
potvrdu da je opslužio interapt.
asembler.112saricl,
Hteo bi da napišem jednu prekidnu rutinu pa me zanima kako
to treba da funkcioniše, i dali neko može da mi okači ovde
jednu sa kraćim objašnjenjem, čisto radi primera.
asembler.113speedy,
Jel neko ima ICESoft Debugger za DOS?
^^^
Speedy
asembler.114msavkovic,
┌┌┌ Jel neko ima ICESoft Debugger za DOS?
┌┌┌ ^^^
To i ja vec duze trazim. :)
Ajte ako ima neko...
asembler.115kdrazan,
Zna li iko šta ne valja sljedećem primjeru ;(, odnosno
vjerovatno je primjer dobar samo ja nisam sa dobrim svičevima
preveo i linkovao. Išao sam čisti TASM fajl i TLINK fajl. Kao što
vidite - primjer se dobija u paketu sa TASM-om... (a jest' i primjer ;)...
(Da se odmah razumijemo - asembler poznajem koliko i Japanski, no obzirom
da za ovaj drugi nemam baš nekog afiniteta, asembler bih ipak htio naučiti,
i evo "fino" sam kren'o - i dobro prošao :))).
'Ajde, ne bih vas zamarao oko ovoga, nego desi se jedna
žestoka svinjarija:
NE PREVODITE OVAJ FAJL NI ZA čIVU GLAVU AKO NE ZNATE KAKO!
Ja - očigledno nisam znao. Inače kako objasniti da mi je napravio
pravi džumbus u CMOS-u !!! Razbuc'o mi je čak i default vrijednosti,
manijak jedan - sav sam se preznojio. No dobro, oladio sam se i sredio
stvar, sad sve šljaka kako Bog zapovijeda, no... pazite se... ja nisam :(
Dakle evo srećnog fajla, koji je mene baš "usrećio" :
; Turbo Assembler example. Copyright (c) 1993 By Borland International, Inc.
; ASMPSCL.ASM
; From the Turbo Assembler User's Guide Ch. 18
; Called as: TEST_PROC(i, j, k);
;
i equ 8 ;leftmost parameter
j equ 6
k equ 4 ;rightmost parameter
.MODEL small
.CODE
PUBLIC TEST_PROC
TEST_PROC PROC
push bp
mov bp,sp
mov ax,Šbp+iĆ ;get i
add ax,Šbp+jĆ ;add j to i
sub ax,Šbp+kĆ ;subtract k from the sum
pop bp
ret 6 ;return, discarding 6 parameter bytes
TEST_PROC ENDP
END
gpa#aH.
asembler.116bkaradzic,
Da li neko ima SoftICE debugger za DOS(!) ???
asembler.117bceklic,
> Da li neko ima SoftICE debugger za DOS(!) ???
Ovo vec postaje zamorno.. :)
Svaki drugi dan osvane po jedna poruka u kojoj se trazi Soft Ice.
Elem, u ovoj konferenciji je neko vec ostavio verziju za Win. Verziju
za Dos izgleda da nema niko ili je ima a ne zeli da je podeli sa
drugima ;)
U svakom slucaju hteo bih da pitam sta to svi ocekuju od SI debugera
kad je toliko trazen?
asembler.118msavkovic,
┌┌┌ Da li neko ima SoftICE debugger za DOS(!) ???
Da, da li NEKO ima softice debbuger za D O S !!! ĘĘĘ
asembler.119mdimitrijevic,
Od Soft Ice-a ocekujemo mnogo bolje debagovanje. Mnogo je bolji od drugih
programa i moze da izbegne mnoge nacine za blokiranje debagera i nacine zastite
programa od pregleda.
Sve u svemu bolji je od drugih.
Pozdrav,
Marjan
asembler.120deimos,
Vazno mi je i hitno:
Ako je u realnom modu adresa video memorije A000:0000 koja je
onda to adresa u 386+PM FLAT modelu ? (nemojte mi reci da je
000A0000h).
Hvala unapred, Vlada.
asembler.121bceklic,
> Od Soft Ice-a ocekujemo mnogo bolje debagovanje. Mnogo je bolji
> od drugih programa i moze da izbegne mnoge nacine za blokiranje
> debagera i nacine zastite programa od pregleda.
> Sve u svemu bolji je od drugih.
Nisam bez razloga postavio moje pitanje iako su mi vec bile
poznate karakteristike SI-a. ;)
Cini mi se da ovde postoji zabluda da ce neki super-super
debuger resiti sve moguce probleme na koje se nailazi sto naravno
nema veze sa istinom. Tome cini mi se doprinose nerealne ocene i
ocekivanja iz raznih casopisa (obicno se SI spominje kao 'super
extra' debuger mada ga niko nije ni video 'ali je cuo o njemu'.
Nedavno se ovde pojavila verzija za Win koju sam samo pogledao i
...ostavio.
Ako neko ne moze da resi problem sa TD-om (koji inace koristim)
on nece moci da ga analizira ni u SI-u. TD-a inace nije u opste
lako oboriti sto je jos jedna od velikih zabluda.
Uzgred, imao sam prilike da se sretnem sa oko 50 raznih vrsta
zastite i nije bilo ni jedne sa kojom se TD nije mogao izboriti.
Dakle, jos jedan plus Borlandu. :)
Pozdrav!
P.S. Znam da postoje i bolji debageri od Si-a i mislim da je krajnje
vreme da neko pocne potragu za njima...
asembler.122msavkovic,
┌┌┌ Ako neko ne moze da resi problem sa TD-om (koji inace
┌┌┌ koristim) on nece moci da ga analizira ni u SI-u. TD-a
┌┌┌ inace nije u opste lako oboriti sto je jos jedna od velikih
┌┌┌ zabluda.
E?
A ti si oba probao pa znas?
P.S. Cuh da SI ima save opciju ;)
asembler.123saricl,
dali neko može da mi kaže na koji način se vrši učitavanje
16 bitnog podatka sa magistrale. Kad učitavam sa IN AX,DX
pri čemu je u DX=278h učitava mi se regularno samo donji bajt.
Inače uređaj na toj adresi JESTE šesnaestobitn, i postavlja
odgovarajućii bajt na magistralu.
Dali je možda potrebno negde prvo setovati šesnaestobiiitni ulaz,
ili nešto slično? Dali se učitava viši bajt na istoj adresi(parna
neparna).
asembler.124bkaradzic,
; > Da li neko ima SoftICE debugger za DOS(!) ???
;
; Ovo vec postaje zamorno.. :)
; Svaki drugi dan osvane po jedna poruka u kojoj se trazi Soft Ice.
; Elem, u ovoj konferenciji je neko vec ostavio verziju za Win. Verziju
; za Dos izgleda da nema niko ili je ima a ne zeli da je podeli sa
; drugima ;)
;
; U svakom slucaju hteo bih da pitam sta to svi ocekuju od SI debugera
; kad je toliko trazen?
Meni treba zato sto radi u 32bit protected modu!
asembler.125bkaradzic,
;;; Ako je u realnom modu adresa video memorije A000:0000 koja je
;;; onda to adresa u 386+PM FLAT modelu ? (nemojte mi reci da je
;;; 000A0000h).
:) jeste, ali VideoMemory = 000A0000h - _code32 :)
asembler.126bkaradzic,
;;; Ako neko ne moze da resi problem sa TD-om (koji inace koristim)
;;; on nece moci da ga analizira ni u SI-u. TD-a inace nije u opste
;;; lako oboriti sto je jos jedna od velikih zabluda.
Problem koji je neresiv za TD je 32bit protected mode!!! :(
;;; Uzgred, imao sam prilike da se sretnem sa oko 50 raznih vrsta
;;; zastite i nije bilo ni jedne sa kojom se TD nije mogao izboriti.
"Couldn`t enter 32bit protected mode!!!"
Ova "zastita" je neresiva sa TD, a za SoftICE je to sasvim normalno.
;;; Dakle, jos jedan plus Borlandu. :)
Ipak, jedan veeeeliki minus Borlandu (samo za TD;)
asembler.127bceklic,
> ┌┌┌ Ako neko ne moze da resi problem sa TD-om (koji inace
> ┌┌┌ koristim) on nece moci da ga analizira ni u SI-u. TD-a
> E?
> A ti si oba probao pa znas?
Opet kazem da debuger ne moze sam da obavi posao i da isti posao
moze da uradi i TD (mozda na tezi nacin ali ipak moze). Dakle, ako
i tebi kojim slucajem nije potreban bas 32Bit PM dibager ;) problem se
moze resiti i obicnim TD-om...
Pozdrav!
asembler.128bceklic,
> "Couldn`t enter 32bit protected mode!!!"
> Ova "zastita" je neresiva sa TD, a za SoftICE je to sasvim
> normalno.
Ja koristim 3.2 verziju TD-a. Nisam informisan o tome da li su
nove verzija TD-a resile ovaj problem? U svakom slucaju siguran sam
da ce Borland resiti ovaj problem (ako vec nije :)
Pozdrav!
P.S. Da li u TASM-u 4.0 postoji TD32 ?
Sta se to desava ovih dana kada svi debaguju 32Bit PM aplikacije? ;)
asembler.129flash,
Pozdrav,
Ko bi rek'o da je pisanje i najjednostavnijeg TSR programa tako
teško. Uz ovu poruku je source koji pravi probleme.
Program bi trebalo da u pozadini prima podatke sa COM porta i
povremeno ih snima u fajl. E sad, ja sam sve to zbudžio i to
radi, samo što ima par bagova:
1. primer: program je instaliran na COM2, na COM1 je miš.
Program normalno radi sve dok ne počne da se klikće po
mišu (testirano u svim Nortonovim programima)
Računar se zaglavi.
Ovo mi nije jasno jer COM1 i COM2 imaju različiti IRQ tako
da to ne bi trebalo da ima veze.
2. primer: program prima podatke sa COM porta i kada se prijemni
bafer napuni, onda ga snima na disk u fajl C:\007.LOG
Sve radi OK bez obzira koliko je disk aktivan. Radi normalno
i 'ispod' NDD-a i SPEEDISK-a. Problem nastaje ukoliko u
momentu startovanja nekog programa, TSR hoće da upiše bafer.
Program koji je počeo da se startuje, ili se zaglavi, ili
izbaci poruku tipa
'error est0001: Ilegall format in loadable file.'
(Int 13h je uredno preuzet, kao što se vidi iz source-a)
Ukoliko se neko razume u materiju, molio bih ga da pomogne u
rešavanju ovih par problemčića.
Predrag
P.S. Zbog lakšeg testiranja, ubacio sam nekoliko DEBUG konstanti
koje se nalaze na početku listinga. Sada je podešeno da
program upisuje test bafer svakih 5-6 sekundi (čuje se beep)
bug-tsr.zipasembler.130maksa,
>> Problem koji je neresiv za TD je 32bit protected mode!!! :(
bc4, readme
Debuggers
---------
Borland's Turbo Debugger supports both 16-bit DPMI debugging (TD.EXE) and
32-bit DPMI debugging (TD32.EXE). DPMI support services are provided by
several files delivered with PowerPack for DOS, and are used by both
debuggers.
asembler.131mdimitrijevic,
Glavna potreba je 32-bitni PM i to je sve. Ukoliko nabavim kompletan BC 4.x
onda cu da pogledam da li je to reseno u TD-u. TD je vrlo dobar i koristim ga
uvek osim kod PM programa gde se blokira.
Pozdrav,
Marjan
asembler.132evlad,
<> P.S. Da li u TASM-u 4.0 postoji TD32 ?
Directory of C:\TASM\BIN
32RTM EXE 141,566 12-14-93 4:00a
BRC EXE 38,208 12-14-93 4:00a
BRC32 EXE 50,720 12-14-93 4:00a
BRCC EXE 298,576 12-14-93 4:00a
BRCC32 EXE 310,304 12-14-93 4:00a
IMPDEF EXE 77,824 12-14-93 4:00a
IMPLIB EXE 94,208 12-14-93 4:00a
MAKE EXE 139,264 12-14-93 4:00a
MAKER EXE 60,884 12-14-93 4:00a
MAKESWAP EXE 45,910 12-14-93 4:00a
OBJXREF EXE 86,016 12-14-93 4:00a
RLINK EXE 117,149 12-14-93 4:00a
RTM EXE 109,022 12-14-93 4:00a
TDMEM EXE 16,752 12-14-93 4:00a
TDUMP EXE 184,320 12-14-93 4:00a
TLIB EXE 57,344 12-14-93 4:00a
WINSTUB EXE 578 12-14-93 4:00a
TDWINI EXE 58,880 12-14-93 4:00a
TD32 EXE 643,072 12-14-93 4:00a
TD32INST EXE 192,512 12-14-93 4:00a
TD EXE 708,648 12-14-93 4:00a
TDINST EXE 134,836 12-14-93 4:00a
TDREMOTE EXE 23,586 12-14-93 4:00a
TDRF EXE 21,380 12-14-93 4:00a
TDW EXE 660,000 12-14-93 4:00a
TDWINST EXE 133,238 12-14-93 4:00a
WREMOTE EXE 41,984 12-14-93 4:00a
WRSETUP EXE 12,800 12-14-93 4:00a
H2ASH EXE 275,968 12-14-93 4:00a
TASM EXE 134,884 12-14-93 4:00a
TASMX EXE 148,378 12-14-93 4:00a
TDSTRIP EXE 15,112 12-14-93 4:00a
TLINK EXE 150,162 12-14-93 4:00a
H2ASH32 EXE 299,008 12-14-93 4:00a
TASM32 EXE 163,840 12-14-93 4:00a
TDSTRP32 EXE 49,152 12-14-93 4:00a
TLINK32 EXE 290,816 12-14-93 4:00a
GROUPS EXE 8,096 12-14-93 4:00a
kao što vidiš ima ...
asembler.133bceklic,
> ---------
> Borland's Turbo Debugger supports both 16-bit DPMI debugging
> (TD.EXE) and 32-bit DPMI debugging (TD32.EXE). DPMI support
> services are provided by several files delivered with PowerPack
> for DOS, and are used by both debuggers.
HA! :)
Bio sam siguran da su taj problem u Borlandu odavno resili jer
je 4.0 verzija jos iz '93 godine...
asembler.134bceklic,
> Ko bi rek'o da je pisanje i najjednostavnijeg TSR programa tako
> tesko. Uz ovu poruku je source koji pravi probleme.
> Program bi trebalo da u pozadini prima podatke sa COM porta i
> povremeno ih snima u fajl. E sad, ja sam sve to zbudzio i to
> radi, samo sto ima par bagova:
> 'error est0001: Ilegall format in loadable file.'
> (Int 13h je uredno preuzet, kao sto se vidi iz source-a)
Najcesci problem kod ovakvih TSR programa je sam pristup disku
(I/O). Pretpostavljam da koristis Int 21 (3C i 40) za upis u fajl.
Da bi savladao ove probleme detaljno prouci infomacije o sledecim
interaptima (na zalost svi su nedokumentovani i njihov izlaz zavisi
od verzije dos-a) Int 28H, Int 21,34, Int 21,5D.
Sve se svodi na to da ne smes da izvodis I/O pozive dok je
setovan Dos Critical flag (gore pomenuti interapti ce ti pomoci da
ga lociras).
Da li znas ko je izvor pomenute poruke o greski?
Uzgred, source programa nisam jos uvek skinuo pa ne mogu
jos uvek da it kazem nista konkretno.
asembler.135msavkovic,
┌┌┌ <> P.S. Da li u TASM-u 4.0 postoji TD32 ?
┌┌┌
┌┌┌ TDWINI EXE 58,880 12-14-93 4:00a
┌┌┌ TD32 EXE 643,072 12-14-93 4:00a
┌┌┌ TD32INST EXE 192,512 12-14-93 4:00a
Ovo je za glupi windows, video bi to i sam da si probao da
ga startujes
┌┌┌ kao sto vidis ima ...
kao sto znam nema ...
asembler.136deimos,
PP>> :) jeste, ali VideoMemory = 000A0000h - _code32 :)
E, u cemu onda gresim? Ja sam napravio cisto radi proveresinonim u V86 modu
i tu je bilo ES: 0000h, DI: A0000h, i onda jedno rep movsw, a sada kada je
ES:000h i EDI:000A0000h jednostavno - ne radi. HELP!
Vlada.
asembler.137miccko,
s-ice imam vise od godinu dana. Sto nisi pitao pravog coveka.
Da si ga koristio znao bi da nema svrhe stavljati INT 3 u program.
Ako me lepo zamolis poslacu ti verziju 2.5
asembler.138maksa,
>> kao sto znam nema ...
Ne znaš.
asembler.139maksa,
>> E, u cemu onda gresim? Ja sam napravio cisto radi
>> provere sinonim u V86 modu i tu je bilo ES: 0000h, DI: A0000h,
>> i onda jedno rep movsw, a sada kada je ES:000h i EDI:000A0000h
>> jednostavno - ne radi. HELP!
Ono što ti je čovek napisao važi za kombinaciju asm + pmode extender.
Određivanje 32-bitne adrese u opštem slučaju je komplikovanije od
prostog spajanja bitova, i zavisiod OS-a, extendera, prevodioca ...
asembler.140bceklic,
> s-ice imam vise od godinu dana. Sto nisi pitao pravog coveka.
Pa sto ne cutis? :)
> Da si ga koristio znao bi da nema svrhe stavljati INT 3 u
> program.
Kao sto vec rekoh upoznat sam sa nekim od mogucnosti SI-a.
> Ako me lepo zamolis poslacu ti verziju 2.5
Ako si raspolozen da ga podelis sa drugima bilo bi lepo da
ga posaljes na PRO-BA.
Pozdrav!
asembler.141deimos,
RE: FLAT Model
Na osnovu Pmode/DoS4GW sam i uzeo tu adresu u obzir, ali ako znas molim te
mi objasni kako da odredim lepo adresu vÚ]ideo memorije. Inace, OS je DOS.
Vlada.
ps. Cackao sam po onoj intelovoj dokumentaciji za 386 procesore, ali nisam
uspeo da ukacim.
asembler.142maksa,
>> Na osnovu Pmode/DoS4GW sam i uzeo tu adresu u obzir, ali ako
Ovo baš ne razumem.
Pmode je extender za asm. koji je neko ovde okačio pre nekog
vremena, i u njemu se 32-bitna adresa određuje prema već navedenoj
formuli adresa - _pmode32. Za DOS4GW ekstender ne znam kako bi se
to tačno izvelo (nikad nisam imao dodir sa kompajlerom koji ga
podržava). U kombinaciji BC4 + DOS Power Pack o tome brine 32rtm.exe.
>> mi objasni kako da odredim lepo adresu video memorije.
Joj bre, da znam, rekao bih ti još pre tri poruke. ;)) Na pitanje 'gde
je video memorija' ne postoji jednoznačan odgovor u stilu 'tu i tu'. U
opštem slučaju to se radi preko DPMI servisa (int 2Fh, valjda), a koja
tačno f-ja ne znam, nemam DPMI specifikaciju. Uz ovu poruku ti besim neku
DPMI biblioteku za C koja možda može da ti pomogne.
>> ps. Cackao sam po onoj intelovoj dokumentaciji za 386 procesore, ali
>> nisam uspeo da ukacim.
Ako se budeš bavio protected modom, ovo ćeš morati da izbistriš.
dpmi_lib.zipasembler.143deimos,
ű>> >> Na osnovu Pmode/DoS4GW sam i uzeo tu adresu u obzir, ali ako
>> Ovo bas ne razumem.
I u DOS4GW i u Pmode-u video memorija je na 0A0000h. Inace kompajler
koji radi sa DOS4GW je Watcom-ov C kompajler.
>> opstem slucaju to se radi preko DPMI servisa (int 2Fh, valjda), a koja
Hvala na fajlu prikacenim uz poruku, ali sam sve to vec izbistrio
sa DPMI-om, a sada me interesuje nesto tipa 'kako napraviti sopstveni
ekstender sa ogranicenim mogucnostima u zavisnosti od potrebe'. Ipak, hvala.
Pozdrav, Vlada.
asembler.144saricl,
Postoji li na|in da se od EXE,COM,SYS fajla napravi ASM fajl?
Imam TASM V4.00 i nisam uspeo da provalim kako se to radi.
asembler.145saricl,
dali neko zna za[to mi IN AX,DX u`itava regularno samo donji bajt
sa magistrale. Napominjem da uređaj koji treba da prosledi reč to i
čini. Treba li negde nešto da setujem ili podesim da bi mi bio dozvoljen
pristup
šesnaestobitnom ulazu.
asembler.146deimos,
RE: EXE,COM,SYS -> .ASM
Probaj sa Sourcerom (koji ja koristim). Ako ga nema na sezamu ili ne mozes
nigde da ga nadjes poslacu ja SR 5.0
Vlada.
asembler.147deimos,
RE: IN AX,DX
Stvar je u tome sto mozes da pokupis samo jedan bajt za redom uz pomoc
IN-a. Ako zelis da uzmes word sa porta, koristi IN AL,DX + IN AH,DX.
Vlada.
asembler.148flash,
> Da li znas ko je izvor pomenute poruke o greski?
Najverovatnije TSR prekine program koji se izvršava foreground,
jer se upis na disk i vrši preko DOS funkcija 3dh,40h.
Evo uprošćene šeme programa:
; INTERRUPT PROCEDURES
newint0b proc far ; 0B, IRQ3, COM2
Ako je prispeo znak na port, upisati ga u bafer
ReceiveBuff[index]:=znak
inc index
end
newint0b endp
newint8 proc far
pushf
call oldint8
Ako je prijemni bafer (ReceiveBuff) pun,
zahtev za upis na disk
popflag:=POPTIME
end
Ako je postavljen zahtev za upis bafera
call check_system
If system OK to popup
call main
end
end
iret
newint8 endp
;------------------
newint9 proc far
pushf
call oldint9
if hotkey pressed
; Postavlja se zahtev za snimanje bafera
popflag:=POPTIME
endif
iret
newint9 endp
;------------------
newint10 proc far
inc cs:int10_active ; Indikator da je interrupt
pushf ; u toku.
call cs:[oldint10]
dec cs:int10_active
iret
newint10 endp
;------------------
newint13 proc far
pushf
inc cs:int13_active ; Indikator da je interrupt
call cs:[oldint13] ; u toku.
pushf
dec cs:int13_active
popf
ret 2
newint13 endp
;------------------
newint28 proc far
bla,bla...
newint28 endp
;------------------
OSTALE RUTINE
check_system proc near
if not int10_active,
and if not int13_active, and
and if not DOS CriticalErrorFlag, and
and if not InDOS flag
-može upis na disk
end
check_system endp
Kao što vidiš proverava se i int13h i InDOS flag i CriticalError
flag, međutim stvar ne radi.
asembler.149miccko,
> s-ice imam vise od godinu dana. Sto nisi pitao pravog coveka.
Pa sto ne cutis? :)
> Da si ga koristio znao bi da nema svrhe stavljati INT 3 u
> program.
Kao sto vec rekoh upoznat sam sa nekim od mogucnosti SI-a.
> Ako me lepo zamolis poslacu ti verziju 2.5
Ako si raspolozen da ga podelis sa drugima bilo bi lepo da
ga posaljes na PRO-BA.
Pozdrav!
Evo probacu da ga zakacim za ovu poruku mada nisi zasluzio
da ti posaljem ali kad sam video da stavljas INT 3 i da koristis
TD 3.1 onda mora da si mnogo ocajan.
U svakom slucaju program nije nesto ekstra ali je jedan od
boljih (na primer ne mozes da razbijes moj program njime).
Za 32-bitni rezim sam morao da razvijem svoj debager.
Ti pogledaj pa ako ti se svidi...
Dejan
HHHHHHHHHHHHHHHHHHH
s-ice.arjasembler.150deimos,
RE: PM FLAT Modela Adressing
>> >> mi objasni kako da odredim lepo adresu video memorije.
>>
>> Joj bre, da znam, rekao bih ti jos pre tri poruke. ;)) Na pitanje 'gde
>> je video memorija' ne postoji jednoznacan odgovor u stilu 'tu i tu'. U
>> opstem slucaju to se radi preko DPMI servisa (int 2Fh, valjda), a koja
E, pa evo ovako. Uz malo cackanja i raznih drugih stvari, dosao
sam do sledeceg zakljucka.
U Realnom modu idu adrese 0000:0000-0000:FFFF, pa 1000:0000-1000:FFFF
i tako dalje. Posto se relativna vrednost segmenta poveca za FFFFh svaki put
kad ofset predje 64K, u FLAT PM modelu segment se predstavlja kao '1' umesto
'1000'. Toliko o opste poznatoj teoriji.
Kada se sartuje program koji koristi 386+ instrukcije u PM i koristi
linearnu memoriju, on se ucita u prvi slobodan blok memorije koju on
tretira kao adresu nula, tj 0000:0000 u RM. Ako znamo da je adresa video
memorije, u konkretnom primeru, u RM na A000:0000, pretvoricemo je u adresu
kako se ona gleda u linearnom (FLAT) modelu, tj. kao A0000h. Sve sto nam
preostaje je da od nama potrebne adrese (A0000h) oduzmemo pocetnu adresu
gde se program ucitao i to je to.
Na primemr:
Code_Seg SEGMENT PUBLIC 'CODE' USE32
ASSUME CS:Code_Seg
...
vmem_pm equ 0A0000h
....
mov edi,vmem_pm
sub edi,Code_Seg
U EDI registru ostaje pocetna adresa video memorije.
Problem:
Gledajuci Intel-ovu dokumentaciju o 386 procesorima, video sam
da se i za flat model kaze da ako hocemo da prenesemo odredjenu kolicinu
podataka sa movsb,movsw ili movsd, prenos se odvija sa DS:ESI na ES:EDI.
E tu nastaje problem:
Sta se podrazumeva pod segmentnim vrednostima u ES i DS ako se radi
o linearnoj memoriji ??? (ako je segment 0 - ne radi, ako je segment
'seg XXX' opet ne radi, pa cak i ako se uopste ne dira ES i DS - ne radi) ???
Pozdrav, Vlada.
asembler.151bceklic,
> Evo probacu da ga zakacim za ovu poruku mada nisi zasluzio
> da ti posaljem ali kad sam video da stavljas INT 3 i da
> koristis TD 3.1 onda mora da si mnogo ocajan.
Ti imas bas lepe stavove o zivotu a ?
Sve ima svoju funkcija pa cak i onda kada to tebi nista ne znaci...
To sto koristim TD (3.2 ili 4.0 svejedno) a ne neki drugi
debager mislim da nema veze sa tim sto sam ocajan. Ocajan sam
zbog drugih stvari. ;)
> U svakom slucaju program nije nesto ekstra ali je jedan od
> boljih (na primer ne mozes da razbijes moj program njime).
> Za 32-bitni rezim sam morao da razvijem svoj debager.
Njegov UI me nikad nije privlacio i zato sam se uvek
odlucivao za Borlandove debagere koji imaju najbolji UI po cenu
nesto tezeg rada.
> Dejan
Blagoje
asembler.152maksa,
>> Sta se podrazumeva pod segmentnim vrednostima u ES i DS ako se
>> radi o linearnoj memoriji ???
Podrazumeva se verovatno selector, odn. index na tabelu deskriptora.
Nju (tabelu) formira os/extender/kompajler/linker ...
asembler.153saricl,
Zbog čega mi se kod disasembliranja javlja kod koji nije moguće disasemblirati?
asembler.154saricl,
!!! IN-a. Ako zelis da uzmes word sa porta, koristi IN AL,DX + IN AH,DX.
Pa javlja mi Invalid combination of op code and operands kad pokuša
da prevede IN AH,DX čini mi se da je nešto drugo u pitanju.
asembler.155deimos,
>> javlja mi Invalid combination of op code and operands kad pokusa da prevede
>> IN AH,DX
Sorry, bukvalno si me shvatio, mislio sam sta bi u principu trebalo da se
dobije. Evo ispravljam svoju gresku. Sledi deo koda koji ce sigurno da radi:
...
IN AL,DX
XCHG AL,AH
IN AL,DX
XCHG AL,AH
...
Posle ovoga bi trebao u AX da imas WORD uzet sa porta ( ako je za ovaj
predvidjeno da se uzimaju WORD velicine ). Inace kad uzimas vrednost sa porta
mozes samo da je uzmes u AL.
Porzdrav, Vlada.
asembler.156saricl,
!!! IN AL,DX <-ovde mi učitava niži bajt
!!! XCHG AL,AH <-ovde mi menja sadržaj AH i AL (u AH dolazi vrednost nižeg
bajta)
!!! IN AL,DX <-ovde mi opet učitava vrednost nižeg bajta u AL
!!! XCHG AL,AH <-ovde mi opet menja sadržaj AH i AL
Po logici trebalo bi da imam istu vrednost i u AL, i u AH i to vrednost
donjeg bajta sa magistrale, zar ne?
Ono što ja imam to je FFFF bez obzira na stanje magistrale.
Inače učitavanje vršim sa adrese 278h i kad se prozove ta adresa podaci su
valjani D0-D15. (osim adrese naravno potrebno je i da bude AEN=0 IOR=0)
asembler.157deimos,
** !!! IN AL,DX <-ovde mi ucitava nizi bajt
** !!! XCHG AL,AH <-ovde mi menja sadrzaj AH i AL (u AH dolazi vrednost
** nizeg bajta)
** !!! IN AL,DX <-ovde mi opet ucitava vrednost nizeg bajta u AL
^^^^^
** !!! XCHG AL,AH <-ovde mi opet menja sadrzaj AH i AL
** Po logici trebalo bi da imam istu vrednost i u AL, i u AH i to vrednost
** donjeg bajta sa magistrale, zar ne?
Ne, ne , pogresno si protumacio...
Kao prvo, ne znaci da ako uzimas vrednost sa porta (ili neceg
drugog) u AL da je to obavezno nizi bajt. Ako, recimo, port treba da vrati
double-word (4 bajta), ti ces morati cetiri puta da uzmes vrednost sa
porta bas i samo preko AL. Evo sta konkretno radi ovo gore:
IN AL,DX <- Uzima prvi bajt sa porta
XCHG AL,AH <- Zamenjuje sadrzaj AL i AH i obrnuto, tako da sada
u AL imas vrednost iz AH, a u AH imas vrednost iz
AL (kao da si stavio AL na stek)
IN AL,DX <- Uzima drugi bajt sa porta. Dakle, sada u AL imas
visi bajt, a u AH nizi !!
XCHG AL,AH <- Zamenjuje AL (koji trenutno sadrzi visi bajt) sa
AH (koji sadrzi nizi bajt uzet sa porta). Posle ovoga
bi trebalo da u AL imas vrednost bajta koju si uzeo
prvom IN instrukcijom, a u AH bajt koji si uzeo drugom
IN instrukcijom.
Ako ti ovo nije jasno evo ti ekvivalenta koji ce da radi isto to,
samo sto je malo duzi i koristi i BX registar:
...
PUSH BX <- Sacuvamo BX
IN AL,DX <- Uzmemo nizi bajt sa porta
MOV BL,AL <- Stavimo ga u nizi bajt BX registra
IN AL,DX <- Uzmemo visi bajt sa porta
MOV BH,AL <- Stavimo ga u visi bajt BX registra, tako da sada
ceo BX registar sadrzi i nizu i visu vrednost
uzetu sa porta u pravilnom rasporedu.
MOV AX,BX <- Kopiramo vrednost BX u AX, kako bi mogli da
POP BX <- povratimo vrednost BX ako ga dalje trebamo
...
Ostaje ti u AX WORD uzet sa porta, kao i u predhodnom slucaju. Ako
ti ovo ne radi, onda definitivno nije do ovoga dela programa greska, sto
znaci da gresis u nekoj od sledecih stvari:
1. Port nije predvidjen da vraca WORD vrednosti (pa ti oba puta
vrati samo nize vrednosti, koje ne moraju da budu iste).
2. Port, tj. IRQ ili nesto drugo sto je u vezi sa portom nije
ispravno p˛ibrdřljeno da bi port vracao (ispravne) vrednosti.
Pozdrav,
Vlada.
asembler.158saricl,
!!! PUSH BX <- Sacuvamo BX
>>>>>>!!! IN AL,DX <- Uzmemo nizi bajt sa porta
!!! MOV BL,AL <- Stavimo ga u nizi bajt BX registra
>>>>>>!!! IN AL,DX <- Uzmemo visi bajt sa porta
!!! MOV BH,AL <- Stavimo ga u visi bajt BX registra, tako da sada
!!! ceo BX registar sadrzi i nizu i visu vrednost
!!! uzetu sa porta u pravilnom rasporedu.
!!! MOV AX,BX <- Kopiramo vrednost BX u AX, kako bi mogli da
!!! POP BX <- povratimo vrednost BX ako ga dalje trebamo
Ove dve instrukcije su identične, kako procesor zna da je u pitanju
drugi a ne opet prvi bajt. Ima neki interni brojač ili tako nešto ?
Inače ponovo mi se učitava isti donji bajt sa magistrale, tako da se
u AH i AL nalaze iste vrednosti. Meni treba učitavanje gornjeg bajta
odvojeno ili zajedno sa donjim.
Još uvek mi nije jasno zašto regularna dokumentovana instrukcija
IN AX,DX učitava samo donji bajt odnosno ponaša se isto kao instrukcija
IN AL,DX.
asembler.159deimos,
>>>> MOV AL,DX
>>>> MOV AL,DX
Ovo nisu iste vrednosti ako port treba da vrati dva bajta, tj e˝ů
uredjaj koji salje vrednosti sa porta salje dva bajta za redom, jer koliko sam
ja shvatio port 278h je u vezi sa stampacem. E sad vidi ovako: ako je interfejs
kartica (IO sa paralelnim prikljuckom) 16-o bitna, onda moze da vrati odjednom
celu sesnaestobitnu vrednost, ali posto ja jos nisam video 16-o bitni adapter
sa paralelnim prikljuckom ( dakle mora da je 8-o bitni ) onda ne moze ni da
vrati odjednom oba bajta, vec jedan po jedan, i to uopste nema veze sa
magistralom (bila ona 8-bitna, 16-bitna ili 32-bitna)! Ova tehnika je uzimanja
, tj slanja dva űbajta za redom je standardna kod 8-bitnih
periferija.
Ajde da pojednostavimo stvari. Objasni mi konkret ¨˙űno sta bi trebalo da
se dobije kad uzmes vrednost sa porta, koji us˝ůlovi treba da su ispunjeni i
sta konkretno treba taj deo programa da radi, pa cu pokusati˘Ę ű ű űda
provalim u cemu je stvar.
Vlada.
ps. Ako hoces mo´kz˝ů űes i da mi posaljes taj deo sorsa.
asembler.160dejanr,
>> Zbog čega mi se kod disasembliranja javlja kod koji nije moguće
>> disasemblirati?
Najpre će biti da pokušavaš da disasembliraš neku tabelu u kojoj su podaci,
a ne instrukcije.
asembler.161bkaradzic,
Imam jedan problem u pmode.
Primer:
NESTO dd 0
OldIRQ0 dd 0
IRQ0: inc NESTO
jmp OldIRQ0
Kada IRQ0 zamenim ovom "rutinom";) program nece da mi radi sa QEMM i EMM386.
U rm bi ovo radilo kad bi ispred NESTO i OldIRQ0 stavio cs:, ali u pm?
Da li neko ima ideju kako bi ovo ispravio (vazno mi je da program radi
i sa EMM386!) ?
asembler.162bkaradzic,
Da li neko ima neki dobar mod player za SB (source, ali dovoljan mi je i
.OBJ)
koji radi u pmode, moze da pusta module sa 14 kanala (.MOD 14CH) i da nije
MIDAS?
asembler.163deimos,
-->> Da li neko ima neki dobar mod player za SB (source, ali dovoljan mi je i
-->> .OBJ) koji radi u pmode
E da, ovime sam se bavio jedno vreme, i sve je lepo radilo u RM, ali
se onda postavljalo pitanje 'kako adresirati DMA kanal u PM'???
asembler.164saricl,
!!! celu sesnaestobitnu vrednost, ali posto ja jos nisam video 16-o bitni
!!! adapter sa paralelnim prikljuckom ( dakle mora da je 8-o bitni ) onda ne
!!! ja shvatio port 278h je u vezi sa stampacem. E sad vidi ovako: ako je
!!! interfejs kartica (IO sa paralelnim prikljuckom) 16-o bitna, onda moze da
!!! vrati odjednom celu sesnaestobitnu vrednost, ali posto ja jos nisam video
!!! 16-o bitni adapter sa paralelnim prikljuckom ( dakle mora da je 8-o bitni
Pa u pitanju je kartica koju sam sam napravio i ona postavlja šesnaest bita na
magistralu (D0 do D15) sa postavljanjem adrese 278h,IOR,i AEN signalima.
No sve u svemu rešio sam da napravim drugačiju karticu, odnosno da
multiplexiram
donjih osam bita.
asembler.165mmitrovic,
::::: Ove dve instrukcije su identične, kako procesor zna da je u pitanju
::::: drugi a ne opet prvi bajt. Ima neki interni brojač ili tako nešto ?
Ne zna procesor, već periferija od koje tražiš word po tom principu.
::::: Inače ponovo mi se učitava isti donji bajt sa magistrale, tako da se
::::: u AH i AL nalaze iste vrednosti. Meni treba učitavanje gornjeg bajta
::::: odvojeno ili zajedno sa donjim.
Zato što tvoja kartica ne prati da li se učitao donji bajt.
::::: Još uvek mi nije jasno zašto regularna dokumentovana instrukcija
::::: IN AX,DX učitava samo donji bajt odnosno ponaša se isto kao instrukcija
::::: IN AL,DX.
Iz sledećeg razloga (po x-ti put): Ako je DX=278h, instrukcija
IN AX,DX će uraditi sledeće:
I) kod kartica koje se ponašaju kao 8-bitne:
1) Zahtevaće vrednost sa porta 278h i učitaće a0-a7 u AL
2) Zahtevaće vrednost sa porta 279h i učitaće a0-a7 u AH
II) kod 16-bitnih kartica:
Zahtevaće vrednost sa porta 278h i učitaće a0-a15 u AX
Razlika između ova dva načina je u jednoj liniji koju kartica mora da
postavi da bi javila da je na magistralu stavila 16bita, a ne 8. Ta
linija se nalazi u onom 16bitnom dodatku, ali ne znam kako se zove, niti
da li je komplementirana, pogledaj neki DOC.
Znači postoje tri principa po kojima se može učitati word sa periferije,
(kao dva bajta sa istog porta, kao dva bajta sa susednih portova, i kao
word sa porta) a koliko mi se čini, tvoja kartica ne podržava ni jedan
od njih:
1) Pošto dvaputa učitavaš istu vrednost (bajt) sa porta 278h dobijaš
AH=AL zato što tvoja kartica nije registrovala prvo učitavanje i nije se
spremila da na sledeći zahtev odgovori višim bajtom. Ukoliko je tvoja
kartica pravljena po ovom sistemu, onda ubaci par NOP-ova između dva
IN-a, pošto je hardveru potrebno malo vremena da se prebaci u stabilno
stanje, naročito ako je kartica sa nekim procesorom.
2) Tvoja kartica ne odgovara na zahtev sa porta 279h, a ne postoji drugi
hardver koji bi se na to javio (isključio si ili nemaš LPT2), pa je u
sledećem clock signalu magistrala prazna pa u ovaj bajt bude upisana 0.
Kao rezultat dobiješ AX=AL (AH=0).
3) Ne postavljaš 16b liniju. Drugo, ako pišeš program u PMu, treba da znaš
da IN AX, DX; gde je DX=278h vrši proveru pristupa ne samo portu 278h već
i 279h. Jednostavno rečeno, ceo IO space se tretira kao klasična memorija
od 64k. Kako se word prostire u memoriji, tako se prostire i u IO space-u.
Nadam se da sam bio dovoljno jasan, ako nisam reci.
Sorry, mislim da ćeš morati ponovo da projektuješ karticu. :(
Naravno, proveri ovo kod još nekog pre nego spališ ovu staru, možda su
mene pogrešno učili.
asembler.166bkaradzic,
Imam jedan problem sa programom pisanom u pmode-u.
Kada IRQ0 zamenim mojom rutinom koja izgleda ovako:
NESTO dd 0
IRQ0: inc NESTO
jmp OldIRQ0
program nece da mi radi sa EMM386 i QEMM (bez ovih programa normalno radi).
Da li neko zna kako ovaj problem da resim, veoma mi je vazno (a i hitno!).
Ko mi ovo resi ima pice od mene:)
asembler.167pstojanovic,
> Išao sam čisti TASM fajl i TLINK fajl. Kao
U ovome je verovatno i greska jer primer koji si dao je primer procedure
a ne samostalnog programa za neki od visih programskih jezika (npr. c),
sto i u samom primeru pise :
; Called as: TEST_PROC(i, j, k);
; i equ 8 ;leftmost parameter
; j equ 6
; k equ 4 ;rightmost parameter
Recimo ako dodas proceduru start iza PUBLIC TEST_PROC ...
PUBLIC TEST_PROC
PUBLIC START
START PROC
MOV AX,1 ; 1->AX
MOV BX,2 ; 2->BX
MOV CX,3 ; 3->CX
PUSH AX ; AX na stek (AX <=> i)
PUSH BX ; BX na stek (BX <=> j)
PUSH CX ; CX na stek (CX <=> k)
CALL TEST_PROC ; poziv TEST_PROC
MOV AX,4C00h ; zavrsi program
INT 21h
START ENDP ; Kraj programske rutine START
.. ; ...nastavak primera
..
END START ; Program otpocinje rutinom START
... primer ce savrseno raditi.
asembler.168speedy,
SP> NESTO dd 0
SP>
SP> IRQ0: inc NESTO
SP> jmp OldIRQ0
SP>
SP> program nece da mi radi sa EMM386 i QEMM (bez ovih programa
SP> normalno radi).
SP> Da li neko zna kako ovaj problem da resim, veoma mi je vazno (a
SP> i hitno!).
SP> Ko mi ovo resi ima pice od mene:)
Mozda bi trebao da setujes ds selektor?
(interapt verovatno prolazi kroz VCPI gde se promene segregs)
Da li je OldIRQ0 rutina iz tvog programa?
Ako nije, odakle uzimas adresu OldIRQ0?
Hope this helps,
Speedy
asembler.169msavkovic,
Ě °
ă─ĚĚ ĚĎ─ĚÍ─ĚĎ─ĚÍ─ĚĎ─ĚĚ ─Ě
║ ║║ ║║ ║ă─Ż║ ║ ║║ ║║Í─Â
đ đË─Âă─ŻË─Żđ Ë─Żă─ŻđË─đ ▄▄ █▄ ▄
─ŻŻ presents: Ż ▄▄ ▀███▄▄ ███▄▄ ██▄ ▄█
▄▄ ▀████▄▄▄█████████████▄█████ ▄██▄
▀▀█████▄▄██████████████████████████▄████▄ ▄██▄
▄▄▄▄▄▄▄▄▄███████████████████████████████████████████ ▄▄
▀█████████████████████████████████████████████████▄▄███
▄▄█████▀▀▀▀▀█████████████████████▀▀▀▀ ▀██▄ ▄▄▄ ▀▀▀████ ▄▄▄
██▀ ▄▄▄▄ ▀███████████████▀▀ ▄▄▄███▄ ▀█ ███████ ██████████▀
▄▄▄▄██████ █████ ▀█████▀▀▀▀▀▀▀▀▀▀ ▀███████▄ ██████ ▄█████████ ▄
▀█████ ██████ ██▀ ▄▄▄██▀▀▀▀▀██▄▄ ▀▀██████▄ ████▀ ▄██████████████▀
▄▄███████ ██████ █ ▄███ ▄▄▄ ████▄ ▄ ▀▀█████████▀ █████████████▀
▀▀▀▀▀▀██████ ██████ █ ████ ████ █████ █▄▄ ▀▀██████ ▀▀▀█████████▄████▀
▄▄████████ █████ █ ████ ▀▀▀ ██████ ████▄ ████████▄▄▄▄▄ ▀▀▀▀███▀▀
▀▀▀▀▀▀██████▄ ████ █ █████████▀▀▀▀▀ ████ █████▀▀▀█████████▄ ▄▄▄▄▄▄
▄████████▄ ███ █ █████ ▄▄▄ ▀▀▀ ██ ▄█████ ▄ ▀██████ ▄██▀▀▀
▄███▀▀██████▄ ██ █▄▄ ▀████▄▄▄▄▄▄▄▄▄▄██ █ ▄██████ ███▄ ▀▀▀ ▄█▄▄▄▄
████████▀ ▀▀██▄ ▀▀█████████████ ▄██████▀ ▄██████▄▄ ▄████▀▀▀▀
████▀███▀ ▄███▀ ▄████▄▄▄ ▀▀▀████ ███████████▄▄
▀▀▀ ▄███▄▄ ▄██████████████████████▄▄▄▄▄▄▄▄▄▄▄▄███████████▀▀▀▀▀
███▀ █████████████████████████████████████████████████▄▄
▀ ███████████████████████████████████████████▀▀▀▀▀▀▀▀▀
▀█▀▀ ▀████▀██████████████████████████▀▀▀▀███▄▄
▀██▀ ▀████▀██████▀██████ ▀▀▀███▄
▀ ▀██ ▀███ ▀▀██▄ ▀▀▀
▀ ▀▀ ▀
Ovo je prvi YU PC demo!!! Obavezno skidajte!!!
Trebalo je da se pojavi na Assembly-ju '95-te, ali zbog naseg pouzdanog
e-mail-a nije :(
Inace demo je najbolji i prvi u YU, so skidajte odmah !
Hyperopia
Demo je okacen u konf PC.UTIL, poruka 8.1504
asembler.170dr.urbano,
Skino' sam !ex i javlja mi otprilike ovako:
initialzing...
nema dovoljno visoke memorije :(
^^^^^^^^^^^^^^^
Zato me zanima dali mi mozes kazati koji su mu zahtevi (sto se memorije tice),
jer sam pratio assembly i video dosta intro-a cija velicina nije prelazila
vrednost od 60-tak kb, dok vas intro zauzima negde oko 815 kb. Dali je ovo
posledica objekata u intro-u (i sl.) ili same duzine intro-a (mislim u sek.)
ili lose kompresije ali ovo drugo mislim da je nemoguce ako je radjen u asm-u.
P.S.
Naglasavam da ne pisem u asm-u tako da ako sam gore nesto lupio ne uzimaj
za zlo. :)
Dr. Urbano & co.
istrazivanje alternativnog softvera
i gubljenje vremena
asembler.171kriss,
˙˙ Trebalo je da se pojavi na Assembly-ju '95-te, ali zbog naseg
˙˙ pouzdanog e-mail-a nije :(
Kad već spomenu Assembly, pretpostavljam da imaš više informacija o
svemu, pa ako te ne mrzi ... Ako ne znaš odakle da počneš, :) evo
predloga - šta je, gde se održava, kada se održava, nagrade,
discipline ...
asembler.172msavkovic,
┌┌┌ Skino' sam !ex i javlja mi otprilike ovako:
┌┌┌
┌┌┌ initialzing...
┌┌┌ nema dovoljno visoke memorije :(
┌┌┌ ^^^^^^^^^^^^^^^
Preskoci Autoexec.bat i Config.sys (sa F5 u dosu 6.xx)
┌┌┌ jer sam pratio assembly i video dosta intro-a cija velicina nije
┌┌┌ prelazila vrednost od 60-tak kb, dok vas intro zauzima negde oko
┌┌┌ 815 kb. Dali je ovo posledica objekata u intro-u (i sl.) ili same
┌┌┌ duzine intro-a (mislim u sek.) ili lose kompresije ali ovo drugo
┌┌┌ mislim da je nemoguce ako je radjen u asm-u.
Introi od 64kb spadaju u introe. Takodje postoje i introi od 4Kb
Ima ih i na sezamu (R:\DEMO\ass_pc4k.zip) Nas demo spada u kategoriju
demoa (maksimum velicine je 4MB) i on je cak i male velicine za jedan
demo. Muzika postoji na GUS-u, ali i kao poseban .MOD file.
asembler.173msavkovic,
┌┌┌ ˙˙ Trebalo je da se pojavi na Assembly-ju '95-te, ali zbog naseg
┌┌┌ ˙˙ pouzdanog e-mail-a nije :(
┌┌┌
┌┌┌ Kad vec spomenu Assembly, pretpostavljam da imas vise informacija
┌┌┌ o svemu, pa ako te ne mrzi ... Ako ne znas odakle da pocnes, :)
┌┌┌ evo predloga - sta je, gde se odrzava, kada se odrzava, nagrade,
┌┌┌ discipline ...
Ovo je vec bilo u NOVOSTI-ma ali evo ga opet...
BTW, Assembly je poceo jutros i traje do 13 avgusta.
asm95inf.zipasembler.174dr.urbano,
Ne ide :(
Probao sam kod drugara na jacoj masini 486DX 50 Mhz i nece. Prvi put je
je prikazao presents i ucitavo ko blesav, zna se alt-ctrl-del (cekao sam ga
negde oko 5 minuta !). Drugi put je uvelicao prompt i prikazo ga u gornjem
levom uglu (verovatno inicijalizovao grafiku) i blokiro. Nista od poruke
nedovoljno visoke memorije. Istina nisam probao ono sa preskakanjem config.sys
i autoexec.bat (u to vreme jos nisam primio tvoj odgovor) ali cu verovatno
probati danas, sutra.
Pozdrav,
Urbano.
P.S.
... znam da sam dosadan :(
asembler.175msavkovic,
┌┌┌ nedovoljno visoke memorije. Istina nisam probao ono sa
┌┌┌ preskakanjem config.sys i autoexec.bat (u to vreme jos nisam
┌┌┌ primio tvoj odgovor) ali cu verovatno probati danas, sutra.
Probaj, pa javi.
asembler.176dr.urbano,
Upalilo je :))
Demo je strava =:), ziva steta sto ne ode na assembly. Avaj imao sam problema
sa zvukom, naime imam PC speaker pa nisam ni ocekivao neki kvalitet ali bas
nista? Tokom demoa nije se nijedan zvuk cuo sem stenjanja masine ;). Nezanam
u cemu je problem, amoeba.mod je bio prisutan ?
Prenesi cestitke timu, demo je zaista opak ;)
Pozdrav,
dr. Urbano.
P.S.
Jos kad bi bilo muzike ... ;)))
asembler.177msavkovic,
┌┌┌ Demo je strava =:), ziva steta sto ne ode na assembly. Avaj imao
┌┌┌ sam problema sa zvukom, naime imam PC speaker pa nisam ni ocekivao
┌┌┌ neki kvalitet ali bas nista? Tokom demoa nije se nijedan zvuk cuo
┌┌┌ sem stenjanja masine ;). Nezanam u cemu je problem, amoeba.mod je
┌┌┌ bio prisutan ?
Hvala :) Rekoh da muzika za sad radi samo na GUS-u ;)
┌┌┌ Jos kad bi bilo muzike ... ;)))
Bice kad nadjemo neki SB mod player za protected mode. So, ako neko ima...
asembler.178msavkovic,
Ě °
ă─ĚĚ ĚĎ─ĚÍ─ĚĎ─ĚÍ─ĚĎ─ĚĚ ─Ě
║ ║║ ║║ ║ă─Ż║ ║ ║║ ║║Í─Â
đ đË─Âă─ŻË─Żđ Ë─Żă─ŻđË─đ
─ŻŻ Ż
Vam predstavlja svoj World Headquaters
(obavezno pogledajte kraj ove poruke)
Welcome to the Ultimate Experience...
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
█████████████████████
████▀▀▀▀▀▀▀▀█████▀▀▀▀▄▄▄▄ ▄▄▄▄▄▄▄▄
████ ▄▄ █████ ▄▀███ ████▀▀▀▀
████ ▀▀ █████ █ ▀▀▀ ████▄▄
████ ▄▄ █████ █ ███ ████▀▀
████ ██ █▀▀▀█ ▀▄███ ▄▄▄ ████▄▄▄▄
████▄▄▄██▄▄▄█▄▄▄█▄▄▄▄▀▀▀▀ ▀▀▀ ▀▀▀▀▀▀▀▀
█████████████████████
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
+33-1-45887548 +33-1-45888809
4 public lines ring v32b 1 VIP line VFC
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
SOAP WHQ 555:330/0
Computer Music NeT FHQ 10:330/0
Demo Group InterechangE FHQ 68:330/0
FidoneT 2:320/305
Gathering the Scene in a NetworK FHQ 864:33/1
SBCNeT FHQ 14:220/0
SparkNeT Paris HUB 74:320/300
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
■PC■ Support Site for ■ATARI■
Cubic playeR˙DMP˙Inertia playeR˙SWAG˙UltratrackeR
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
World HQ of
ArkhaM˙AsyluM˙DistorsioN˙FantasY˙HemoroidS˙HybriS˙HyperopiA˙InfinY˙JFF˙KlooN
LivE!˙LithiuM˙Lego systeM˙MegabusterS˙NoooN˙SLC˙ZooM
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
HQ or Distro of
Access DenieD˙AdmirE˙AmouR˙AnarchY˙BlanK˙CandelA˙CapacalA˙CodeblasterS
CreatioN˙CryonicS˙Cybernetic DreamS˙DeuS˙DiffusioN˙DusT˙EclipsE˙EpicaL˙ExtremE
Flatline ProductionS˙FlexioN˙Future CreW˙GolluM˙Ground ZerO˙HalcyoN
Impact StudiO˙ImphobiA˙JamM˙J!P˙Legend DesigN˙LitespeeD˙Logic DesigN˙MasquE
NostalgiA˙N-FactoR˙NeutroN˙OmicroN˙OrangE˙PrimE˙ProphecY˙ProximA˙PsychosquadS
RealM˙S!P˙ShocK!˙Soft-onE˙TET˙The CoexistencE˙VangelisTeam/IguanA˙VoiD˙WTB
XographY˙X-esS˙Zuul DesigN
KosmiC˙Insane frequencieS˙MoM˙Radical RythmS˙TraxX˙UniT
˙ ─ ─── ────── ───────────── ───── ─── ─ ˙
DemoS ■ CodinG ■ GraviS ■ GraphiX ■ MusiC ■ GameS
˙ ─ ─── ────── ─────────────────────────────────────── ───── ─── ─ ˙
GRAVIS OFFICIAL SUPPORT SITE
˙ ─ ─── ────── ─────────────────────────────────────── ───── ─── ─ ˙
┌──────────────────────────────────═■ A.C.E ■═────────────────────────────────┐
│ Authorized Product Support Node for │
│ │
│ A d v a n c e d │
│ ▄▄▄▄ ▄▄▄▄▄ ▄▄▄▄ ▄▄ ▄▄ ▄ ▄▄▄▄▄ │
│ Ů ▄▄ Ů Ţ Ů█ █Ţ Ů█ █Ţ █ Ů▄▄▄▄▄ │
│ Ů Ţ Ů▀▀█▀ Ů█ █Ţ Ů█ █Ţ █ Ţ │
│ ▀▀▀▀ ▀ ▀ ▀ ▀ ▀▀▀▀ ▀ ▀▀▀▀▀ │
│ Advanced Gravis Computer Technology Ltd. │
├─────────────────────────────────────────────────────────────────────────────┤
│ A new VIP ringdown: +33-1-45887799, 2 nodes V34! │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ The ACE CD DEMO COLLECTION vol 2 is OUT. All the PC releases from October │
│ 1994 to June 1995, plus 2000+ Amiga/PC modules selected and classified by │
│ author. 550Mo of demos, intros, sources, utils, etc... │
│ │
│ This CD is *NOT* BBS ready, all demos are ready to use (if they can be run │
│ from a read-only media...). │
│ │
│ it costs only 100F, 80F if you are in a demo group (I will check! :) ). If │
│ you want it, write me a comment! (christophe Yvon aka Gandalf/Infiny-AEgis │
│ │
│ Still available, CD#1, 350 Mo of datas, all the PC releases from the birth │
│ of the PC-scene to October 1994. (ASM'94 releases are on the CD#2) │
│ ─────────────────────── │
│ A.C.E is WHQ of a new group from Yougoslavia called Hyperopia. │
│ To discover this group, get their excellent first production called !EX │
│ EX.ZIP free download │
└─────────────────────────────────────────────────────────────────────────────┘
asembler.179saricl,
!!! II) kod 16-bitnih kartica:
!!! Zahtevaće vrednost sa porta 278h i učitaće a0-a15 u AX
!!! Razlika između ova dva načina je u jednoj liniji koju kartica mora da
!!! postavi da bi javila da je na magistralu stavila 16bita, a ne 8. Ta
!!! linija se nalazi u onom 16bitnom dodatku, ali ne znam kako se zove, niti
!!! da li je komplementirana, pogledaj neki DOC.
!!! Sorry, mislim da ćeš morati ponovo da projektuješ karticu. :(
Isprojektovao sam je u međuvremenu. Inače moja je kartica 16Bitna, ali
neznam koju liniju treba da setuje na šesnaestobitnom delu magistrasle,
ANW, zahvaljujem na trudu i strpljenju.
asembler.180wizard,
> Bice kad nadjemo neki SB mod player za protected mode. So, ako neko
> ima...
Jel odgovara DMP za OS/2? ;)
asembler.181bkaradzic,
Sto ovo programce nece da radi sa QEMM i EMM386???
Bez njih normalno radi!
xor bx,bx
l: mov ax,[bx]
dec bx
jnz l
asembler.182andrejt,
Subj: Zasto nece?
Q> Sto ovo programce nece da radi sa QEMM i EMM386???
Q> Bez njih normalno radi!
Meni ne radi i ovako... u stvari zaglavi kad cita word sa offseta ffff.
Ne znam dal' ce ti pomoci... ali sto ne probas mov al, [bx].
asembler.183bkaradzic,
;;; Sto ovo programce nece da radi sa QEMM i EMM386???
;;; Bez njih normalno radi!
;;;
;;; xor bx,bx
;;; l: mov ax,[bx]
;;; dec bx
;;; jnz l
Zaboravih, ne moze da se cita word sa adrese FFFF. ;)
asembler.184bkaradzic,
;;; Q> Sto ovo programce nece da radi sa QEMM i EMM386???
;;; Q> Bez njih normalno radi!
;;;
;;; Meni ne radi i ovako... u stvari zaglavi kad cita word sa offseta
;;; ffff. Ne znam dal' ce ti pomoci... ali sto ne probas mov al,
;;; [bx].
U medjuvremenu se setih. :)
Steta sto ne moze
mov ax,[bx]
bilo bi korisno za optimizaciju, ovako moram da pisem
mov al,[bx]
mov ah,[bx+1]
sto je cisto gubljenje vremena:_(
asembler.185atech,
> Meni ne radi i ovako... u stvari zaglavi kad cita word sa
> offseta ffff. Ne znam dal' ce ti pomoci... ali sto ne probas
> mov al, [bx].
Ne moze da se ucita word sa vrha segmenta (sa offseta FFFFH) jer
se tada probija segmentna granica! Visi bajt bi se u tom slucaju
trebao ucitati sa adrese ds+1:0000H sto je naravno nezgodno...;)
Brojac u pomenutom slucaju treba setovati na 0FFFEH....
asembler.186pstojanovic,
> Ne moze da se ucita word sa vrha segmenta (sa offseta FFFFH)
> jer se tada probija segmentna granica! Visi bajt bi se u tom
> slucaju trebao ucitati sa adrese ds+1:0000H sto je naravno
> nezgodno...;)
Nisam o ovome razmišljao do sada.
Nezgodno jeste, ali je način kako je "rešen" ovakav slučaj,(blokada
računara u slučaju direktnog adresiranja segmenta npr. instrukcija
mov ax,cs:Š0FFFFhĆ) tj. njegova manifestacija, prilično destruktivan. Greška
se može ispoljiti, ne kako sam naveo u gornjem primeru, sa direktnom ofset
adresom, već indirektno, putem prekoračenja nekog od indeksnih registara u
sličnoj instrukciji.
Zar nije bilo bolje da postoji slična detekcija (preko interapta) ovakve
greške kao u slučaju deljenja sa nulom. Ipak mislim da je postojao previd;
jednostavno se nije povelo računa o ovakvom slučaju.
Pozdrav.
asembler.187pyramid,
Da li neko ima ili zna gde se moze naci Intel 80286 programers manual (nesto
kao i386 u r:\infoprog direktorijumu, ali za 286)?
asembler.188speedy,
SP> Nezgodno jeste, ali je nacin kako je "resen" ovakav
SP> slucaj,(blokada racunara u slucaju direktnog adresiranja segmenta
SP> npr. instrukcija mov ax,cs:S0FFFFhC) tj. njegova manifestacija,
SP> prilicno destruktivan. Greska se moze ispoljiti, ne kako sam
SP> naveo u gornjem primeru, sa direktnom ofset adresom, vec
SP> indirektno, putem prekoracenja nekog od indeksnih registara u
SP> slicnoj instrukciji.
SP> Zar nije bilo bolje da postoji slicna detekcija (preko
SP> interapta) ovakve greske kao u slucaju deljenja sa nulom.
SP> Ipak mislim da je postojao previd;
SP> jednostavno se nije povelo racuna o ovakvom slucaju.
U v86 modu 386 daje general protection fault za bilo kakvo
prekoracenje granice segmenta a 286 i raniji procesori prave
wraparound tako da procitaju byte sa FFFF i byte sa 0 adrese...
Speedy
asembler.189speedy,
SP> Ne moze da se ucita word sa vrha segmenta (sa offseta FFFFH)
SP> jer se tada probija segmentna granica! Visi bajt bi se u tom
SP> slucaju trebao ucitati sa adrese ds+1:0000H sto je naravno
SP> nezgodno...;) Brojac u pomenutom slucaju treba setovati na
SP> 0FFFEH....
?? Valjda bi visi bajt trebalo da se ucita sa adrese ds:10000h...
(<> ds+1:0 (!))
Speedy
asembler.190atech,
> ?? Valjda bi visi bajt trebalo da se ucita sa adrese
> ds:10000h... (<> ds+1:0 (!))
Moja omaska, nisam bio dovoljno jasan...
Ono 1 je trebalo da bude 1 ceo segment od 64k odnosno 10000H bajtova.
Daklem 10000H je u paragrafima 1000H sto znaci da bi hipoteticka
adresa bila ds+1000H:0h.. Valjda... :)
asembler.191mmitrovic,
:::::> slucaju trebao ucitati sa adrese ds+1:0000H sto je naravno
:::::> nezgodno...;)
Kao prvo, ni na 286 se ne učitava sa ds+1:0000h, nego sa ds:0000h.
To se zove segment wrap. Adresa ds+1:0000 je ekvivalentna sa ds:16h.
::::: Nezgodno jeste, ali je način kako je "rešen" ovakav slučaj,(blokada
::::: računara u slučaju direktnog adresiranja segmenta npr. instrukcija
::::: mov ax,cs:Š0FFFFhĆ) tj. njegova manifestacija, prilično destruktivan.
Nije uopšte. Ta instrukcija izaziva General Protection Fault sa kodom
greške 00h.
::::: Greška se može ispoljiti, ne kako sam naveo u gornjem primeru, sa
::::: direktnom ofset adresom, već indirektno, putem prekoračenja nekog od
::::: indeksnih registara u sličnoj instrukciji.
Greška se ne ispoljava kada se koriste 16b indeksni registri, to nema
veze, važno je da finalna adresa podatka ne bude 0FFFFh ako se učitava
word.
::::: Zar nije bilo bolje da postoji slična detekcija (preko interapta) ovakve
::::: greške kao u slučaju deljenja sa nulom. Ipak mislim da je postojao
::::: previd; jednostavno se nije povelo računa o ovakvom slučaju.
Kao što već rekoh postoji, i npr. Windows reaguje tako što terminiše
aplikaciju. EMM386, QEMM i ostali su malo zaglupi po tom pitanju, mada
bi i oni trebali da reaguju (ne znam pošto ne držim ništa od toga).
Pošto je kod greške 00h mora se analizirati instrukcija kako bi se
otkrio uzrok greške, zato je malo zajebano pisati GPF handler.
U V86 modu se ovaj FAULT javlja veoma često i mora se emulirati preko
GPF handlera, što znači da EMM386 i QEMM podržavaju ovu detekciju (inače
real mode aplikacije ne bi radile). Što se tiče PModa, verovatno Xtender
koji koristiš nema dobro napisan GPF handler, ili namerno ne podržava
segment wrap.
asembler.192atech,
> Kao prvo, ni na 286 se ne ucitava sa ds+1:0000h, nego sa
> ds:0000h. To se zove segment wrap. Adresa ds+1:0000 je
> ekvivalentna sa ds:16h.
Samo mala ispravka: Adresa ds+1:0H je ekvivalentna sa ds:10H
a ne sa ds:16H (16H = 22 decimalno)...:)
Salu na stranu, veoma cesto i sam pogresim na ovakvim stvarima a
onda izgubim dosta vremena trazeci bug na drugim mestima iako
je on na dohvat ruke...:(
asembler.193kriss,
˙˙ To se zove segment wrap. Adresa ds+1:0000 je ekvivalentna sa
˙˙ ds:16h.
******
ds:10h tj. ds:16d, da ne zbuniš početnike. :)
asembler.194mmitrovic,
::::: Samo mala ispravka: Adresa ds+1:0H je ekvivalentna sa ds:10H
::::: a ne sa ds:16H (16H = 22 decimalno)...:)
Pazi, majku mu bošju, imperijalistićku... :)
Apsolutni zez sa moje strane. Posipam se pepelom. ;)
10x za ispravku, i tebi i kriss-u, da ne dupliram poruku.
asembler.195biber,
>> U v86 modu 386 daje general protection fault za bilo kakvo
>> prekoracenje granice segmenta a 286 i raniji procesori prave
>> wraparound tako da procitaju byte sa FFFF i byte sa 0 adrese...
Zaglavi se i na 286 ( AMD ) ( sa i bez CONFIG I AUTOEXEC-a )
asembler.196.sima,
Hi
Kako se pokreće miš u SVGA modovima? Probao sam sa svga256bgi i neće.
U uputstvu piše da nijedan drajver za mišonju ne podržava SVGA. Da li
je ovo istina. Što je najčudnije, probao sam sa običnim VESA modovima
(znači bez BGI-ja) i miš se instalira, reaguje na pritiske, ali kursor
se ne vidi :(
asembler.197deimos,
RE: SVGA & Mis
Kod SVGA modova ces imati malo vise posla nego u 'obicnim' modovima.
Naime moraj sa sam definises izgled kursora i da ga setas ili kao bitmap vezan
za koordinate misa ili da koristis funkcije drajvera za istu svrhu, ali ces
ipak morati sam da ga definises. Drugi problem je u tom sto ces morati obavezno
za savaki mod da mu definises prostor kretanja (int 33h). Treci problem je sto
ce misonja da ti preskace (granularity od 16, odnosno 32 pix.). Tu ti je
najjednostavnije da mu definises veci prostor kretanjÍ┤┬Ă─ăšüÁčÚůxB@gžĘ┼ ┘O║
pa da delis koordinate.
.dEiMoS.
asembler.198.sima,
> Kod SVGA modova ces imati malo vise posla nego u 'obicnim' modovima.
> Naime moraj sa sam definises izgled kursora i da ga setas ili kao
> bitmap vezan
Hvala. Ali da li neko zna tačno šta treba da se uradi. Da li je dovoljno
samo definisati izgled kursora ili još ...
asembler.199deimos,
Imam jedan problem. Naime radim rutinu za DMA prenos. Problem
se sastoji u tome sto alociran bafer nije uvek na samom pocetku segmenta,
pa se desava da bafer, recimo, velicine 48K do pola bude ispravno
prenesen a ostatak zbog wrap-inga bude djubre. Kako resiti ovaj problem?
Konkretno, radi se o programiranju Sound Blaster kartice. Deo je
pisan u BC-u (skoljka), a rutine uglavnom u asm-u.
Vlada.
asembler.200kriss,
Da li neko ima rutine za fade in i fade out, naravno u sorsu, i
naravno, PD ?
asembler.201atech,
> Imam jedan problem. Naime radim rutinu za DMA prenos. Problem
> se sastoji u tome sto alociran bafer nije uvek na samom pocetku
> segmenta, pa se desava da bafer, recimo, velicine 48K do pola
> bude ispravno prenesen a ostatak zbog wrap-inga bude djubre.
> Kako resiti ovaj problem?
> Konkretno, radi se o programiranju Sound Blaster kartice. Deo
> je pisan u BC-u (skoljka), a rutine uglavnom u asm-u.
Nije mi najjasnije kako alocirani bafer nije na pocetku
segmenta? Ako koristis 21,48 dobijas adresu segmenta koji je
alociran MCB+1 (podrazumevani offset je 0) zar ne? Jedino ako bafer
alociras pri kompajliranju tada je moguca pojava o kojoj govoris.
Elem, potreban bafer alociraj sam koristeci 21,4A,48 i neces imati
problema sa wrap-ingom. Ako je bafer definisan pri kompajliranju moras
da alociras nesto veci bafer i izvrsis preracunavanje segmenta na kome
pocinje bafer.
asembler.202deimos,
>> > Imam jedan problem. Naime radim rutinu za DMA prenos. Problem
>> Nije mi najjasnije kako alocirani bafer nije na pocetku
>>segmenta? Ako koristis 21,48 dobijas adresu segmenta koji je
>>alociran MCB+1 (podrazumevani offset je 0) zar ne? Jedino ako bafer
>>alociras pri kompajliranju tada je moguca pojava o kojoj govoris.
Tacno tako. Bafer je kreiran pri linkovanju. Nije mi palo na
pamet da 21,48 menja stvar... 10x 4 hINT.
Vlada.
ps. linkovanju=kompajliranju
asembler.203atech,
> Tacno tako. Bafer je kreiran pri linkovanju. Nije mi palo na
> pamet da 21,48 menja stvar... 10x 4 hINT.
> ps. linkovanju=kompajliranju
Podrazumeva se...:)