diff --git a/.gitignore b/.gitignore index 9abcb09..c7802f4 100644 --- a/.gitignore +++ b/.gitignore @@ -3,10 +3,10 @@ *.o *.lst *.note -./build/* +host/build/* *.lbl *.bin *.labels editor/c6le editor/source-program_*.c6l -user-side-compiler/c6lc \ No newline at end of file +user-side-compiler/c6lc diff --git a/host/src/lookup_tables.s b/host/src/lookup_tables.s index bc46e95..efe0282 100644 --- a/host/src/lookup_tables.s +++ b/host/src/lookup_tables.s @@ -1,75 +1,75 @@ -inverse_factor_value: ;lookup 00000001 --gives--> 10000000 , etc etc. only 1st 1 in binary numbers -NOP -.byte %10000000, %01000000; (inverse factor value) -NOP -.byte %00100000; (inverse factor value) -NOP -NOP;.byte $0; (log) -NOP;.byte $1; (log) -.byte %00010000; (inverse factor value) -log: -NOP -.byte $0; (log) -.byte $1; (log) -NOP -.byte $2 -NOP -NOP -.byte %00001000; (inverse factor value) -.byte $3 -NOP -NOP -;; i put another lookup table where nops normaly are' +;inverse_factor_value: ;lookup 00000001 --gives--> 10000000 , etc etc. only 1st 1 in binary numbers +;NOP +;.byte %10000000, %01000000; (inverse factor value) +;NOP +;.byte %00100000; (inverse factor value) +;NOP +;NOP;.byte $0; (log) +;NOP;.byte $1; (log) +;.byte %00010000; (inverse factor value) +;log: +;NOP +;.byte $0; (log) +;.byte $1; (log) +;NOP +;.byte $2 +;NOP +;NOP +;.byte %00001000; (inverse factor value) +;.byte $3 +;NOP +;NOP +;;; i put another lookup table where nops normaly are' binary_factor: .byte %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010, %00000001; (binary factor) ;; ^(log) -NOP -NOP -NOP -NOP -.byte %00000100; (inverse factor value) -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -.byte $5 -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -.byte %00000010; (inverse factor value) - -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -.byte $6 +;NOP +;NOP +;NOP +;NOP +;.byte %00000100; (inverse factor value) +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;.byte $5 ;(log) +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;.byte %00000010; (inverse factor value) +; +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;.byte $6; (log) ;; i put another lookup table where nops normaly are Bitmap = $4000 ;;This is used by pixel_draw! look at it for more detail @@ -124,17 +124,17 @@ big_y_offset: .hibytes $1CC0 + Bitmap .lobytes $1E00 + Bitmap .hibytes $1E00 + Bitmap -NOP -NOP -NOP -NOP -.byte %00000001 -NOP -NOP -NOP -NOP -NOP -NOP -NOP -NOP -.byte $7 +;NOP +;NOP +;NOP +;NOP +;.byte %00000001; (inverse factor value) +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;NOP +;.byte $7; (log) diff --git a/host/src/routines/line/line.inc b/host/src/routines/line/line.inc index fb6e999..31a4b58 100644 --- a/host/src/routines/line/line.inc +++ b/host/src/routines/line/line.inc @@ -11,3 +11,4 @@ V = $E4 ; 16-bit value (uses E5) D = $E6 ; 16-bit value (uses E7) byte_to_paint = $E8 + ;; E9 in use of pixel_calc diff --git a/host/src/routines/line/line.s b/host/src/routines/line/line.s index 796214e..9768771 100644 --- a/host/src/routines/line/line.s +++ b/host/src/routines/line/line.s @@ -1,16 +1,45 @@ ;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*- .proc line; user-procedure :clobbers (A X Y) :clobbers-arguments 4 -;X_pos =< X_end skall alltid gälla + .include "line.inc" + +;; Fix line that is too long + LDA Y_pos + CMP #$C8 ;;y_max = $C8 + BCC do_not_fix_y_pos + LDA #$C8 + STA Y_pos +do_not_fix_y_pos: + LDA Y_end + CMP #$C8 ;;y_max = $C8 + BCC do_not_fix_y_end + LDA #$C8 + STA Y_end +do_not_fix_y_end: + + ;;dx SEC LDA X_end SBC X_pos - STA dx - BCC dx_no_underflow;; X_end >= X_pos + BCS dx_no_underflow;; X_end >= X_pos EOR #$ff ; Fix bit underflow + STA dx + ;; line_* expect X_pos < X_end and now its not the case. + ;; Lets move them around + LDX X_pos + LDY X_end + STX X_end + STY X_pos + LDX Y_pos + LDY Y_end + STX Y_end + STY Y_pos + + dx_no_underflow: + STA dx SEC LDA Y_pos SBC Y_end diff --git a/host/src/routines/line/line_test_extensive.s b/host/src/routines/line/line_test_extensive.s index 6fa69ed..4f79005 100644 --- a/host/src/routines/line/line_test_extensive.s +++ b/host/src/routines/line/line_test_extensive.s @@ -6,16 +6,16 @@ .include "../memory/mem.inc" Y_pos_ = $0D X_pos_ = $0E - Y_end_ = $10 - X_end_ = $11 + Y_end_ = $0F + X_end_ = $0C LDA #$d2 STA X_pos_ LDA #$62 STA Y_pos_ LDA #$ff - STA X_end + STA X_end_ LDA #$0 - STA Y_end + STA Y_end_ ;; Full angle test @loop: @@ -23,16 +23,17 @@ STA Y_pos LDA X_pos_ STA X_pos + LDA X_end_ + STA X_end + LDA Y_end_ + STA Y_end jsr line - INC Y_end - LDA Y_end - CMP #$bb + INC Y_end_ + LDA Y_end_ + CMP #$ff bne @loop - - hihi: - jmp hihi clear_screen: ;;Lets clear bitmap VIC_bank = $4000 @@ -48,18 +49,23 @@ long_line_test_a: LDA #$60 STA Y_pos_ LDA #$ff - STA X_end + STA X_end_ LDA #$0 - STA Y_end + STA Y_end_ @loop: LDA Y_pos_ STA Y_pos LDA X_pos_ STA X_pos + LDA X_end_ + STA X_end + LDA Y_end_ + STA Y_end + jsr line - INC Y_end - LDA Y_end - CMP #$bb + INC Y_end_ + LDA Y_end_ + CMP #$ff BNE @loop clear_screen_: @@ -68,24 +74,60 @@ clear_screen_: Mov_16 length, length + 1, #<$1f40, #>$1f40 LDA #$00 jsr memset + long_line_test_b: -LDA #$00 -STA X_pos_ -LDA #$00 -STA Y_pos_ -LDA #$ff -STA X_end -LDA #$60 -STA Y_end + LDA #$00 + STA X_pos_ + LDA #$00 + STA Y_pos_ + LDA #$ff + STA X_end_ + LDA #$60 + STA Y_end_ @loop: -LDA Y_pos_ -STA Y_pos -LDA X_pos_ -STA X_pos -jsr line -INC Y_pos_ -LDA Y_pos_ -CMP #$bb -BNE @loop + LDA Y_pos_ + STA Y_pos + LDA X_pos_ + STA X_pos + LDA X_end_ + STA X_end + LDA Y_end_ + STA Y_end + jsr line + INC Y_pos_ + LDA Y_pos_ + CMP #$ff + BNE @loop + +clear_screen__: + ;;Paint the bitmap black. More bitmap: https://www.c64-wiki.com/wiki/53272, https://www.c64-wiki.com/wiki/Screen_RAM#Moving_of_screen_RAM + Mov_16 A_start, A_start + 1, #VIC_bank + Mov_16 length, length + 1, #<$1f40, #>$1f40 + LDA #$00 + jsr memset + +long_line_test_b_pos_end_swapped: + LDA #$00 + STA X_end_ + LDA #$00 + STA Y_end_ + LDA #$ff + STA X_pos_ + LDA #$60 + STA Y_pos_ +@loop: + LDA Y_end_ + STA Y_end + LDA X_end_ + STA X_end + LDA X_pos_ + STA X_pos + LDA Y_pos_ + STA Y_pos + jsr line + INC Y_end_ + LDA Y_end_ + CMP #$ff + BNE @loop .endscope