Ismeretlen kifejezések assembler toldalékban
2017-04-22T21:30:09+02:00
2017-04-22T22:12:09+02:00
2022-08-10T15:15:35+02:00
11kacsa
Sziasztok!
játékkészítés céljából jó volna a párhuzamos bill. kezelés melyhez tökéletes megoldásokat is találtam régebbi (2006-os) cikkek között, a problémám viszont a fordításával van.

Uses Dos, Crt; VAR KBD : Array[0..127]Of Boolean; {Billentyűk állapotai, ScanCode szerint (pl.: KBD[1] az az Escape)} OldIRQ : Procedure; {ide mentjük az eredeti megszakítást} Procedure NewIRQ; Assembler; {az új megszakítás, ami minden billentyűzetváltozásnál frissíti a KBD tömböt} Asm push ds push ax push bx push cx mov ax,SEG Kbd mov ds,ax xor bh,bh mov cl,bh in al,60h mov bl,al and bl,7Fh shl al,1 cmc adc cl,00 mov [bx+Offset Kbd],cl in al,61h mov ah,al or al,80h out 61h,al mov al,ah out 61h,al mov al,20h out 20h,al pop cx pop bx pop ax pop ds iret end; Var k : byte; oszlop : integer; y : integer; Begin {főprogram} TextMode(co80); Gotoxy(1, 25); Write('Esc-re kilep.'); GetIntVec($09,@OldIRQ); {mentjük az eredeti megszakítást} SetIntVec($09,@NewIRQ); {beállítjuk a sajátunkat} Repeat { megnezhetjuk a scan kodokat ... } oszlop := 1; y := 0; for k := 0 to 127 do begin y := y + 1; if y mod 23 = 0 then oszlop := oszlop + 7; gotoxy(oszlop, y mod 23 + 1); write(k); if KBD[k] then begin write('*'); End Else begin write(' '); end; end; Until KBD[1]; SetIntVec($09,@OldIRQ); {visszaállítjuk az eredeti megszakítást} End.



Nem vagyok járatos az assembly programozásban, így csak bemásoltam a programrészt, de nem találja a fordítóm a regiszterek nagy százalékát (ahogy nézegettem 100%). Órákat böngésztem és jelenleg ott tartok, hogy valószínűleg a 32-64 bit-ből jön a probléma.
Fp-t használok geany IDE-vel Win10 alatt.
a hibaüzenetem:  Error: Unknown identifier "DS"  és ennek még rengeteg változata

A megoldásokat előre és köszönöm és kérlek nézzétek el ha valamit benéztem, még eléggé kezdő vagyok.
Mutasd a teljes hozzászólást!
Csatolt állomány
Még ha sikerülne is lefordítanod a kódot, akkor se működne Windows alatt (illetve csak emulált DOS környezeten belül menne, pl. DOSBox-ban). Ez a kód DOS-hoz készült, ott lehetett közvetlenül macerálni a hardvert, meg saját IRQ kezelőket írni, de tisztességes oprendszer ilyet nem enged meg halandó programoknak.

Vagy DOS-os kódot kell fordítanod a Free Pascallal (nem tudom egyáltalán támogatja-e még), vagy esetleg előhalászni egy ősöreg Turbo Pascalt, és azzal fordítani, az tuti DOS-os programot fordít belőle. A másik megközelítés, hogy hagyod a fenébe az olyan dolgokat, amik már 20 éve is elavultnak számítottak, és keresel anyagot windowsos játékfejlesztéshez.
Mutasd a teljes hozzászólást!

abcd