Canvas not supported
Canvas not supported
Suchen
Bookmark
Canvas not supported
Shine Effekt
Direkt zum Seiteninhalt

Hauptmenü:

680x0 Assembler Beispiel

 

Autor:

Oscar Kohler

Version:

0.11

Level:

Einfach

Sprache:

Assembler 680x0


 
Haftungsausschluss / Disclaimer
Kontakt / Contact
Drucken / Print


Der Computer versteht nur eine Sprache, die Maschinensprache, die nur aus 0en und 1en besteht.
Assembler Befehle, die Mnemonics, werden vom Assembler in die Maschinensprache übersetzt. Diesen Vorgang nennt man Assemblierung.

Die C++ Funktion: DrawText(), sah früher in Assembler etwa so aus ...

;------------------------------------------------------------------

FontBPLx = 336
FontBPLy = 238
FontBPLPlanes = 3
FontBPLColors = 8
Fontx = 48
Fonty = 34
RealFontx = 35

;------------------------------------------------------------------
; Print Text
;------------------------------------------------------------------
; Input:
;  D0 -> X-Pos
;  D1 -> Y-Pos
;  D2 -> Char
;  A0 -> Textstructur
;------------------------------------------------------------------

Print_Text:
movem.l d0-d6/a0-a4,-(a7)
cmp.w #'TX',(a0)
bne tl2
move.l 10(a0),a1
sub.b #' ',d2
move.b (a1,d2),d2
lea FontBPL,a1
lea MaskBPL,a3
divu #FontBPLx/Fontx,d2
move.l d2,d3
and.l #$0000ffff,d2
mulu #[FontBPLx/8]*Fonty,d2
add.l d2,a1
add.l d2,a3
clr.w d3
swap d3
mulu #Fontx/8,d3
add.l d3,a1
add.l d3,a3
move.l 6(a0),a2
move.l d0,d4
lsr.l #3,d0
bclr #0,d0
add.l d0,a2
move.w 2(a0),d0
lsr.w #3,d0
mulu d0,d1
add.l d1,a2
move.l d0,d3
sub.l #[Fontx/8]+2,d0
move.l #[FontBPLx/8]-[[Fontx/8]+2],d1
move.w #Fonty,d2
lsl.w #6,d2
add.w #[Fontx/16]+1,d2
mulu 4(a0),d3
and.w #%0000000000001111,d4
ror.w #4,d4
move.w d4,d5
or.w #%0000111111001010,d4
moveq #FontBPLPlanes-1,d6
lea $dff000,a4
  
tl1:
btst #14,$02(a4)
bne.s tl1
move.w d4,$40(a4)
move.w d5,$42(a4)
move.l #$ffff0000,$44(a4)
move.l a2,$48(a4)
move.l a1,$4c(a4)
move.l a3,$50(a4)
move.l a2,$54(a4)
move.w d0,$60(a4)
move.w d1,$62(a4)
move.w d1,$64(a4)
move.w d0,$66(a4)
move.w d2,$58(a4)
add.l #[FontBPLx/8]*FontBPLy,a1
add.l d3,a2
dbf d6,tl1

tl2:
movem.l (a7)+,d0-d6/a0-a4
rts

;------------------------------------------------------------------

TextStructur0:
dc.b "TX"
dc.w GraphicBPLx
dc.w GraphicBPLy
dc.l GraphicBPL
dc.l FontDecodeTab0

FontDecodeTab0:
; Space  !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /  0  1  2  3  4
dc.b 48,43,48,48,48,48,48,48,20,27,34,48,45,46,47,44,30,31,32,33,35
;     5  6  7  8  9  :  ;  <  =  >  ?  @  A  B  C  D  E  F  G  H  I
dc.b 36,37,38,39,40,13,06,48,41,48,42,48,00,01,02,03,04,05,07,08,09
;     J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  [   ]  ^
dc.b 10,11,12,14,15,16,17,18,19,21,22,23,24,25,26,28,29,48,48,48,48
;     _  `  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s
dc.b 48,48,00,01,02,03,04,05,07,08,09,10,11,12,14,15,16,17,18,19,21
;     t  u  v  w  x  y  z
dc.b 22,23,24,25,26,28,29
even

;------------------------------------------------------------------

FontBPL: blk.b [FontBPLx/8]*FontBPLy*FontBPLPlanes,0
FontBPLCol: blk.w FontBPLColors,0
MaskBPL: blk.b [FontBPLx/8]*FontBPLy,0

;------------------------------------------------------------------

player.transform.rotate() und
player.transform.scale()

sah früher in Assembler etwa so aus ...

;------------------------------------------------------------------

...
movem.l (a0)+,d0-d3
movem.w (a5)+,d4-d7
add.w (a4,d4.w),d0
add.w (a4,d5.w),d1
add.w (a4,d6.w),d2
add.w (a4,d7.w),d3
move.w (a1,d1.l),d1
move.w (a1,d3.l),d3
lsl.w #4,d1
lsl.w #4,d3
or.w (a1,d0.l),d1
or.w (a1,d2.l),d3
lsl.w #2,d1
lsl.w #2,d3
move.b (a6,d1.w),(a2)+
move.b 1(a6,d1.w),(a3)+
move.b 2(a6,d1.w),(BPLx/8*BPLy)-1(a3)
move.b 3(a6,d1.w),(BPLx/8*BPLy*2)-1(a3)
move.b (a6,d3.w),(a2)+
move.b 1(a6,d3.w),(a3)+
move.b 2(a6,d3.w),(BPLx/8*BPLy)-1(a3)
move.b 3(a6,d3.w),(BPLx/8*BPLy*2)-1(a3)
...

;------------------------------------------------------------------

... und das ist nur ein kleiner Teil der Routine.


 
Kein Kommentar
 
Letzte Änderung: 03.02.2015
button Canvas not supported button
Zurück zum Seiteninhalt | Zurück zum Hauptmenü