Kezdőlap › Fórumok › Programozás › Az elsõ bootolható programom
- This topic has 85 hozzászólás, 18 résztvevő, and was last updated 18 years, 10 months telt el by
tovis.
-
SzerzőBejegyzés
-
2006-06-02-06:24 #2061864
Hali!
Ezt még régebben követtem el, win alatt A’rpi basspasc fordítójával:
Code:.386#INITGR()
.asm
mov ax, 13h
sub al, 1
int 10h
mov dx, 03CEh
mov ax, 0305h
out dx, ax
mov cx, 639
mov dx, 479
xor ax, ax
mov bl, 0Fh
mov [GColor], bl
push 0A000h
pop es
mov ax, -1
mov cx, 19200
push 0
call setgcolor
xor di, di
rep stosw
push bx
call setgcolor
.bap
endm#CLOSEGR()
mov ax, 03h
int 10h
endmvar ora,perc,sec:DB
{var
szog DW ?
szogek DW 60,30,0,330,300,270,240,210,180,150,120,90,60
GColor DB 0
szamstr DW 0,0
jelstr DB ”,0
}initgr
push 320,240,60,0,360//!arc
FOR BX=0 to 12 do push(all)//!szamokrepeat
!dido
ax:=2//!delay
!cido
until keypressedclosegr
exitszamok:
<>BX,1
AL:=BL//++AL//AH:=0
if AL>9 do AH+=31h//AL-=10
AL+=30h
if AH!=0 do AHAL
szamstr:=AX
ax:=szog
push 315,238,70,ax
!getvect
push ax,bx,ofs szamstr
!outstr
ax:=szog
push 317,237,55,ax
!getvect
push ax,bx,ofs jelstr
!outstr
retdora:
push CX
if AX>12 do AX-=12
–AL
BX:=AX
<9 then
AH:=0
AL:=CL//>>AL,1
if DX=0 do DX:=350//else DX-=AX
endif
push 320,240,30,dx
!vect
push 320,240,5,0,360
!arc
retdperc:
BL:=5
div BL
BL:=AL//BH:=0
<mutatodido::
push 0Fh
!setgcolor
DOS 2Ch
ora:=CH
perc:=CL
sec:=DH
DL:=0
mutato:
push DX
push(all) ax:=ch//!dora
ax:=cl//!dperc
pop DX
if DL==0 do push 0Ah//!setgcolor
ax:=dh//!dperc
retdelay::
CX:=AX
CX:=2
DX:=0
AH:=86h
INT 15h
ret.bap
setgcolor::
.asm
setgcolor proc near
push bp
mov bp, sp
pusha
mov ah, [bp+4]
mov [GColor], ah
xor al, al
mov dx, 03CEh
out dx, ax
popa
pop bp
ret 2
setgcolor endp.bap
putpix::
.asm
putpix proc nearpush bp
mov bp, sp
push es
pushamov ax, [bp+6]
mov bx, [bp+4]
cmp ax, 0
jl putpix_3
cmp ax, 639
jg putpix_3
cmp bx, 0
jl putpix_3
cmp bx, 479
jg putpix_3
push 0A000h
pop es
mov cx, bx
shl bx, 2
add bx, cx
shl bx, 4
mov cx, ax
shr ax, 3
add bx, ax
mov al, 80h
ror al, clputpix_2: xchg es:[bx], al
putpix_3: popa
pop es
pop bp
ret 4putpix endp
.bap
getpix::
.asm
getpix proc nearpush bp
mov bp, sp
push es
pushamov ax, [bp+6]
mov bx, [bp+4]
push 0A000h
pop es
mov cx, bx
shl bx, 2
add bx, cx
shl bx, 4
mov cx, ax
shr ax, 3
add bx, ax
mov si, bx
xor bh, bh
mov dx, 03CEh
mov ax, 0304h
getpix_1: out dx, ax
mov bl, es:[si]
or bl, es:[si]
rol bl, cl
shl bx, 1
dec ah
jnl getpix_1
mov al, bh
xor ah, ah
mov es, axpopa
mov ax, es
pop es
pop bp
ret 4getpix endp
.bap
line::
.asm
line proc nearenter 4, 0
pushamov ax, [bp+10]
mov bx, [bp+8]
mov cx, [bp+6]
mov dx, [bp+4]
mov si, cx
sub si, ax
jge line_1
neg si
line_1: mov di, dx
sub di, bx
jge line_2
neg di
line_2: mov [bp-2], si
mov [bp-4], di
cmp si, di
jle line_6
cmp ax, cx
jle line_3
xchg ax, cx
xchg bx, dx
line_3: xchg ax, dx
sub cx, dx
inc cx
sub ax, bx
sar ax, 16
add ax, ax
inc ax
shr si, 1
sub di, si
mov si, di
line_4: push dx
push bx
call putpix
test si, si
jl line_5
add bx, ax
sub si, [bp-2]
line_5: inc dx
add si, [bp-4]
loop line_4
jmp short line_10
line_6: cmp bx, dx
jle line_7
xchg ax, cx
xchg bx, dx
line_7: xchg ax, cx
sub dx, bx
xchg cx, dx
inc cx
sub ax, dx
sar ax, 16
add ax, ax
inc ax
shr di, 1
sub si, di
line_8: push dx
push bx
call putpix
test si, si
jl line_9
add dx, ax
sub si, [bp-4]
line_9: inc bx
add si, [bp-2]
loop line_8line_10: popa
leave
ret 8line endp
.bap
triplus::
.asm
triplus proc near
push bp
mov bp, sp
push bx
mov ax, [bp+8]
mov bx, [bp+6]
mov cx, [bp+4]
.bap
VAR TRI_DAT:DW
TRI_DAT:=AX
finit
fild TRI_DAT
fldpi
fdiv 180.0
fmul st(0),st(1)
if CX==0 do fsin // else fcos
TRI_DAT:=BX
fild TRI_DAT
fmul st(0),st(1)
fistp TRI_DAT
ax:=TRI_DAT
.asm
pop bx
pop bp
ret 6
triplus endp.bap
getvect::
.asm
getvect proc near
push bp
mov bp, sp
pushamov bx, word ptr [bp+4]
mov ax, 360
sub ax, bx
mov bx, ax ; DEG
push bx
push word ptr [bp+6]
push 0
call triplus
add ax, word ptr [bp+8]
mov word ptr [getvec_y], ax
push bx
push word ptr [bp+6]
push -1
call triplus
add ax, word ptr [bp+0Ah]
mov word ptr [getvec_x], axpopa
mov ax, word ptr [getvec_x]
mov bx, word ptr [getvec_y]
pop bp
ret 8getvec_x: DW 0
getvec_y: DW 0getvect endp
.bap
vect::
.asm
vect proc near
push bp
mov bp, sp
pushapush word ptr [bp+0Ah]
push word ptr [bp+8]
push word ptr [bp+6]
push word ptr [bp+4]
call getvect
push word ptr [bp+0Ah]
push word ptr [bp+8]
push word ptr ax
push word ptr bx
call linepopa
pop bp
ret 8vect endp
.bap
arc::
.asm
arc proc near
push bp
mov bp, sp
pushamov ax, word ptr [bp+6]
cmp word ptr [bp+4], ax
jg arc_0
add word ptr [bp+4], 360
arc_0:
push word ptr [bp+0Ch]
push word ptr [bp+0Ah]
push word ptr [bp+8]
push ax
mov [arc_a1], ax
call getvect
mov [arc_x1], ax
mov [arc_y1], bx
mov cx, word ptr [bp+8]
xor dx, dx
mov ax, 360
div cx
mov dx, ax
arc_loop:
add [arc_a1], dx
mov ax, word ptr [bp+4]
cmp ax, [arc_a1]
jg arc_skip
mov [arc_a1], ax
arc_skip:
push word ptr [bp+0Ch]
push word ptr [bp+0Ah]
push word ptr [bp+8]
push word ptr [arc_a1]
call getvect
mov [arc_x2], ax
mov [arc_y2], bx
push word ptr [arc_x1]
push word ptr [arc_y1]
push word ptr [arc_x2]
push word ptr [arc_y2]
call line
mov ax, [arc_x2]
mov [arc_x1], ax
mov ax, [arc_y2]
mov [arc_y1], ax
mov ax, word ptr [bp+4]
cmp ax, [arc_a1]
jg arc_loop
arc_end:
popa
pop bp
ret 0Aharc_a1 dw 0
arc_x1 dw 0
arc_y1 dw 0
arc_x2 dw 0
arc_y2 dw 0arc endp
.bap
outstr::
.asm
outstr proc nearpush bp
mov bp, sp
push es
pushapush bp
mov ax, 1130h
mov bh, 3
int 10h
mov di, bp
pop bpmov si, [bp+4]
mov cx, [bp+8]
mov dx, [bp+6]outstr_1: lodsb
test al, al
jz outstr_5
mov bl, al
xor bh, bh
shl bx, 3outstr_2: mov al, es:[bx+di]
mov ah, 8outstr_3: add al, al
jnc outstr_4
push cx
push dx
call putpix
outstr_4: inc cx
dec ah
jnz outstr_3sub cx, 8
inc dx
inc bx
test bx, 7
jnz outstr_2sub dx, 8
add cx, 8
jmp short outstr_1outstr_5: popa
pop es
pop bp
ret 6outstr endp
Analóg órát mûködtet VGA monitoron, a lefordított kód kisebb, mint 1k!
2006-06-06-09:17 #2061865Azthiszem ide pont illik az amit mondani akartam Waitnak.
Szóval:
Sikerült szereznem egy könyvet az ASSEMBLY programozásról. Igaz elég régi, 85-ben íródott, ráadásul Z80 procikhoz, de remélem még hasznát vehetjük. Mindenesetre már találtam benne néhány használható dolgot.
Ha gondolod, akkor az egész könyvet megpróbálom kijegyzetelni, és majd elküldöm a doksit. Remélhetõleg 1 hét alatt végzek is vele…
2006-06-06-11:40 #2061866Ahh, nagyon megköszönném… Ha minden igaz, napokban fogok kapni egy könyvet: Assembly a C64 alatt.
2006-06-06-12:35 #2061867Huhh, ara a könyvre én is kiváncsi lennék 🙂
Esetleg te is készíthetnél róla jegyzetet, vagy bescannelhetnéd…Ha már itt tartunk, akkor esetleg valahova feltölthetnénk az ilyen doksikat 🙂 Készítsek erre a célra egy weboldalt?
2006-06-06-12:53 #2061868Hali!
Ez hasznos lehet:
http://flatassembler.net/docs.php?article=manual2006-06-06-14:01 #2061869H Miki wrote:Huhh, ara a könyvre én is kiváncsi lennék 🙂
Esetleg te is készíthetnél róla jegyzetet, vagy bescannelhetnéd…Ha már itt tartunk, akkor esetleg valahova feltölthetnénk az ilyen doksikat 🙂 Készítsek erre a célra egy weboldalt?
Akkor készítek 😀
Most különbözõ C-tronnal kapcsolatos cuccok itt: http://anarchy.magyarvagyok.hu/other/c-tron/2006-06-06-19:00 #2061870„anarchy magyar vagyok”
Szégyelld magad!
2006-06-06-19:10 #2061871kisbetu wrote:„anarchy magyar vagyok”Szégyelld magad!
[off]
Megígérhetem, nem fogom
[/off]2006-06-06-19:31 #2061872Vadászik ám rád a nyûves fene!
Egyszerûen hazajövök, elolvasom a napi termést.
Aztán mit ad jehova, találok köztük ilyen fasságot.Ja, hogy pont te írtad? Lehet, hogy nem véletlen.
De majd kinövöd.(Legalábbis szeretném remélni. Mindenesetre egyre inkább elmegy a kedvem miattad a Keszire költözéstõl.)
„
2006-06-06-19:33 #2061873[/off] = end off.
end. -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz