Tein yksinkertaisen ohjelman, jossa käsitellään piipparia. Piippari pistetään päälle outtaamalla porttiin 61h arvo 3h. Tämä tekee sen, että dos alkaa soittamaan piipparia portin 42h sisällön mukaisesti. Lopuksi sitten pistetään piippari pois päältä outtaamalla samaan 61h porttiin arvo 0h. Tämän ohjelman alunperinen tarkoitus oli, että se soittaa skaalan 0-FF, mutta ohjelma olikin liian nopea, eikä piippari pysynyt perässä, alkoikin kuuluumaan FF:stä alaspäin skaalaa. Tämä tietysti riippuu koneen, ja piipparin nopeudesta, mutta hauskan kuuloista silti :)
.model tiny .code ;Piippari ON mov al, 1fh out 61h, al mov al, 0h loopp: inc al ;Lisätään al:llää yhdellä out 42h, al ;Outataan al 42h porttiin cmp al, 0FFh ;Onko al FFh? je nollaa ;Kyllä, joten tee al:llästä 0 jmp ohi ;Ei, joten ei nollata al:llää nollaa: xor al, al ;XOR on nopeampi tapa tehdä rekisteristä 0 kuin mov al, 0h ohi: push ax ;ax pinoon... ;Onko jotain nappia painettu? mov ah, 1h int 16h pop ax ;...ja pois pinosta jz loopp ;Ei, joten takaisin loopin alkuun xor ah, ah ;Kyllä, joten "kaapataan" painettu nappi, että se ei vaikuta enää int 16h ;kun ollaan dosissa. ;Piippari OFF mov al, 0h out 61h, al ;Poistutaan ohjelmasta mov ax, 4c00h int 21h end
se on piippEri ei piippAri :P
Aivan sama
Kääntyy nasmilla jos poistaa rivit:
.model tiny
.code
mun koneessa ei oo piipperiä :(
EDIT: oi jee oi jee, otin yhdestä vanhasta ja rikkinäisestä koneesta piipperin.
Testasin vähän hidastamalla tota ja huomasin että ff on kaikkein matalin ääni eikä korkein eikä toiste päin...
mulla ei kuulu mitää.
Edit: sitte kuuluu ku outtaa porttiin 43h vaikka 1
Mihin muotoon tallennan?
.asm ja käännät jollain assemblerilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.