]> git.the-white-hart.net Git - vhdl/commitdiff
Use local labels and fix duplicated label
authorrs <>
Fri, 10 Oct 2025 05:40:58 +0000 (00:40 -0500)
committerrs <>
Fri, 10 Oct 2025 05:40:58 +0000 (00:40 -0500)
projects/cpu_0/asm/entry.asm
projects/cpu_0/asm/host.asm
projects/cpu_0/asm/ps2_keyboard.asm
projects/cpu_0/asm/runtime.asm
projects/cpu_0/asm/uart_console.asm

index 2f6f69fd261e8dbe22759b8150c143a4eb31c43d..8390d1c9f440174c6b507c17f1894a26aa1d15e4 100644 (file)
@@ -7,18 +7,18 @@ start:
     #8 0xc3i8 call host_seg_lower_set
     #8 0x02i8 call host_seg_dp_set
 
-_start_wait_ps2:
+.wait_ps2:
     call ps2_available
-    jz _start_wait_ps2
+    jz .wait_ps2
     call ps2_getc
     dup call uart_putc
     call vga_console_putc
-    jmp _start_wait_ps2
+    jmp .wait_ps2
 
 halt:
     #8 0xc0i8 #32 host_swled !8 drop
-_halt:
-    jmp _halt
+.halt:
+    jmp .halt
 
 
 greetz_uart:
index ec340ad5f75aacebc641f5bfa9c6751bb3969483..4c6d1af5baa4be9c7fa751fc58783a7469eead57 100644 (file)
@@ -67,7 +67,7 @@ seg_upper_clr:
 
 ( Clear the seven-segment display lower byte )
 ( -- )
-seg_upper_clr:
+seg_lower_clr:
     #32 host_sseg0 @8 #8 0x7fi8 |  ( Read original value and clear all segments except point )
     #32 host_sseg0 !8 drop         ( Write back into segment register )
     #32 host_sseg1 @8 #8 0x7fi8 |  ( Read original value and clear all segments except point )
@@ -78,22 +78,22 @@ seg_upper_clr:
 ( Turn on a decimal point on the seven-segment display )
 ( n -- )
 host_seg_dp_set:
-    dup #8 0x03i8 - jn _host_seg_dp_set_x
+    dup #8 0x03i8 - jn .x
     #32 host_sseg0 +
     dup @8 #8 0x7fi8 &
     swap !8
-_host_seg_dp_set_x:
+.x:
     drop ;
 
 
 ( Turn off a decimal point on the seven-segment display )
 ( n -- )
 host_seg_dp_clr:
-    dup #8 0x03i8 - jn _host_seg_dp_clr_x
+    dup #8 0x03i8 - jn .x
     #32 host_sseg0 +
     dup @8 #8 0x80i8 |
     swap !8
-_host_seg_dp_clr_x:
+.x:
     drop ;
 
 
index b3e67c9c4c6e28a08668ec82bf657d5b0eb7fbf5..4d7342131229eddfeb6f68fc8b1fc8da9fa8d561 100644 (file)
@@ -20,23 +20,23 @@ ps2_reset:
 ( -- )
 ps2_int:
     ( Restart on critical errors )
-    #32 ps2_error @8 jz _ps2_int_noerror
+    #32 ps2_error @8 jz .noerror
     #8 0x00i8 #32 ps2_ctrl !8 drop
     nop nop nop nop nop nop nop nop ( Guarantee at least 16 clock cycles to flush the SRL counters )
     nop nop nop nop nop nop nop nop
     #8 0x41i8 #32 ps2_ctrl !8 drop
     ;
 
-_ps2_int_noerror:
+.noerror:
     ( Clear any w1c flags that are unhandled so far )
     #32 ps2_iflag @8
     #32 ps2_iflag !8
 
     ( Check for available bytes )
-    #8 0x01i8 & jz _ps2_int_ret
+    #8 0x01i8 & jz .ret
     #32 ps2_data @8
     call ps2_handle_scancode
-_ps2_int_ret:
+.ret:
     ;
 
 
@@ -44,20 +44,20 @@ _ps2_int_ret:
 ( scancode -- )
 ps2_handle_scancode:
     ( Check for scancode modifier flags )
