Oswajanie asm.

Ostatnie moje pomysły skłoniły mnie do dalszego oswajania madsa 🙂

adres equ $80

      org $600
      print_line #napis1
      print_line #napis2
      print_line #napis3
      jmp *

print_line .proc (.word adres) .var
      ldy #0
@     phr
      lda (adres),y
      beq @+
      print_char
      plr
      iny
      jmp @-
@     plr
      rts
.endp

print_char .proc
      tax
      lda $0347 ;ICPTL/H from IOCB #0
      pha
      lda $0346
      pha
      txa
      rts
.endp

napis1 .by 'Atari',$9b,0
napis2 .by 'rulez',$9b,0
napis3 .by '!!!!!!!!!!',$9b,0

Spodobała mi się sztuczka z wypchaniem na stos wektora i rts, co  powoduje „powrót” pod adres ze stosu (zamiast jsr). Druga sztuczka, której zastosowania jeszcze przede mną do odkrycia, to magiczne gwiazdki:

      org $600
      ldy #0
      sty test
test  equ *+1
      lda #111
      sta 710
      jmp *

*+1 to bieżące położenie w pamięci + 1 bajt, czyli wartością spod etykiety można nadpisać operand. Takie programowanie generyczne sprzed trzech dekad :). No i jmp * sam sobie wykoncypowałem.

Reklamy

Neo430 czyli coś więcej niż mikrokontroler w FPGA.

Szukałem jakiegoś małego rdzenia mikrokontrolera w FPGA, który miałby wsparcie w gcc i znalazłem: projekt Neo430. Rewelacja! Jest to rozwinięcie MPS430 firmy Texas Instruments, które wykorzystuje narzędzia tego mikroprocesora. Co najważniejsze: dokumentacja jest świetna. Nawet taki lajkonik jak ja dał radę. Jedyna modyfikacja dla mojego chińskiego devboarda (Daxigua Logic^3 na Alterze Cyclone IV EP4CE6E22C8), to odwrócenie sygnału ledów gpio w neo430_test.vhd:

— constrain output signals —
gpio_o <= not gpio_out(7 downto 0);

Core zajmuje 19% LE (1181 elementów logicznych) FPGA, zostaje sporo na zabawę i mieści się bez problemu we flashu EPCS4 :).

Tom2.

Postanowiłem przetestować taki minimalistyczny retro-zestaw: Atari 600XL z SIO2BT do emulacji stacji dysków, oraz interfejs TOM2 z bezprzewodowym padem Logitech F710. Działa fajnie, a zajmuje naprawdę niewiele miejsca i poza krótkim adapterem do portu joysticka (wtyczka DB9 nie pasuje do portu Atari) nie wymaga żadnych kabli. Muszę tylko zmodyfikować moje ulubione shootery. Zacznę od River Raid i Space Invaders, tak żeby dało się je włączać przyciskiem Fire, a nie Start ;).

Duży arbuz miga, czyli chiński devboard FPGA.

O dziwo przesyłka dotarła w 20 dni… Daleka droga przede mną, ale od czegoś trzeba zacząć 😉


module light
 (
   input x1, x2,
   output f
 );
   assign f = ~((x1 & ~x2) | (~x1 & x2));
endmodule

A tutaj diody migają wg zegara:

module leds 
 ( 
    input clk_50, 
    output [7:0] led_arr 
 ); 
 
    reg [25:0] counter; 
    reg [8:0] state = 9'b011111111; 
    reg shft = 1'b0; 
 
    assign led_arr = state[8:1]; 
 
    always @ (posedge clk_50) begin 
        counter <= counter + 1'd1; 
        shft <= counter[25]; // zmiana statusu co 0.6s  
 
        if (shft) 
         begin 
               state <= state >> 1; 
               counter <= 0; 
               shft <= 0; 
         end 
 
         if (state == 9'b000000000) 
             state <= 9'b011111111; 
    end  
endmodule

Wszystkie eksperymenta będę wrzucał tutaj:

https://bitbucket.org/greblus/fpga_fun

Wątpie żeby komuś się to do czegoś przydało, ale przyda się na pewno mnie 😉

Mera400f…

Niestety mój devboard jest nadal w Hefei City :(. Budowanie rdzenia dla:
FAMILY = „CycloneIV E”
DEVICE = EP4CE6E22A7
trwało chwilę, ale z przypisaniem pinów i przerobieniem sevenseg.v dla mojego chińskiego wynalazku będę miał prawdziwy „crash course in (FPGA) brain surgery” 🙂