diff --git a/wip-hugo/macros/16aritmatic.s b/wip-hugo/macros/16aritmatic.s
index d7e0efb..c9010e0 100755
--- a/wip-hugo/macros/16aritmatic.s
+++ b/wip-hugo/macros/16aritmatic.s
@@ -1,16 +1,46 @@
 
-.macro Add_16 a_low, a_hi, b_low, b_hi  ; a = a + b
-	CLC
+
+;; Can use A as b_low!
+;; And X or Y is b_hi
+;; Can add ", !" to the end for it to run faster but C=0 is not garantied!
+.macro Add_16 a_low, a_hi, b_low, b_hi, fast_unsafe  ; a = a + b
+;; IF to run it fast
+.ifblank fast_unsafe
+    CLC
+.endif
+;; If b_low != A
+.if .match(.mid (0, 1, {b_low}), A )
+.elseif .match(.mid (0, 1, {b_low}), X)
+LDX
+kssk
+.match(.mid (0, 1, {b_low}), Y)
+LDY
+kkdkd
+.else
+    LDA b_low
+.endif
 	LDA b_low
 	ADC a_low
 	STA a_low
 	LDA b_hi
+.if .match(.mid (0, 1, {b_low}), X )
+	LDX
+	kdkdkd
+.elseif .match(.mid (0, 1, {b_low}), Y )
+	LDY
+	dkkdk
+.else
+    LDA b_hi
+.endif
 	ADC a_hi
 	STA a_hi
 .endmacro
 
-.macro Sub_16 a_low, a_hi, b_low, b_hi  ; a = a - b
+
+.macro Sub_16 a_low, a_hi, b_low, b_hi, fast_unsafe ; a = a - b
+.ifblank fast_unsafe
     SEC
+.endif
     LDA a_low
     SBC b_low
     STA a_low
@@ -19,9 +49,11 @@
     STA a_hi
 .endmacro
 
-
-.macro mult_16 low_, hi_  ; [low, hi] = [low, hi]*2
-	CLC
+.macro mult_16 low_, hi_, fast_unsafe  ; [low, hi] = [low, hi]*2
+;; IF to run it fast
+.ifblank fast_unsafe
+    CLC
+.endif
 	ROL low_
 	ROL hi_
 .endmacro
diff --git a/wip-hugo/macros/timer.s b/wip-hugo/macros/timer.s
index 6cbd415..5db6b14 100644
--- a/wip-hugo/macros/timer.s
+++ b/wip-hugo/macros/timer.s
@@ -1,4 +1,6 @@
-;; Max 1.5s
+;; Max 1.5s eller 0.9s vet ej villken
+;; skriv time_start .. kod .. time_stop
+;; och läs värdet i f1
 .macro time_start
     PHA
     LDA $DC08 ; Bit 0..3: Tenth seconds in BCD-format, others may be 0 or 1
diff --git a/wip-hugo/routines/line/line_down.s b/wip-hugo/routines/line/line_down.s
index ce1c898..06a32f6 100644
--- a/wip-hugo/routines/line/line_down.s
+++ b/wip-hugo/routines/line/line_down.s
@@ -31,7 +31,7 @@
     mult_16 >V, <V; V = 2*(dx -dy)
 
     ;dy_2 = dy*2
-    mult_16 >dy_2, <dy_2
+    mult_16 >dy_2, <dy_2, !
 
     ;; D = 2*dy - dx
     ;; In loop we have that D = D -V
@@ -46,11 +46,8 @@
     STA >D
     LDA <dy_2
     STA <D
-    Add_16 >D, <D, #$ff, #$01
+    Add_16 >D, <D, #$ff, #$01, !
     Sub_16 >D, <D, dx, #$00
-;hihi:
-;jmp hihi
-
 
 for_x:
     jsr pixel_draw
@@ -59,16 +56,15 @@ for_x:
     LDX X_pos
     CPX X_end
     BEQ end
-
     ;;If D <  %00000010 00000000:  case_2
     ;;else case 1.
     Lag_16 >D, <D, #$00, #$02, case_2
-case_1:
+case_1:; C =1 so we can use !
     INC Y_pos
-    Sub_16 >D, <D, >V, <V; D = D - V
+    Sub_16 >D, <D, >V, <V, !; D = D - V
     JMP for_x
-case_2:
-    Add_16 >D, <D, >dy_2, <dy_2;D = D + 2*dy
+case_2: ;; C =0 because LAG_16 so we can use !
+    Add_16 >D, <D, >dy_2, <dy_2, !;D = D + 2*dy
     JMP for_x
 end:
     RTS
diff --git a/wip-hugo/routines/line/line_test_time.s b/wip-hugo/routines/line/line_test_time.s
index 26f926a..d050fcc 100644
--- a/wip-hugo/routines/line/line_test_time.s
+++ b/wip-hugo/routines/line/line_test_time.s
@@ -7,13 +7,13 @@
     X_pos_ = $0E
     Y_end_ = $10
     X_end_ = $11
-    LDA #$d0
+    LDA #$a0
     STA X_pos_