-    dup #8 0xf0i8 - jz _ps2_handle_scancode_mark_keyup
-    dup #8 0xe0i8 - jz _ps2_handle_scancode_mark_extended
+    dup #8 0xf0i8 - jz .mark_keyup
+    dup #8 0xe0i8 - jz .mark_extended
 
     ( Check for capslock toggle )
-    dup #8 0x58i8 - jz _ps2_handle_scancode_capslock  ( skip if not capslock key )
-    jmp _ps2_handle_scancode_notcapslock
-_ps2_handle_scancode_capslock:
+    dup #8 0x58i8 - jz .capslock  ( skip if not capslock key )
+    jmp .notcapslock
+.capslock:
     #32 ps2_keydown #8 0x58i8 + @8
-    jp _ps2_handle_scancode_notcapslock    ( skip if capslock key already down )
+    jp .notcapslock    ( skip if capslock key already down )
     #32 ps2_is_keyup @8
-    jp _ps2_handle_scancode_notcapslock    ( skip if current scancode is break )
+    jp .notcapslock    ( skip if current scancode is break )
     #32 ps2_is_caplock @8 #8 0x01i8 ^
     #32 ps2_is_caplock !8 drop             ( toggle capslock state )
-_ps2_handle_scancode_notcapslock:
+.notcapslock:
 
     ( Record the key up/down status )
     dup #32 ps2_keydown +
@@ -66,15 +66,15 @@ _ps2_handle_scancode_notcapslock:
     #32 ps2_is_keyup @8 #8 0x01i8 ^
     swap !8 drop
 
-    #32 ps2_is_keyup @8 jp _ps2_handle_scancode_done
+    #32 ps2_is_keyup @8 jp .done
     dup call ps2_handle_keypress
 
-_ps2_handle_scancode_done:
+.done:
     #8 0x00i8 #32 ps2_is_keyup !8
     #32 ps2_is_extended !8 drop drop ;
-_ps2_handle_scancode_mark_keyup:
+.mark_keyup:
     #8 0x01i8 #32 ps2_is_keyup !8 drop drop ;
-_ps2_handle_scancode_mark_extended:
+.mark_extended:
     #8 0x01i8 #32 ps2_is_extended !8 drop drop ;
 
 
@@ -94,21 +94,21 @@ ps2_handle_keypress:
     |
     shl shl shl shl shl shl shl shl |
     #32 ps2_scancode_lut + @8
-    dup jz _ps2_handle_keypress_done
-    dup jn _ps2_handle_keypress_done
+    dup jz .done
+    dup jn .done
     dup call ps2_putc
-_ps2_handle_keypress_done:
+.done:
     drop ;
 
 
 ( Put an ASCII character into the buffer for later, drops if no space available )
 ( c -- )
 ps2_putc:
-    call ps2_available #8 0x0fi8 - jz _ps2_putc_done
+    call ps2_available #8 0x0fi8 - jz .done
     #32 ps2_buffer_head @8 #32 ps2_buffer + !8
     #32 ps2_buffer_head @8 #8 0x01i8 + #8 0x0fi8 &
     #32 ps2_buffer_head !8 drop
-_ps2_putc_done:
+.done:
     drop ;
 
 
@@ -125,11 +125,11 @@ ps2_available:
 ps2_getc:
     #8 0x00i8
     call ps2_available
-    jz _ps2_getc_done
+    jz .done
     #32 ps2_buffer_tail @8 #32 ps2_buffer + @8 +
     #32 ps2_buffer_tail @8 #8 0x01i8 + #8 0x0fi8 &
     #32 ps2_buffer_tail !8 drop
-_ps2_getc_done:
+.done:
     ;
 
 
index 1798a0c29a51465eb0fb9dea0ffbcf1d3ac8b03d..e5ad06fbe88aa47241ff71c1829226ff16b226ea 100644 (file)
@@ -116,8 +116,8 @@ isr_timer1:
 ( ivec -- )
 isr_unknown:
     #32 host_swled !8 drop idis
-_isr_unknown_halt:
-    jmp _isr_unknown_halt
+.halt:
+    jmp .halt
 
 
 ( ---------------------------------------------------------------------------- )
@@ -131,32 +131,32 @@ mem_move:
     >r dup r> swap
     >r dup r> swap
     - ( dest-src )
-    dup jz _mem_move_none
-    jp _mem_move_back
+    dup jz .none
+    jp .back
 
     ( Copy the block front-to-back )
