Az elsõ bootolható programom

Kezdőlap Fórumok Programozás Az elsõ bootolható programom

10 bejegyzés megtekintése - 11-20 / 86
  • Szerző
    Bejegyzés
  • #2061864
    begyu
    Felhasználó

      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
      endm

      var 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)//!szamok

      repeat
        !dido
        ax:=2//!delay
        !cido
      until keypressed

      closegr
      exit

      szamok:
        <>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
      ret

      dora:
        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
      ret

      dperc:
        BL:=5
        div BL
        BL:=AL//BH:=0
        <mutato

      dido::
        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
      ret

      delay::
        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  near

                  push  bp
                  mov  bp, sp
                  push  es
                  pusha

                  mov  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, cl

      putpix_2:  xchg  es:[bx], al

      putpix_3:  popa
                  pop  es
                  pop  bp
                  ret  4

      putpix      endp

      .bap
      getpix::
      .asm
      getpix      proc  near

                  push  bp
                  mov  bp, sp
                  push  es
                  pusha

                  mov  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, ax

                  popa
                  mov  ax, es
                  pop  es
                  pop  bp
                  ret  4

      getpix      endp

      .bap
      line::
      .asm
      line        proc  near

                  enter 4, 0
                  pusha

                  mov  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_8

      line_10:    popa
                  leave
                  ret  8

      line        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
                  pusha

                  mov  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], ax

                  popa
                  mov  ax, word ptr [getvec_x]
                  mov  bx, word ptr [getvec_y]
                  pop  bp
                  ret  8

      getvec_x:  DW    0
      getvec_y:  DW    0

      getvect    endp

      .bap
      vect::
      .asm
      vect        proc  near
                  push  bp
                  mov  bp, sp
                  pusha

                  push  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  line

                  popa
                  pop  bp
                  ret  8

      vect        endp

      .bap
      arc::
      .asm
      arc        proc  near
                  push  bp
                  mov  bp, sp
                  pusha

                  mov  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  0Ah

      arc_a1      dw    0
      arc_x1      dw    0
      arc_y1      dw    0
      arc_x2      dw    0
      arc_y2      dw    0

      arc        endp

      .bap
      outstr::
      .asm
      outstr      proc  near

                  push  bp
                  mov  bp, sp
                  push  es
                  pusha

                  push  bp
                  mov  ax, 1130h
                  mov  bh, 3
                  int  10h
                  mov  di, bp
                  pop  bp

                  mov  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, 3

      outstr_2:  mov  al, es:[bx+di]
                  mov  ah, 8

      outstr_3:  add  al, al
                  jnc  outstr_4
                  push  cx
                  push  dx
                  call  putpix
      outstr_4:  inc  cx
                  dec  ah
                  jnz  outstr_3

                  sub  cx, 8
                  inc  dx
                  inc  bx
                  test  bx, 7
                  jnz  outstr_2

                  sub  dx, 8
                  add  cx, 8
                  jmp  short outstr_1

      outstr_5:  popa
                  pop  es
                  pop  bp
                  ret  6

      outstr      endp

      Analóg órát mûködtet VGA monitoron, a lefordított kód kisebb, mint 1k!

      #2061865
      valaki456
      Felhasználó

        Azthiszem 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…

        #2061866
        Wait
        Felhasználó

          Ahh, nagyon megköszönném… Ha minden igaz, napokban fogok kapni egy könyvet: Assembly a C64 alatt.

          #2061867
          valaki456
          Felhasználó

            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?

            #2061868
            begyu
            Felhasználó
              #2061869
              Wait
              Felhasználó
                H 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/

                #2061870
                kisbetu
                Felhasználó

                  „anarchy magyar vagyok”

                  Szégyelld magad!

                  #2061871
                  Wait
                  Felhasználó
                    kisbetu wrote:
                    „anarchy magyar vagyok”

                    Szégyelld magad!

                    [off]
                    Megígérhetem, nem fogom
                    [/off]

                    #2061872
                    kisbetu
                    Felhasználó

                      Vadá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.)

                      #2061873
                      Wait
                      Felhasználó

                        [/off] = end off.
                        end.

                      10 bejegyzés megtekintése - 11-20 / 86
                      • Be kell jelentkezni a hozzászóláshoz.