-    LDA #$60
+    LDA #$30
     STA Y_pos_
     LDA #$ff
     STA X_end
-    LDA #$0
+    LDA #$30
     STA Y_end
 
 ;; Short test for timing
@@ -28,7 +28,7 @@ time_start
     jsr line
     INC Y_end
     LDA Y_end
-    CMP #$90
+    CMP #$40
     BEQ end__
     jmp @loop
 end__:
diff --git a/wip-hugo/routines/memory/pixel_draw.s b/wip-hugo/routines/memory/pixel_draw.s
index e5cbab5..2c49d47 100755
--- a/wip-hugo/routines/memory/pixel_draw.s
+++ b/wip-hugo/routines/memory/pixel_draw.s
@@ -1,23 +1,29 @@
 ;;Screen print. Draws a pixel at a specified position.
 ;; Destroys A X Y
 .proc pixel_draw; Draws a pixel at  [Y = FB , X = FC, FD].  Y = 0 - 320, X= 0 - 200
-    ;;write_byte = 00010000,
-	LDA $FC ; X (mod 8)
+    Y_pos = $FB
+    X_pos = $FCFD
+    byte_to_paint = $FE
+    btp_mem_pos =$494A; byte to paint memory position
+    C = $7071
+    B =$7273
+    ;; X = X_pos (mod 8)
+	LDA >X_pos ; X (mod 8)
 	AND #%00000111
+	TAX
 
-	;;Store pixel in byte
+	;;Store pixel in byte_to_paint
 	TAX
 	LDA #%10000000
 	INX
-tt:
+@shift_btp:
 	DEX
-	BEQ end__;Y=0 end this
+	BEQ end__;X=0 end this
 	CLC
 	ROR A
-	jmp tt
+	jmp @shift_btp
 end__:
-
-	STA $FE
+	STA byte_to_paint
 
 	;;FIND THE POSITION IN MEMORY TO WRITE PIXEL
 	;; + + + + + >  X
@@ -26,58 +32,63 @@ end__:
 	;;\/
 	;; Y
 	;;
-	;; Let be this position in memory be stored in [$49, $4A] temporaraly
 
 	;;pos = x_offset
 	LDA #%11111000
-	AND $FC
-	STA $49
+	AND >X_pos
+	STA >btp_mem_pos
 
-	LDA $FD
-	STA $4A
+	LDA <X_pos
+	STA <btp_mem_pos
 
-	;;y_offset because chuncks aka y_offset_bc
+	;;The y_pos adds offset because chunk offsets + inside chunk offset.
+	;; Adding inside chunk offset
 	LDA #%00000111 ; A = y (mod 8)
-	AND $FB
+	AND Y_pos ;; offset to add
 
-	;;pos += y_offset_bc
-	CLC
-	ADC $49
-	STA $49
+	;;ading offset, same as psudocode bellow
+	;;Add_16 >btp_mem_pos, <btp_mem_pos, A, #$00
+	CLC ; Y = b_low
+	ADC >btp_mem_pos
+	STA >btp_mem_pos
 	LDA #$00
-	ADC $4A
-	STA $4A
+	ADC <btp_mem_pos ; C =0
+	STA <btp_mem_pos
 
-	LDY $FB
 	LDA #$00
 	STA $4B
+
 	;;y =8 translates to 320 bytes.
 	LDA #%11111000 ; A =  y - [y (mod 8)]
-	AND $FB
-	STA $FB
+	AND Y_pos
+	STA >C
+	STA >B
+	LDA #$00
+	STA <C
+	STA <B
 
-	;;We need to A = A*40 =A * 2^3 * 5
-	;;A = A*2^3
-	mult_16 $FB, $4B
-	mult_16 $FB, $4B
-	mult_16 $FB, $4B
+	;;We need to calculate C*40. 40 = 2*2*2*(2^2 +1)
+	;; _*2^2
+	mult_16 >C, <C, !
+	mult_16 >C, <C, !
 
-	;;*5
-	Add_16 $49, $4A, $FB, $4B
-	Add_16 $49, $4A, $FB, $4B
-	Add_16 $49, $4A, $FB, $4B
-	Add_16 $49, $4A, $FB, $4B
-	Add_16 $49, $4A, $FB, $4B
+	;; + _*1
+	Add_16 >C, <C, >B, <B, !
 
-	STY $FB
+	;; *2*2*2
+	mult_16 >C, <C, !
+	mult_16 >C, <C, !
+	mult_16 >C, <C, !
+
+	Add_16 >btp_mem_pos, <btp_mem_pos, >C, <C, !
 
 	;;add offset for where bitmap is
-	Add_16 $49, $4A, #<Bitmap, #>Bitmap
+	Add_16 >btp_mem_pos, <btp_mem_pos, #<Bitmap, #>Bitmap, !
 
 	;;Let draw some stuff
 	LDX #$00
-	LDA $FE
-	ORA ($49, X)
-	STA ($49, X)
+	LDA byte_to_paint
+	ORA (>btp_mem_pos, X)
+	STA (>btp_mem_pos, X)
 	RTS
 	.endproc