-_mem_move_front_loop:
-    r@ jz _mem_move_done
+.front_loop:
+    r@ jz .done
     >r dup @8 r@ !8 drop
     #8 1i8 + r> #8 1i8 +
     #8 1i8 r> - >r
-    jmp _mem_move_front_loop
+    jmp .front_loop
 
-_mem_move_back:
+.back:
     ( Copy the block back-to-front )
     r@ swap >r +
     r> r@ +
-_mem_move_back_loop:
-    r@ jz _mem_move_done
+.back_loop:
+    r@ jz .done
     #8 1i8 swap -
     >r #8 1i8 swap -
     dup @8 r@ !8 drop r>
     #8 1i8 r> - >r
-    jmp _mem_move_back_loop
+    jmp .back_loop
 
-_mem_move_none:
+.none:
     drop
-_mem_move_done:
+.done:
     r> drop drop drop ;
 
 
@@ -164,13 +164,13 @@ _mem_move_done:
 ( dest value count -- )
 mem_set_8:
     >r
-_mem_set_8_loop:
-    r@ jz _mem_set_8_done
+.loop:
+    r@ jz .done
     >r dup r> swap !8
     >r #8 1i8 + r>
     #8 1i8 r> - >r
-    jmp _mem_set_8_loop
-_mem_set_8_done:
+    jmp .loop
+.done:
     r> drop drop drop ;
 
 
@@ -178,12 +178,59 @@ _mem_set_8_done:
 ( dest value count -- )
 mem_set_16:
     >r
-_mem_set_16_loop:
-    r@ jz _mem_set_16_done
+.loop:
+    r@ jz .done
     >r dup r@ swap !8 drop
     #8 1i8 + dup r@ lsr lsr lsr lsr lsr lsr lsr lsr swap !8 drop
     #8 1i8 + r>
     #8 1i8 r> - >r
-    jmp _mem_set_16_loop
-_mem_set_16_done:
+    jmp .loop
+.done:
     r> drop drop drop ;
+
+
+( Multiply two unsigned integers )
+( a b -- b*a )
+mul_uu:
+    #8 0i8 ~ >r >r >r #8 0i8 ( acc ) ( ctr b a )
+.loop:
+    ( acc ) ( ctr b a )
+    ( if ctr == 0 then done )
+    r> r> r> dup jz .done
+
+    ( acc a b ctr ) ( )
+    ( decrement counter )
+    lsr >r
+
+    ( acc a b ) ( ctr )
+    ( shift accumulator )
+    >r >r shl r> r>
+
+    ( acc a b ) ( ctr )
+    ( if b & 0x80000000 then acc += a )
+    dup #32 0x80000000i32 & jz .next
+    >r dup >r +
+
+    ( acc ) ( ctr b a )
+    r> r>
+
+.next:
+    ( acc a b ) ( ctr )
+    shl
+    >r >r jmp .loop
+
+.done:
+    ( acc a b ctr ) ( )
+    drop drop drop ;
+
+
+( Divide an unsigned integer by another unsigned integer )
+( a b -- b/a )
+div_uu:
+    ;
+
+
+( Take one unsigned integer modulo another unsigned integer )
+( a b -- b%a )
+mod_uu:
+    ;
index f0895ea313a184cd5688d687164bd642b1a16b50..d3415b1d42d587b651c72e537e22034bc74fee1e 100644 (file)
@@ -19,9 +19,9 @@ uart_int:
 ( c -- )
 uart_putc:
     ( Wait for available space in the Tx FIFO )
-_uart_putc_wait:
+.wait:
     #32 uart_iflag @8
-    #8 0x04i8 & jz _uart_putc_wait
+    #8 0x04i8 & jz .wait
 
     ( Write byte to UART data register )
     #32 uart_data !8 drop ;
@@ -30,11 +30,11 @@ _uart_putc_wait:
 ( Print an ASCIIZ string out the UART )
 ( &s -- )
 uart_puts:
-_uart_puts_loop:
-    dup @8 dup jz _uart_puts_done
+.loop:
+    dup @8 dup jz .done
     call uart_putc
-    #8 0x01i8 + jmp _uart_puts_loop
-_uart_puts_done:
+    #8 0x01i8 + jmp .loop
+.done:
     drop drop ;